速查表:常用算法和數據結構的復雜度

jopen 10年前發布 | 16K 次閱讀 速查表 算法

常用算法和數據結構的復雜度速查表,

搜索

</tr>

</tr> </thead>

</tr>

</tr>

</tr>

</tr>

</tr>

</tr>

</tr> </tbody> </table>

排序

算法 數據結構 時間復雜度 空間復雜度


平均 最差 最差
深度優先搜索 (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|)

</tr>

</tr> </thead>

</tr>

</tr>

</tr>

</tr>

</tr>

</tr>

</tr>

</tr> </tbody> </table>

數據結構

算法 數據結構 時間復雜度 最壞情況下的輔助空間復雜度


最佳 平均 最差 最差
快速排序 數組 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)

</tr>

</tr>

</tr> </thead>

</tr>

</tr>

</tr>

</tr>

</tr>

</tr>

</tr>

</tr>

</tr>

</tr>

</tr>

</tr> </tbody> </table>

數據結構 時間復雜度 空間復雜度

平均 最差 最差

索引 查找 插入 刪除 索引 查找 插入 刪除
基本數組 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)

</tr>

</tr> </thead>

</tr>

</tr>

</tr>

</tr>

</tr> </tbody> </table>

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)

</tr>

</tr>

</tr>

</tr>

</tr> </tbody> </table>

 

英文版鏈接:http://bigocheatsheet.com/

</div> 來自:http://top.jobbole.com/1599/

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!
節點 / 邊 管理 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|)
  • sesese色