每一個程序員都應該收藏的算法複雜度速查表

編譯自:http://bigocheatsheet.com/做者: Eric
原創:LCTT https://linux.cn/article-7480-1.html譯者: wxy
本文地址:https://linux.cn/article-7480-1.htmlhtml

算法複雜度這件事

這篇文章覆蓋了計算機科學裏面常見算法的時間和空間的大 OBig-O 複雜度。我以前在參加面試前,常常須要花費不少時間從互聯網上查找各類搜索和排序算法的優劣,以便我在面試時不會被問住。最近這幾年,我面試了幾家硅谷的初創企業和一些更大一些的公司,如 Yahoo、eBay、LinkedIn 和 Google,每次我都須要準備這個,我就在問本身,「爲何沒有人建立一個漂亮的大 O 速查表呢?」因此,爲了節省你們的時間,我就建立了這個,但願你喜歡!linux

--- Eric git

 

圖例

絕佳 不錯 通常 不佳 糟糕

數據結構操做

數據結構 時間複雜度 空間複雜度
  平均 最差 最差
  訪問 搜索 插入 刪除 訪問 搜索 插入 刪除  
Array O(1) O(n) O(n) O(n) O(1) O(n) O(n) O(n) O(n)
Stack O(n) O(n) O(1) O(1) O(n) O(n) O(1) O(1) O(n)
Singly-Linked List O(n) O(n) O(1) O(1) O(n) O(n) O(1) O(1) O(n)
Doubly-Linked List O(n) O(n) O(1) O(1) O(n) O(n) O(1) O(1) O(n)
Skip List O(log(n)) O(log(n)) O(log(n)) O(log(n)) O(n) O(n) O(n) O(n) O(n log(n))
Hash Table - O(1) O(1) O(1) - O(n) O(n) O(n) O(n)
Binary Search Tree O(log(n)) O(log(n)) O(log(n)) O(log(n)) O(n) O(n) O(n) O(n) O(n)
Cartesian Tree - O(log(n)) O(log(n)) O(log(n)) - O(n) O(n) O(n) O(n)
B-Tree 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)
Red-Black Tree 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)
Splay Tree - O(log(n)) O(log(n)) O(log(n)) - O(log(n)) O(log(n)) O(log(n)) O(n)
AVL Tree 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)

數組排序算法

算法 時間複雜度 空間複雜度
  最佳 平均 最差 最差
Quicksort O(n log(n)) O(n log(n)) O(n^2) O(log(n))
Mergesort O(n log(n)) O(n log(n)) O(n log(n)) O(n)
Timsort O(n) O(n log(n)) O(n log(n)) O(n)
Heapsort O(n log(n)) O(n log(n)) O(n log(n)) O(1)
Bubble Sort O(n) O(n^2) O(n^2) O(1)
Insertion Sort O(n) O(n^2) O(n^2) O(1)
Selection Sort O(n^2) O(n^2) O(n^2) O(1)
Shell Sort O(n) O((nlog(n))^2) O((nlog(n))^2) O(1)
Bucket Sort O(n+k) O(n+k) O(n^2) O(n)
Radix Sort O(nk) O(nk) O(nk) O(n+k)

圖操做

節點 / 邊界管理 存儲 增長頂點 增長邊界 移除頂點 移除邊界 查詢
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|)

堆操做

類型 時間複雜度
  Heapify 查找最大值 分離最大值 提高鍵 插入 刪除 合併
Linked List (sorted) - O(1) O(1) O(n) O(n) O(1) O(m+n)
Linked List (unsorted) - 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(1) O(log(n)) O(log(n)) O(1) O(log(n)) O(log(n))
Fibonacci Heap - O(1) O(log(n)) O(1) O(1) O(log(n)) O(1)

大 O 複雜度圖表

Big O Complexity Graph

Big O Complexity Graphgithub

推薦閱讀

貢獻者

  1. Eric Rowell, creator of Concrete.js, an HTML5 Canvas Framework
  2. Quentin Pleple
  3. Michael Abed
  4. Nick Dizazzo
  5. Adam Forsyth
  6. David Dorfman
  7. Jay Engineer
  8. Jennifer Hamon
  9. Josh Davis
  10. Nodir Turakulov
  11. Bart Massey
  12. Vinnie Magro
  13. Miguel Amigot
  14. Drew Bailey
  15. Aneel Nazareth
  16. Rahul Chowdhury
  17. Robert Burke
  18. steven41292
  19. Brandon Amos
  20. Mike Davis
  21. Casper Van Gheluwe
  22. Joel Friedly
  23. Oleg
  24. Renfred Harper
  25. Piper Chester
  26. Eric Lefevre-Ardant
  27. Jonathan McElroy
  28. Si Pham
  29. mcverry
  30. Max Hoffmann
  31. Alejandro Ramirez
  32. Damon Davison
  33. Alvin Wan
  34. Alan Briolat
  35. Drew Hannay
  36. Andrew Rasmussen
  37. Dennis Tsang
  38. Bahador Saket
相關文章
相關標籤/搜索