Python内置结构时间复杂度

列表(list)

以完全随机的列表考虑平均情况。

列表是以数组(Array)实现的。最大的开销发生在超过当前分配大小的增长,这种情况下所有元素都需要移动;或者是在起始位置附近插入或者删除元素,这种情况下所有在该位置后面的元素都需要移动。如果你需要在一个队列的两端进行增删的操作,应当使用collections.deque(双向队列)

图1-1 列表复杂度

双向队列(collections.deque)

deque (double-ended queue,双向队列)是以双向链表的形式实现的 (Well, a list of arrays rather than objects, for greater efficiency)。双向队列的两端都是可达的,但从查找队列中间的元素较为缓慢,增删元素就更慢了。

图1-2 双向队列复杂度

集合(set)

未列出的操作可参考 dict —— 二者的实现非常相似。

操作平均情况最坏情况

图1-3 集合复杂度

字典(dict)

下列字典的平均情况基于以下假设:

1. 对象的散列函数足够撸棒(robust),不会发生冲突。

2. 字典的键是从所有可能的键的集合中随机选择的。

小窍门:只使用字符串作为字典的键。这么做虽然不会影响算法的时间复杂度,但会对常数项产生显著的影响,这决定了你的一段程序能多快跑完。

图1-4 集合复杂度
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 本文翻译自Python Wiki本文基于GPL v2协议,转载请保留此协议。本文来源:http://www.ora...
    LdpcII阅读 2,032评论 0 0
  • 本文为《爬着学Python》系列第九篇文章。 从现在开始算是要进入“真刀真枪”的Python学习了。之所以这么说,...
    SyPy阅读 2,169评论 0 14
  • 也不知道是为什么庄庄总是机缘巧合的被分配到我身后的座位,斗智斗勇的故事太多了,回想起来为什么会喜欢他呢,两个原因,...
    linkmandytou阅读 148评论 0 0
  • 王的体型不大。 或者说,和普通猫比起来,他体型算中等偏瘦些的。 他一身灰白色的皮毛,全身上下都是肌肉,没有一丝一毫...
    24e2f6668318阅读 267评论 0 0
  • 爸妈的粑坨总是香甜, 小侄儿闹春闹得很晚, 转钟的烟花依旧灿烂, 点根香烟坐在床头, 希望像哲学家一样, 思考人生...
    濛濛细雨也知秋阅读 263评论 0 0