什麼是二元堆積

父節點的值大於或等於(最大堆積)或小於或等於(最小堆積)子節點值的完全二元樹。可以用陣列表示,以 a[0] 為根時,a[i] 的子節點為 a[2i+1] 與 a[2i+2]。查看最大值(最小值)為 O(1),加入與取出為 O(log n),用於優先佇列與堆積排序。

日文名稱: 二分ヒープ

「二元堆積」出現在1領域的3道練習題中(資料結構與演算法等)。

這個名詞所屬的領域: 資料結構與演算法

練習二元堆積的題目

將二元堆積以根為 a[0] 的陣列 a[0], a[1], a[2], … 存放,從上層開始每層由左往右依序填入。a[4] 的子節點與父節點為下列何者?

  1. A子節點為 a[9] 與 a[10],父節點為 a[1]
  2. B子節點為 a[8] 與 a[9],父節點為 a[2]
  3. C子節點為 a[9] 與 a[10],父節點為 a[2]
查看答案與解析

正確答案:A. 子節點為 a[9] 與 a[10],父節點為 a[1]

以 a[0] 為根時,a[i] 的子節點為 a[2i+1] 與 a[2i+2],父節點為 a[(i−1) ÷ 2 無條件捨去]。i = 4 時,子節點為 a[9] 與 a[10],父節點為 a[(4−1) ÷ 2] = a[1]。以 a[1] 為根時,子節點為 a[2i] 與 a[2i+1],父節點為 a[i ÷ 2],因此確認採用哪一種規則很重要。由於堆積是完全二元樹,可以不用指標而以陣列表示,只靠索引計算就能找到父子節點。

解析中的「二元堆積」

出現「二元堆積」的題目(3題)

  1. 將二元堆積以根為 a[0] 的陣列 a[0], a[1], a[2], … 存放,從上層開始每層由左往右依序填入。a[4] 的子節點與父節點為下列何者?
  2. 即使在最差情況下時間複雜度也是 O(n log n),且幾乎不使用工作用陣列等額外記憶體就能排序的演算法為下列何者?
  3. 以根為 a[0] 的陣列表示父節點值大於或等於子節點值的最大堆積。對堆積 50, 30, 40, 10, 20, 35 加入45:先放在末尾,只要比父節點大就與父節點交換。操作後的陣列為下列何者?

半導體、電子電路與資訊計算工具

相關名詞

陣列 時間複雜度(大O符號) 穩定排序 佇列 二元搜尋樹 二分搜尋 動態規劃 堆疊 深度優先搜尋 貪婪演算法

前往名詞解釋列表