以其他語言閱讀: English, 简体中文, Русский, 日本語, Français, Português, Türkçe, 한국어, Українська
在電腦科學中,堆積是一種特殊的樹狀資料結構,滿足以下描述的堆積性質。
在最小堆積中,若 P 是 C 的父節點,則 P 的鍵值(數值)小於或等於 C 的鍵值。
使用 okso.app 製作
在最大堆積中,P 的鍵值大於或等於 C 的鍵值。
堆積中沒有父節點的最頂端節點稱為根節點。
以下是各種堆積資料結構的時間複雜度。函數名稱假設為最大堆積。
| 操作 | find-max | delete-max | insert | increase-key | meld |
|---|---|---|---|---|---|
| 二元堆積 | Θ(1) |
Θ(log n) |
O(log n) |
O(log n) |
Θ(n) |
| 左偏樹 | Θ(1) |
Θ(log n) |
Θ(log n) |
O(log n) |
Θ(log n) |
| 二項式堆積 | Θ(1) |
Θ(log n) |
Θ(1) |
O(log n) |
O(log n) |
| 費波那契堆積 | Θ(1) |
Θ(log n) |
Θ(1) |
Θ(1) |
Θ(1) |
| 配對堆積 | Θ(1) |
Θ(log n) |
Θ(1) |
o(log n) |
Θ(1) |
| Brodal 佇列 | Θ(1) |
Θ(log n) |
Θ(1) |
Θ(1) |
Θ(1) |
| Rank-pairing 堆積 | Θ(1) |
Θ(log n) |
Θ(1) |
Θ(1) |
Θ(1) |
| 嚴格費波那契堆積 | Θ(1) |
Θ(log n) |
Θ(1) |
Θ(1) |
Θ(1) |
| 2-3 堆積 | O(log n) |
O(log n) |
O(log n) |
Θ(1) |
? |
其中:
- find-max(或 find-min):分別找到最大堆積中的最大項目或最小堆積中的最小項目(又稱 peek)
- delete-max(或 delete-min):分別移除最大堆積(或最小堆積)的根節點
- insert:將新的鍵值加入堆積中(又稱 push)
- increase-key 或 decrease-key:分別更新最大堆積或最小堆積中的鍵值
- meld:將兩個堆積合併成一個新的有效堆積,包含兩者的所有元素,並銷毀原來的堆積
在本知識庫中,MaxHeap.js 和 MinHeap.js 是二元堆積的範例。
- MaxHeap.js 和 MinHeap.js
- MaxHeapAdhoc.js 和 MinHeapAdhoc.js - MinHeap/MaxHeap 資料結構的極簡(ad hoc)版本,不依賴外部相依套件,可在面試中輕鬆複製貼上使用(因為 JavaScript 中缺少許多資料結構)。


