常用算法和數據結構的復雜度速查表,
搜索
算法 |
數據結構 |
時間復雜度 |
空間復雜度 |
</tr>
|
|
平均 |
最差 |
最差 |
</tr>
</thead>
深度優先搜索 (DFS) |
Graph of |V| vertices and |E| edges |
- |
O(|E| + |V|) |
O(|V|) |
</tr>
廣度優先搜索 (BFS) |
Graph of |V| vertices and |E| edges |
- |
O(|E| + |V|) |
O(|V|) |
</tr>
二分查找 |
Sorted array of n elements |
O(log(n)) |
O(log(n)) |
O(1) |
</tr>
窮舉查找 |
Array |
O(n) |
O(n) |
O(1) |
</tr>
最短路徑-Dijkstra,用小根堆作為優先隊列 |
Graph with |V| vertices and |E| edges |
O((|V| + |E|) log |V|) |
O((|V| + |E|) log |V|) |
O(|V|) |
</tr>
最短路徑-Dijkstra,用無序數組作為優先隊列 |
Graph with |V| vertices and |E| edges |
O(|V|^2) |
O(|V|^2) |
O(|V|) |
</tr>
最短路徑-Bellman-Ford |
Graph with |V| vertices and |E| edges |
O(|V||E|) |
O(|V||E|) |
O(|V|) |
</tr>
</tbody>
</table>
排序
算法 |
數據結構 |
時間復雜度 |
最壞情況下的輔助空間復雜度 |
</tr>
|
|
最佳 |
平均 |
最差 |
最差 |
</tr>
</thead>
快速排序 |
數組 |
O(n log(n)) |
O(n log(n)) |
O(n^2) |
O(n) |
</tr>
歸并排序 |
數組 |
O(n log(n)) |
O(n log(n)) |
O(n log(n)) |
O(n) |
</tr>
堆排序 |
數組 |
O(n log(n)) |
O(n log(n)) |
O(n log(n)) |
O(1) |
</tr>
冒泡排序 |
數組 |
O(n) |
O(n^2) |
O(n^2) |
O(1) |
</tr>
插入排序 |
數組 |
O(n) |
O(n^2) |
O(n^2) |
O(1) |
</tr>
選擇排序 |
數組 |
O(n^2) |
O(n^2) |
O(n^2) |
O(1) |
</tr>
桶排序 |
數組 |
O(n+k) |
O(n+k) |
O(n^2) |
O(nk) |
</tr>
基數排序 |
數組 |
O(nk) |
O(nk) |
O(nk) |
O(n+k) |
</tr>
</tbody>
</table>
數據結構
數據結構 |
時間復雜度 |
空間復雜度 |
</tr>
|
平均 |
最差 |
最差 |
</tr>
|
索引 |
查找 |
插入 |
刪除 |
索引 |
查找 |
插入 |
刪除 |
|
</tr>
</thead>
基本數組 |
O(1) |
O(n) |
- |
- |
O(1) |
O(n) |
- |
- |
O(n) |
</tr>
動態數組 |
O(1) |
O(n) |
O(n) |
O(n) |
O(1) |
O(n) |
O(n) |
O(n) |
O(n) |
</tr>
單鏈表 |
O(n) |
O(n) |
O(1) |
O(1) |
O(n) |
O(n) |
O(1) |
O(1) |
O(n) |
</tr>
雙鏈表 |
O(n) |
O(n) |
O(1) |
O(1) |
O(n) |
O(n) |
O(1) |
O(1) |
O(n) |
</tr>
跳表 |
O(log(n)) |
O(log(n)) |
O(log(n)) |
O(log(n)) |
O(n) |
O(n) |
O(n) |
O(n) |
O(n log(n)) |
</tr>
哈希表 |
- |
O(1) |
O(1) |
O(1) |
- |
O(n) |
O(n) |
O(n) |
O(n) |
</tr>
二叉搜索樹 |
O(log(n)) |
O(log(n)) |
O(log(n)) |
O(log(n)) |
O(n) |
O(n) |
O(n) |
O(n) |
O(n) |
</tr>
笛卡爾樹 |
- |
O(log(n)) |
O(log(n)) |
O(log(n)) |
- |
O(n) |
O(n) |
O(n) |
O(n) |
</tr>
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) |
</tr>
紅黑樹 |
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) |
</tr>
伸展樹 |
- |
O(log(n)) |
O(log(n)) |
O(log(n)) |
- |
O(log(n)) |
O(log(n)) |
O(log(n)) |
O(n) |
</tr>
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) |
</tr>
</tbody>
</table>
堆
Heaps |
時間復雜度 |
</tr>
|
建堆 |
查找最大值 |
提取最大值 |
Increase Key |
插入 |
刪除 |
合并 |
|
</tr>
</thead>
鏈表(已排序) |
- |
O(1) |
O(1) |
O(n) |
O(n) |
O(1) |
O(m+n) |
</tr>
鏈表(未排序) |
- |
O(n) |
O(n) |
O(1) |
O(1) |
O(1) |
O(1) |
</tr>
二叉堆 |
O(n) |
O(1) |
O(log(n)) |
O(log(n)) |
O(log(n)) |
O(log(n)) |
O(m+n) |
</tr>
二項堆 |
- |
O(log(n)) |
O(log(n)) |
O(log(n)) |
O(log(n)) |
O(log(n)) |
O(log(n)) |
</tr>
斐波那契堆 |
- |
O(1) |
O(log(n))* |
O(1)* |
O(1) |
O(log(n))* |
O(1) |
</tr>
</tbody>
</table>
圖
節點 / 邊 管理 |
Storage |
Add Vertex |
Add Edge |
Remove Vertex |
Remove Edge |
Query |
</tr>
鄰接表 |
O(|V|+|E|) |
O(1) |
O(1) |
O(|V| + |E|) |
O(|E|) |
O(|V|) |
</tr>
關聯表 |
O(|V|+|E|) |
O(1) |
O(1) |
O(|E|) |
O(|E|) |
O(|E|) |
</tr>
鄰接矩陣 |
O(|V|^2) |
O(|V|^2) |
O(1) |
O(|V|^2) |
O(1) |
O(1) |
</tr>
關聯矩陣 |
O(|V| ? |E|) |
O(|V| ? |E|) |
O(|V| ? |E|) |
O(|V| ? |E|) |
O(|V| ? |E|) |
O(|E|) |
</tr>
</tbody>
</table>
英文版鏈接:http://bigocheatsheet.com/
</div>
來自:http://top.jobbole.com/1599/
本文由用戶
jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!
sesese色