1. 程式人生 > >常用演算法和資料結構的複雜度介紹

常用演算法和資料結構的複雜度介紹

常用演算法和資料結構的複雜度
演算法 資料結構 時間複雜度 空間複雜度
平均 最差 最差
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|)