常用算法--复杂度速查表

复杂度速查表

本篇基本上是原作的翻译。转载请保留本段文字。

复杂度通常会使用大-O 记号来表示,比如快速排序的平均时间复杂度是 O(nlog(n))O(nlog⁡(n))。虽然我是「理解派」,但是虽然每个算法/数据结构都理解了,不时仍有可能忘记具体某个算法/数据结构的复杂度(特别是在最好、最坏和平均情形下的复杂度)。因此制作一个速查表是蛮有必要的。

动手前先看看是否已经有轮子是一个好习惯,果不其然,我找到了原作

图例

最佳一般不好糟糕

抽象数据结构的操作复杂度

数据结构时间复杂度空间复杂度
 平均最差最差
 访问搜索插入删除访问搜索插入删除 
顺序表O(1)O(1)O(n)O(n)O(n)O(n)O(n)O(n)O(1)O(1)O(n)O(n)O(n)O(n)O(n)O(n)O(n)O(n)
O(n)O(n)O(n)O(n)O(1)O(1)O(1)O(1)O(n)O(n)O(n)O(n)O(1)O(1)O(1)O(1)O(n)O(n)
单链表O(n)O(n)O(n)O(n)O(1)O(1)O(1)O(1)O(n)O(n)O(n)O(n)O(1)O(1)O(1)O(1)O(n)O(n)
双链表O(n)O(n)O(n)O(n)O(1)O(1)O(1)O(1)O(n)O(n)O(n)O(n)O(1)O(1)O(1)O(1)O(n)O(n)
跳表O(log(n))O(log⁡(n))O(log(n))O(log⁡(n))O(log(n))O(log⁡(n))O(log(n))O(log⁡(n))O(n)O(n)O(n)O(n)O(n)O(n)O(n)O(n)O(nlog(n))O(nlog⁡(n))
散列表-O(1)O(1)O(1)O(1)O(1)O(1)-O(n)O(n)O(n)O(n)O(n)O(n)O(n)O(n)
二叉搜索树O(log(n))O(log⁡(n))O(log(n))O(log⁡(n))O(log(n))O(log⁡(n))O(log(n))O(log⁡(n))O(n)O(n)O(n)O(n)O(n)O(n)O(n)O(n)O(n)O(n)
笛卡尔树-O(log(n))O(log⁡(n))O(log(n))O(log⁡(n))O(log(n))O(log⁡(n))-O(n)O(n)O(n)O(n)O(n)O(n)O(n)O(n)
B-树O(log(n))O(log⁡(n))O(log(n))O(log⁡(n))O(log(n))O(log⁡(n))O(log(n))O(log⁡(n))O(log(n))O(log⁡(n))O(log(n))O(log⁡(n))O(log(n))O(log⁡(n))O(log(n))O(log⁡(n))O(n)O(n)
红黑树O(log(n))O(log⁡(n))O(log(n))O(log⁡(n))O(log(n))O(log⁡(n))O(log(n))O(log⁡(n))O(log(n))O(log⁡(n))O(log(n))O(log⁡(n))O(log(n))O(log⁡(n))O(log(n))O(log⁡(n))O(n)O(n)
伸展树-O(log(n))O(log⁡(n))O(log(n))O(log⁡(n))O(log(n))O(log⁡(n))-O(log(n))O(log⁡(n))O(log(n))O(log⁡(n))O(log(n))O(log⁡(n))O(n)O(n)
AVL 树O(log(n))O(log⁡(n))O(log(n))O(log⁡(n))O(log(n))O(log⁡(n))O(log(n))O(log⁡(n))O(log(n))O(log⁡(n))O(log(n))O(log⁡(n))O(log(n))O(log⁡(n))O(log(n))O(log⁡(n))O(n)O(n)

数组排序

算法时间复杂度空间复杂度
 最佳平均最差最差
快速排序O(nlog(n))O(nlog⁡(n))O(nlog(n))O(nlog⁡(n))O(n2)O(n2)O(log(n))O(log⁡(n))
归并排序O(nlog(n))O(nlog⁡(n))O(nlog(n))O(nlog⁡(n))O(nlog(n))O(nlog⁡(n))O(n)O(n)
TimsortO(n)O(n)O(nlog(n))O(nlog⁡(n))O(nlog(n))O(nlog⁡(n))O(n)O(n)
堆排序O(nlog(n))O(nlog⁡(n))O(nlog(n))O(nlog⁡(n))O(nlog(n))O(nlog⁡(n))O(1)O(1)
冒泡排序O(n)O(n)O(n2)O(n2)O(n2)O(n2)O(1)O(1)
插入排序O(n)O(n)O(n2)O(n2)O(n2)O(n2)O(1)O(1)
选择排序O(n2)O(n2)O(n2)O(n2)O(n2)O(n2)O(1)O(1)
希尔排序O(n)O(n)O((nlog(n))2)O((nlog⁡(n))2)O((nlog(n))2)O((nlog⁡(n))2)O(1)O(1)
桶排序O(n+k)O(n+k)O(n+k)O(n+k)O(n2)O(n2)O(n)O(n)
基数排序O(nk)O(nk)O(nk)O(nk)O(nk)O(nk)O(n+k)O(n+k)

图操作

节点 / 边界管理存储增加顶点增加边界移除顶点移除边界查询
邻接表O(|V|+|E|)O(|V|+|E|)O(1)O(1)O(1)O(1)O(|V|+|E|)O(|V|+|E|)O(|E|)O(|E|)O(|V|)O(|V|)
邻接矩阵O(|V|2)O(|V|2)O(|V|2)O(|V|2)O(1)O(1)O(|V|2)O(|V|2)O(1)O(1)O(1)O(1)

堆操作

类型时间复杂度
 建堆查找最大值分离最大值提升键插入删除合并
(排好序的)链表-O(1)O(1)O(1)O(1)O(n)O(n)O(n)O(n)O(1)O(1)O(m+n)O(m+n)
(未排序的)链表-O(n)O(n)O(n)O(n)O(1)O(1)O(1)O(1)O(1)O(1)O(1)O(1)
二叉堆O(n)O(n)O(1)O(1)O(log(n))O(log⁡(n))O(log(n))O(log⁡(n))O(log(n))O(log⁡(n))O(log(n))O(log⁡(n))O(m+n)O(m+n)
二项堆-O(1)O(1)O(log(n))O(log⁡(n))O(log(n))O(log⁡(n))O(1)O(1)O(log(n))O(log⁡(n))O(log(n))O(log⁡(n))
斐波那契堆-O(1)O(1)O(log(n))O(log⁡(n))O(1)O(1)O(1)O(1)O(log(n))O(log⁡(n))O(1)O(1)

大-O 复杂度曲线

俗话说,投资效率是最好的投资。 如果您感觉我的文章质量不错,读后收获很大,预计能为您提高 10% 的工作效率,不妨小额捐助我一下,让我有动力继续写出更多好文章。

转载于:https://www.cnblogs.com/wodeboke-y/p/11399990.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值