TimeComplexity - Python Wiki

1. 底层数据结构

  • list 的底层是数组(array),其最大的时间空间消耗出现在存储元素增长超过当前数组分配的大小时,所有元素都必须移动到新的位置,尤其对于头部的插入与删除(O(n));
  • 如果需要频繁对两端进行增删,可考虑使用 collections.deque;

2. deque 的特性

Python 中的 list 类型(使用其内部的 append:尾部进,和 pop 成员函数:尾部出,左端受限)能胜任 stack 的角色,但其在前端的 pop(或 insert)的操作时间都是线性级的。

而在 BFS(广度优先)这类算法中(尾部进,头部出),我们就需要一种双端队列(double-ended queue,deque)。这种队列通常都是用链表(其前后端的追加及 pop 都属于常数级操作)

Python 本身在其标准库的 collections 模块中就提供了 deque 类。

from collections import deque

该类在右端:

  • (1)append
  • (2)extend
  • (3)pop

左端:

  • (1)appendleft
  • (2)extendleft
  • (3)popleft

在内部,deque 类的实现是一个块空间的双向链表,其中每个独立元素都是一个数组。尽管它与纯独立元素组成的链表近乎等效,但这样做能降低开销并且再实践中更为有效。例如,如果它是一个普通的列表,我们通过表达式 d[k] 就能访问到 d 队列中的第 k 个元素。同理,如果 deque 对象中的每个快空间中都有 b 个元素,那么我们就只需要遍历第 k/b 块空间就够了。

Python 数据结构与算法 —— list与deque(双端队列)相关推荐

  1. python deque双端队列的神奇用法

    python中的deque双端队列,类似list的任意一端都可实现较快的add和pop操作 from collections import dequed=deque(maxlen=20) for i ...

  2. C++---deque双端队列

    deque deque双端队列,是C++,STL标准模板库中提供的一种容器. 什么是双队列 队列:是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear) ...

  3. Python数据结构与算法(二)栈和队列

    本系列总结了python常用的数据结构和算法,以及一些编程实现. 参考书籍:<数据结构与算法 Python语言实现> [美]Michael T.Goodrich, Roberto Tama ...

  4. STL源码剖析 deque双端队列 概述

    vector是单向开口的连续线性空间,deque是一种双向开口的连续线性空间. deque可以在头尾两端分别进行元素的插入和删除操作 vector和deque的差异 1,deque允许常数时间内对于头 ...

  5. STL源码剖析 stack 栈 概述->(使用deque双端队列 / list链表)作为stack的底层容器

    Stack是一种先进后出的数据结构,他只有一个出口 stack允许 新增元素.移除元素.取得最顶端的元素,但是无法获得stack的内部数据,因此satck没有遍历行为 Stack定义的完整列表 (双端 ...

  6. stl之deque双端队列容器

    deque与vector非常相似,不仅可以在尾部插入和删除元素,还可以在头部插入和删除.不过当考虑到容器元素的内存分配策略和操作性能时,deque相对vector较为有优势. 头文件 #include ...

  7. Java 集合深入理解(10):Deque 双端队列

    点击查看 Java 集合框架深入理解 系列, - ( ゜- ゜)つロ 乾杯~ 什么是 Deque Deque 是 Double ended queue (双端队列) 的缩写,读音和 deck 一样,蛋 ...

  8. 线性数据结构的实现与应用_双端队列_逆波兰式_呼叫中心_XAUAT_(原问题自杜克大学Duke University cps110 C++ Stacks and Queues and Lists)

    求收藏求转发! 附实验报告链接: https://blog.csdn.net/weixin_43781565/article/details/106507340 提供DOC资源  https://do ...

  9. 算法提高课-搜索-双端队列广搜-AcWing 175. 电路维修:deque、bfs、有点难

    题目分析 来源:acwing 只有边权为0和边权为1,两种情况.什么意思呢?两个点之间存在路径则边权为0,需要转一下连通的边权为1. 每个点可能入队多次,本质上是个dijkstra算法. 下图说明bf ...

最新文章

  1. 残差神经网络_什么是残差——一文让你读懂GBDT(梯度提升树)-和-Resnet-(残差网络)的原理...
  2. 基于ThinkPHP框架下登录登出权限控制(一).
  3. 2013年新的开始,每周至少要写一篇博客!
  4. oracle事物的传播属性,spring事务的隔离级别和传播属性
  5. .NET异步编程之新利器——Task与Await、Async
  6. C和C++实务精选丛书
  7. 【Flink】Could not complete the operation,Number of retries has been exhausted
  8. kl距离 java_KL距离的计算
  9. c语言中if函数应用举例,if函数(if函数的应用举例)
  10. ABP 部署遇到的问题(记录)
  11. 好的商城系统都是这个样子的
  12. 前端修炼の道:第一个 HTML 页面
  13. ChatGPT会砸了谷歌的饭碗吗?(附彩蛋)
  14. ROS2 基础概念 节点
  15. 直流亥姆霍兹线圈和交流亥姆霍兹线圈的区别
  16. Python案例之QQ空间自动登录程序实现
  17. 哥白尼气候数据ERA5数据集——大气数据研究
  18. 【机器学习】Goldstein-Armijo line-search
  19. wp安装install.php,wordpress安装包怎么安装
  20. 计算机仿真模拟论文,计算机仿真论文

热门文章

  1. spark-sql配置并优化
  2. java 封装log4j_Java项目 切片实现log4j的终极封装
  3. html如何隐藏盒子的边框线,用DIV和CSS做一个实线边框的红色盒子
  4. java金字塔显示_java控制台输出数字金字塔示例分享
  5. vba excel 取得chart保存图片_保存Excel中的图片
  6. CUDA精进之路(零):CUDA开篇
  7. xp下创建DOMDocument对象失败的解决方法
  8. vueweb端响应式布局_响应式网站和PC+手机端网站有什么区别?
  9. 利用Servlet做一套增删改查
  10. 负载均衡获得真实源IP的6种方法 【转】