什麼是二元堆積
父節點的值大於或等於(最大堆積)或小於或等於(最小堆積)子節點值的完全二元樹。可以用陣列表示,以 a[0] 為根時,a[i] 的子節點為 a[2i+1] 與 a[2i+2]。查看最大值(最小值)為 O(1),加入與取出為 O(log n),用於優先佇列與堆積排序。
日文名稱: 二分ヒープ
「二元堆積」出現在1領域的3道練習題中(資料結構與演算法等)。
這個名詞所屬的領域: 資料結構與演算法
父節點的值大於或等於(最大堆積)或小於或等於(最小堆積)子節點值的完全二元樹。可以用陣列表示,以 a[0] 為根時,a[i] 的子節點為 a[2i+1] 與 a[2i+2]。查看最大值(最小值)為 O(1),加入與取出為 O(log n),用於優先佇列與堆積排序。
日文名稱: 二分ヒープ
「二元堆積」出現在1領域的3道練習題中(資料結構與演算法等)。
這個名詞所屬的領域: 資料結構與演算法
正確答案: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],因此確認採用哪一種規則很重要。由於堆積是完全二元樹,可以不用指標而以陣列表示,只靠索引計算就能找到父子節點。
堆積排序在陣列中建立二元堆積,並反覆把根部的最大值與末尾交換、縮小堆積,因此最差也是 O(n log n),額外空間只需常數。
即使在最差情況下時間複雜度也是 O(n log n),且幾乎不使用工作用陣列等額外記憶體就能排序的演算法為下列何者?由於這個性質,二元堆積常用於實作優先佇列。
以根為 a[0] 的陣列表示父節點值大於或等於子節點值的最大堆積。對堆積 50, 30, 40, 10, 20, 35…