数据结构总结:复杂度对比⚓︎
堆⚓︎
| Heaps | Leftist | Skew | Binomial | Fibonacci | Binary | Link list | 
|---|---|---|---|---|---|---|
| Make heap | \(O(1)\) | \(O(1)\) | \(O(1)\) | \(O(1)\) | \(O(1)\) | \(O(1)\) | 
| Build heap | \(\Theta (N)\) | amortized \(\Theta(N)\) | \(\Theta(N)\) | \(\Theta(N)\) | \(\Theta(N)\) | \(O(N)\) | 
| Find-Min | \(\Theta(1)\) | \(\Theta(1)\) | \(\Theta(\log{N})\)或\(\Theta( 1)\) | \(\Theta(1)\) | \(\Theta(1)\) | \(O(N)\) | 
| Merge(Union) | \(\Theta(\log{N})\) | amortized \(O(\log{N})\) | \(\Theta(\log{N})\) | \(\Theta(1)\) | \(\Theta(N)\) | \(O(1)\) | 
| Insert | \(\Theta(\log{N})\) | amortized \(O(\log{N})\) | amortized\(O(1)\) | \(\Theta(1)\) | \(\Theta(\log{N})\) | \(O(1)\) | 
| Delete-Min | \(\Theta(\log{N})\) | amortized\(O(\log{N})\) | \(\Theta(\log{N})\) | amortized \(O(\log{N})\) | \(\Theta(\log{N})\) | \(O(N)\) | 
| Decrease-Key | \(\Theta(\log{N})\) | amortized \(O(\log{N})\) | \(\Theta(\log{N})\) | amortized \(\Theta(1)\) | \(\Theta(\log{N})\) | \(O(1)\) | 
注 :
- Make heap指初始化一个空的堆, Build heap则是依据已有数据构建堆
- Delete指在只知道数值的情况下删除数值对应节点
- Decrease-Key指将一已知节点的值修改并调整数据结构的过程
- Link list指无序的链表,仅用作对照
- 内容参考了Wikipedia
- 二项堆的Find-Min操作的两种复杂度取决于有没有用变量实时更新记录Min值,老师PPT中貌似默认不维护
平衡树⚓︎
| BST | RBTree | AVL | Splay | |
|---|---|---|---|---|
| Insert | \(O(N)\) | \(O(\log{N})\) | \(O(\log{N})\) | amortized \(O(\log{N})\) | 
| Delete | \(O(N)\) | \(O(\log{N})\) | \(O(\log{N})\) | amortized \(O(\log{N})\) | 
| Find | \(O(N)\) | \(O(\log{N})\) | \(O(\log{N})\) | amortized \(O(\log{N})\) | 
比较:AVL与RBT的旋转操作次数⚓︎
| AVL | RBT | |
|---|---|---|
| Insert | \(\le 2\) | \(\le 2\) | 
| Delete | \(O(\log{n})\) | \(\le 3\) |