常用演算法和資料結構的複雜度介紹
阿新 • • 發佈:2019-02-11
常用演算法和資料結構的複雜度 | |||||||||
演算法 | 資料結構 | 時間複雜度 | 空間複雜度 | ||||||
平均 | 最差 | 最差 | |||||||
Graph of |V| vertices and |E| edges | - | O(|E| + |V|) | O(|V|) | ||||||
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) | |||||
Graph with |V| vertices and |E| edges | O((|V| + |E|) log |V|) | O((|V| + |E|) log |V|) | O(|V|) | ||||||
Graph with |V| vertices and |E| edges | O(|V|^2) | O(|V|^2) | O(|V|) | ||||||
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|) |