常用算法和數據結構的複雜度速查表,
轉自:http://blog.csdn.net/qq_33583069/article/details/52808381
搜索
算法 |
數據結構 |
時間複雜度 |
空間複雜度 |
---|
|
|
平均 |
最差 |
最差 |
---|
深度優先搜索 (DFS) |
Graph of |V| vertices and |E| edges |
- |
O(|E| + |V|) |
O(|V|) |
廣度優先搜索 (BFS) |
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) |
最短路徑-Dijkstra,用小根堆作爲優先隊列 |
Graph with |V| vertices and |E| edges |
O((|V| + |E|) log |V|) |
O((|V| + |E|) log |V|) |
O(|V|) |
最短路徑-Dijkstra,用無序數組作爲優先隊列 |
Graph with |V| vertices and |E| edges |
O(|V|^2) |
O(|V|^2) |
O(|V|) |
最短路徑-Bellman-Ford |
Graph with |V| vertices and |E| edges |
O(|V||E|) |
O(|V||E|) |
O(|V|) |
排序
算法 |
數據結構 |
時間複雜度 |
最壞情況下的輔助空間複雜度 |
---|
|
|
最佳 |
平均 |
最差 |
最差 |
---|
快速排序 |
數組 |
O(n log(n)) |
O(n log(n)) |
O(n^2) |
O(n) |
歸併排序 |
數組 |
O(n log(n)) |
O(n log(n)) |
O(n log(n)) |
O(n) |
堆排序 |
數組 |
O(n log(n)) |
O(n log(n)) |
O(n log(n)) |
O(1) |
冒泡排序 |
數組 |
O(n) |
O(n^2) |
O(n^2) |
O(1) |
插入排序 |
數組 |
O(n) |
O(n^2) |
O(n^2) |
O(1) |
選擇排序 |
數組 |
O(n^2) |
O(n^2) |
O(n^2) |
O(1) |
桶排序 |
數組 |
O(n+k) |
O(n+k) |
O(n^2) |
O(nk) |
基數排序 |
數組 |
O(nk) |
O(nk) |
O(nk) |
O(n+k) |
數據結構
數據結構 |
時間複雜度 |
空間複雜度 |
---|
|
平均 |
最差 |
最差 |
---|
|
索引 |
查找 |
插入 |
刪除 |
索引 |
查找 |
插入 |
刪除 |
|
---|
基本數組 |
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) |
堆
Heaps |
時間複雜度 |
---|
|
建堆 |
查找最大值 |
提取最大值 |
Increase Key |
插入 |
刪除 |
合併 |
|
---|
鏈表(已排序) |
- |
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) |
圖
節點 / 邊 管理 |
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|) |
英文版鏈接:http://bigocheatsheet.com/