大O符号
大O符号(Big-O notation)是用于描述函数渐近行为的数学符号。它用另一个(通常更简单的)函数来描述一个函数数量级的渐近上界。下图展示了算法分析中一些常见的增长曲线。

数组排序
| Algorithm |
Categories |
Stability |
Time Complexity |
Space Complexity |
| Best |
Average |
Worst |
Worst |
| Quicksort |
Exchange sorts |
unstable |
Ω(n log(n)) |
Θ(n log(n)) |
O(n^2) |
O(n) / O(log(n)) |
| Mergesort |
Merge sorts |
stable |
Ω(n log(n)) |
Θ(n log(n)) |
O(n log(n)) |
O(n) |
| Timsort |
Hybrid sorts |
stable |
Ω(n) |
Θ(n log(n)) |
O(n log(n)) |
O(n) |
| Heapsort |
Selection sorts |
unstable |
Ω(n log(n)) |
Θ(n log(n)) |
O(n log(n)) |
O(1) |
| Bubble Sort |
Exchange sorts |
stable |
Ω(n) |
Θ(n^2) |
O(n^2) |
O(1) |
| Insertion Sort |
Insertion sorts |
stable |
Ω(n) |
Θ(n^2) |
O(n^2) |
O(1) |
| Selection Sort |
Selection sorts |
unstable |
Ω(n^2) |
Θ(n^2) |
O(n^2) |
O(1) |
| Shell Sort |
Insertion sorts |
unstable |
Ω(n log(n)) |
Θ(n(log(n))^2) |
O(n(log(n))^2) |
O(1) |
| Bucket Sort |
Distribution sorts |
stable |
Ω(n+k) |
Θ(n+k) |
O(n^2) |
O(nk) / O(n) |
| Radix Sort |
Distribution sorts |
stable |
Ω(nk) |
Θ(nk) |
O(nk) |
O(n+k) |
| Counting Sort |
Distribution sorts |
stable |
Ω(n+k) |
Θ(n+k) |
O(n+k) |
O(k) |
| Cubesort |
- |
stable |
Ω(n) |
Θ(n log(n)) |
O(n log(n)) |
O(n) |
数据结构操作
通用数据结构
| Data Structure |
Time Complexity |
Space Complexity |
| Average |
Worst |
Worst |
| Access |
Search |
Insertion |
Deletion |
Access |
Search |
Insertion |
Deletion |
|
| Array |
Θ(1) |
Θ(n) |
Θ(n) / O(1) |
Θ(n) / O(1) |
O(1) |
O(n) |
O(n) / O(1) |
O(n) / O(1) |
O(n) |
| Stack |
Θ(n) |
Θ(n) |
Θ(1) |
Θ(1) |
O(n) |
O(n) |
O(1) |
O(1) |
O(n) |
| Queue |
Θ(n) |
Θ(n) |
Θ(1) |
Θ(1) |
O(n) |
O(n) |
O(1) |
O(1) |
O(n) |
| Singly-Linked List |
Θ(n) |
Θ(n) |
Θ(1) |
Θ(1) |
O(n) |
O(n) |
O(1) |
O(1) |
O(n) |
| Doubly-Linked List |
Θ(n) |
Θ(n) |
Θ(1) |
Θ(1) |
O(n) |
O(n) |
O(1) |
O(1) |
O(n) |
| Skip List |
Θ(log(n)) |
Θ(log(n)) |
Θ(log(n)) |
Θ(log(n)) |
O(n) |
O(n) |
O(n) |
O(n) |
O(n log(n)) |
| Hash Table |
N/A |
Θ(1) |
Θ(1) |
Θ(1) |
N/A |
O(n) |
O(n) |
O(n) |
O(n) |
| Binary Search Tree |
Θ(log(n)) |
Θ(log(n)) |
Θ(log(n)) |
Θ(log(n)) |
O(n) |
O(n) |
O(n) |
O(n) |
O(n) |
| Cartesian Tree |
N/A |
Θ(log(n)) |
Θ(log(n)) |
Θ(log(n)) |
N/A |
O(n) |
O(n) |
O(n) |
O(n) |
| B-Tree |
Θ(log(n)) |
Θ(log(n)) |
Θ(log(n)) |
Θ(log(n)) |
O(log(n)) |
O(log(n)) |
O(log(n)) |
O(log(n)) |
O(n) |
| Red-Black Tree |
Θ(log(n)) |
Θ(log(n)) |
Θ(log(n)) |
Θ(log(n)) |
O(log(n)) |
O(log(n)) |
O(log(n)) |
O(log(n)) |
O(n) |
| Splay Tree |
N/A |
Θ(log(n)) |
Θ(log(n)) |
Θ(log(n)) |
N/A |
O(log(n)) |
O(log(n)) |
O(log(n)) |
O(n) |
| AVL Tree |
Θ(log(n)) |
Θ(log(n)) |
Θ(log(n)) |
Θ(log(n)) |
O(log(n)) |
O(log(n)) |
O(log(n)) |
O(log(n)) |
O(n) |
| KD Tree |
Θ(log(n)) |
Θ(log(n)) |
Θ(log(n)) |
Θ(log(n)) |
O(n) |
O(n) |
O(n) |
O(n) |
O(n) |
堆
| Heaps |
Time Complexity |
| Heapify |
Find Max |
Extract Max |
Increase Key |
Insert |
Delete |
Merge |
| Sorted LinkedList |
- |
O(1) |
O(1) |
O(n) |
O(n) |
O(1) |
O(m+n) |
| Unsorted Linked List |
- |
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(log(n)) |
O(log(n)) |
O(log(n)) |
O(log(n)) |
O(log(n)) |
O(log(n)) |
| Fibonacci Heap |
- |
O(1) |
O(log(n)) |
O(1) |
O(1) |
O(log(n)) |
O(1) |
图
| Node / Edge Management |
Storage |
Add Vertex |
Add Edge |
Remove V ertex |
Remove Edge |
Query |
| 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|) |
查找算法
| Algorithm |
Data Structure |
Time Complexity |
Space Complexity |
| Average |
Worst |
Worst |
| Depth First Search |
Graph of |V|vertices and |E|edges |
- |
O(|E| + |V|) |
O(|V|) |
| Breadth First Search |
Graph of |V|vertices and |E|edges |
- |
O(|E| + |V|) |
O(|V|) |
| Binary Search |
Sorted array of nelements |
O(log(n)) |
O(log(n)) |
O(1) |
| Brute Force |
Array |
O(n) |
O(n) |
O(1) |
| Shortest path by Bellman-Ford |
Graph with |V|vertices and |E|edges |
O(|V||E|) |
O(|V||E|) |
O(|V|) |
REFERENCE
http://www.bigocheatsheet.com/
http://en.wikipedia.org/wiki/Array_data_structure
http://en.wikipedia.org/wiki/Singly_linked_list#Singly_linked_lists
http://en.wikipedia.org/wiki/Doubly_linked_list
http://en.wikipedia.org/wiki/Skip_list
http://en.wikipedia.org/wiki/Hash_table
http://en.wikipedia.org/wiki/Binary_search_tree
http://en.wikipedia.org/wiki/Quicksort
http://en.wikipedia.org/wiki/Merge_sort
http://en.wikipedia.org/wiki/Timsort
http://en.wikipedia.org/wiki/Heapsort
http://en.wikipedia.org/wiki/Bubble_sort
http://en.wikipedia.org/wiki/Insertion_sort
http://en.wikipedia.org/wiki/Selection_sort
http://en.wikipedia.org/wiki/Bucket_sort
http://en.wikipedia.org/wiki/Radix_sort
http://en.wikipedia.org/wiki/Adjacency_list
http://en.wikipedia.org/wiki/Incidence_list
http://en.wikipedia.org/wiki/Incidence_matrix
http://en.wikipedia.org/wiki/Adjacency_matrix
http://en.wikipedia.org/wiki/Linked_list
http://en.wikipedia.org/wiki/Binary_heap
http://en.wikipedia.org/wiki/Binomial_heap
http://en.wikipedia.org/wiki/Fibonacci_heap