原文网址:http://bigocheatsheet.com/
Word文档下载:http://download.youkuaiyun.com/detail/anshan1984/5583399
Searching(搜索算法)
| Algorithm(算法) | Data Structure (数据结构) | Time Complexity (时间复杂度) | Space Complexity (空间复杂度) | |
|
|
| Average(平均) | Worst(最差) | Worst(最差) |
| Graph of |V| vertices and |E| edges | - | O(|E| + |V|) | O(|V|) | |
| Graph of |V| vertices and |E| edges | - | O(|E| + |V|) | O(|V|) | |
| Sorted array of n elements | O(log(n)) | O(log(n)) | O(1) | |
| Array | O(n) | O(n) | O(1) | |
| using a Min-heap as priority queue(Dijkstra最短路径,使用最小堆作为优先队列) | Graph with |V| vertices and |E| edges | O((|V| + |E|) log |V|) | O((|V| + |E|) log |V|) | O(|V|) |
| Shortest path by Dijkstra, | Graph with |V| vertices and |E| edges | O(|V|^2) | O(|V|^2) | O(|V|) |
| Graph with |V| vertices and |E| edges | O(|V||E|) | O(|V||E|) | O(|V|) | |
Sorting(排序算法)
| Algorithm(算法) | Data Structure(数据结构) | Time Complexity(时间复杂度) | Worst Case Auxiliary Space Complexity (最差额外消耗空间复杂度) | ||
|
|
| Best | Average | Worst | Worst |
| (快速排序) | Array(数组) | O(n log(n)) | O(n log(n)) | O(n^2) | O(n) |
| (归并排序) | Array | O(n log(n)) | O(n log(n)) | O(n log(n)) | O(n) |
| (堆排序) | Array | O(n log(n)) | O(n log(n)) | O(n log(n)) | O(1) |
| (冒泡排序) | Array | O(n) | O(n^2) | O(n^2) | O(1) |
| (插入排序) | Array | O(n) | O(n^2) | O(n^2) | O(1) |
| (选择排序) | Array | O(n^2) | O(n^2) | O(n^2) | O(1) |
| (桶排序) | Array | O(n+k) | O(n+k) | O(n^2) | O(nk) |
| (基数排序) | Array | O(nk) | O(nk) | O(nk) | O(n+k) |
Heaps(堆)
| Heaps | Time Complexity(时间复杂度) | |||||||
|
| Heapify | Find Max | Extract Max | Increase Key | Insert | Delete | Merge |
|
| (有序链表) | - | O(1) | O(1) | O(n) | O(n) | O(1) | O(m+n) |
|
| (无序链表) | - | O(n) | O(n) | O(1) | O(1) | O(1) | O(1) |
|
| (二叉堆) | O(n) | O(1) | O(log(n)) | O(log(n)) | O(log(n)) | O(log(n)) | O(m+n) |
|
| (多项式堆) | - | O(log(n)) | O(log(n)) | O(log(n)) | O(log(n)) | O(log(n)) | O(log(n)) |
|
| (斐波那契堆) | - | O(1) | O(log(n)) | O(1) | O(1) | O(log(n)) | O(1) |
|
Graphs(图)
| Node / Edge Management | Storage | Add Vertex | Add Edge | Remove Vertex | Remove Edge | Query |
| (邻接表) | O(|V|+|E|) | O(1) | O(1) | O(|V| + |E|) | O(|E|) | O(|V|) |
| (关联表) | O(|V|+|E|) | O(1) | O(1) | O(|E|) | O(|E|) | O(|E|) |
| (邻接矩阵) | O(|V|^2) | O(|V|^2) | O(1) | O(|V|^2) | O(1) | O(1) |
| (关联矩阵) | O(|V|⋅|E|) | O(|V|⋅|E|) | O(|V|⋅|E|) | O(|V|⋅|E|) | O(|V|⋅|E|) | O(|E|) |
Data Structures(数据结构)
| Data Structure (数据结构) | Time Complexity (时间复杂度) | Space Complexity (空间复杂度) | |||||||
|
| Average(平均) | Worst(最差) | Worst(最差) | ||||||
|
| Indexing | Search | Insertion | Deletion | Indexing | Search | Insertion | Deletion |
|
| (基本数组) | O(1) | O(n) | - | - | O(1) | O(n) | - | - | O(n) |
| (动态数组) | O(1) | O(n) | O(n) | O(n) | O(1) | O(n) | O(n) | O(n) | O(n) |
| (单链表) | O(n) | O(n) | O(1) | O(1) | O(n) | O(n) | O(1) | O(1) | O(n) |
| (双链表) | O(n) | O(n) | O(1) | O(1) | O(n) | O(n) | O(1) | O(1) | O(n) |
| (跳跃表) | O(log(n)) | O(log(n)) | O(log(n)) | O(log(n)) | O(n) | O(n) | O(n) | O(n) | O(n log(n)) |
| (哈希表) | - | O(1) | O(1) | O(1) | - | O(n) | O(n) | O(n) | O(n) |
| (二叉查找树) | O(log(n)) | O(log(n)) | O(log(n)) | O(log(n)) | O(n) | O(n) | O(n) | O(n) | O(n) |
| (笛卡尔树) | - | O(log(n)) | O(log(n)) | O(log(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(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(log(n)) | O(log(n)) | O(log(n)) | - | O(log(n)) | O(log(n)) | O(log(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(n) |
Notation for asymptotic growth(渐进增长表示法)
| Letter(字母) | Bound(限制) | Growth(增长) |
| (theta) Θ | upper and lower, tight[1] | equal[2] |
| (big-oh) O | upper, tightness unknown | less than or equal[3] |
| (small-oh) o | upper, not tight | less than |
| (big omega) Ω | lower, tightness unknown | greater than or equal |
| (small omega) ω | lower, not tight | greater than |
[1] Big O is the upper bound,while Omega is the lower bound. Theta requires both Big O and Omega, so that'swhy it's referred to as atight bound (it must be boththe upper and lower bound). For example, an algorithm taking Omega(n log n)takes at least n log n time but has no upper limit. An algorithm taking Theta(nlog n) is far preferential since it takes AT LEAST n log n (Omega n log n) andNO MORE THAN n log n (Big O n log n).SO
大O是渐进上界,Ω是渐进下界。Θ需同时满足大O和Ω,故称为确界(必须同时符合上界和下界)。如,算法Ω(nlogn)消耗至少nlogn时间,但是没有上限。优先选择算法Θ(nlogn),因为它消耗至少nlogn(Ω(nlogn)),且不超过nlogn(O(nlogn))。
[2] f(x)=Θ(g(n)) means f (the running time of the algorithm) grows exactly like g when n (input size) gets larger. In other words, the growth rate of f(x) is asymptotically proportional to g(n).
f(x)=Θ(g(n))表示当n变大时,f(算法运行时间)的增长与g严格相同。即,f(x)增长率渐进正比于g(n)。
[3] Same thing. Here the growth rate is no faster than g(n). big-oh is the most useful because represents the worst-case behavior.
同样,这里增长率不超过g(n)。O极其有用,因为它表示了最差性能。
In short, if algorithm is __ then its performance is __
| algorithm | performance |
| o(n) | < n |
| O(n) | ≤ n |
| Θ(n) | = n |
| Ω(n) | ≥ n |
| ω(n) | > n |
Big-O Complexity Chart
欢迎来到我的优快云博客:http://blog.youkuaiyun.com/anshan1984/
本文深入探讨了算法和数据结构的基础知识,包括搜索算法、排序算法、时间复杂度、空间复杂度等内容,提供了详细的分析和实例说明。
1276

被折叠的 条评论
为什么被折叠?



