程序员的 常用 算法 复杂度 速查表 Big O 时间复杂度



 

 

 程序员的 常用 算法 复杂度 速查表_算法

1

算法复杂度这件事

这篇文章覆盖了计算机科学里面常见算法的时间和空间的大 OBig-O 复杂度。我之前在参加面试前,经常需要花费很多时间从互联网上查找各种搜索和排序算法的优劣,以便我在面试时不会被问住。最近这几年,我面试了几家硅谷的初创企业和一些更大一些的公司,如 Yahoo、eBay、LinkedIn 和 Google,每次我都需要准备这个,我就在问自己,“为什么没有人创建一个漂亮的大 O 速查表呢?”所以,为了节省大家的时间,我就创建了这个,希望你喜欢!

— ​​Eric​

 

图例

绝佳

不错

一般

不佳

糟糕

 

数据结构操作

​Array​

O(1)

O(n)

O(n)

O(n)

O(1)

O(n)

O(n)

O(n)

O(n)

​Stack​

O(n)

O(n)

O(1)

O(1)

O(n)

O(n)

O(1)

O(1)

O(n)

​Singly-Linked List​

O(n)

O(n)

O(1)

O(1)

O(n)

O(n)

O(1)

O(1)

O(n)

​Doubly-Linked List​

O(n)

O(n)

O(1)

O(1)

O(n)

O(n)

O(1)

O(1)

O(n)

​Skip List​

O(log(n))

O(log(n))

O(log(n))

O(log(n))

O(n)

O(n)

O(n)

O(n)

O(n log(n))

​Hash Table​

O(1)

O(1)

O(1)

O(n)

O(n)

O(n)

O(n)

​Binary Search Tree​

O(log(n))

O(log(n))

O(log(n))

O(log(n))

O(n)

O(n)

O(n)

O(n)

O(n)

​Cartesian Tree​

O(log(n))

O(log(n))

O(log(n))

O(n)

O(n)

O(n)

O(n)

​B-Tree​

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)

​Red-Black Tree​

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)

​Splay Tree​

O(log(n))

O(log(n))

O(log(n))

O(log(n))

O(log(n))

O(log(n))

O(n)

​AVL Tree​

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)

数据结构

时间复杂度

空间复杂度








 

平均

最差

最差







 

访问

搜索

插入

删除

访问

搜索

插入

删除

 

 

数组排序算法

​Quicksort​

O(n log(n))

O(n log(n))

O(n^2)

O(log(n))

​Mergesort​

O(n log(n))

O(n log(n))

O(n log(n))

O(n)

​Timsort​

O(n)

O(n log(n))

O(n log(n))

O(n)

​Heapsort​

O(n log(n))

O(n log(n))

O(n log(n))

O(1)

​Bubble Sort​

O(n)

O(n^2)

O(n^2)

O(1)

​Insertion Sort​

O(n)

O(n^2)

O(n^2)

O(1)

​Selection Sort​

O(n^2)

O(n^2)

O(n^2)

O(1)

​Shell Sort​

O(n)

O((nlog(n))^2)

O((nlog(n))^2)

O(1)

​Bucket Sort​

O(n+k)

O(n+k)

O(n^2)

O(n)

​Radix Sort​

O(nk)

O(nk)

O(nk)

O(n+k)

算法

时间复杂度

空间复杂度



 

最佳

平均

最差

最差

 

图操作

节点 / 边界管理

存储

增加顶点

增加边界

移除顶点

移除边界

查询

​Adjacency list​

O(|V|+|E|)

O(1)

O(1)

O(|V| + |E|)

O(|E|)

O(|V|)

​Incidence list​

O(|V|+|E|)

O(1)

O(1)

O(|E|)

O(|E|)

O(|E|)

​Adjacency matrix​

O(|V|^2)

O(|V|^2)

O(1)

O(|V|^2)

O(1)

O(1)

​Incidence matrix​

O(|V| ⋅ |E|)

O(|V| ⋅ |E|)

O(|V| ⋅ |E|)

O(|V| ⋅ |E|)

O(|V| ⋅ |E|)

O(|E|)

 

堆操作

​Linked List (sorted)​

O(1)

O(1)

O(n)

O(n)

O(1)

O(m+n)

​Linked List (unsorted)​

O(n)

O(n)

O(1)

O(1)

O(1)

O(1)

​Binary Heap​

O(n)

O(1)

O(log(n))

O(log(n))

O(log(n))

O(log(n))

O(m+n)

​Binomial Heap​

O(1)

O(log(n))

O(log(n))

O(1)

O(log(n))

O(log(n))

​Fibonacci Heap​

O(1)

O(log(n))

O(1)

O(1)

O(log(n))

O(1)

类型

时间复杂度







 

HEAPIFY

查找最大值

分离最大值

提升键

插入

删除

合并