最大堆數組
最大堆(Max-Heap)是一種二叉堆,其中每個父節點的值都不小於其子節點的值。最大堆可以通過調整數組中的元素來實現,這種方法稱為「堆化」。堆化的數組滿足以下條件:
- 對於每個索引i,其父節點索引 floor((i-1)/2) 的值不小於數組中索引i的值。
- 對於每個索引i,其左子節點索引 2i+1 和右子節點索引 2i+2 的值都不大於數組中索引i的值。
最大堆數組的結構可以用以下代碼表示:
import heapq
def build_max_heap(array):
# 將數組轉換為最大堆
for i in range(len(array) // 2, -1, -1):
heapq.heapify(array, i)
def is_max_heap(array):
# 檢查數組是否為最大堆
for i in range(len(array) // 2, -1, -1):
if array[i] < array[i * 2 + 1] or array[i] < array[i * 2 + 2]:
return False
return True
# 示例數組
array = [4, 1, 3, 2, 16, 9, 10, 14, 8, 7]
# 堆化數組
build_max_heap(array)
# 檢查數組是否為最大堆
print(is_max_heap(array)) # 輸出: True
在上面的代碼中,build_max_heap
函數使用 heapq
模塊中的 heapify
方法將數組轉換為最大堆。is_max_heap
函數檢查數組是否滿足最大堆的條件。
請注意,最大堆的定義要求父節點的值不小於其子節點的值,這與二叉搜尋樹的特性不同,在二叉搜尋樹中,左子樹的值小於根節點的值,根節點的值小於右子樹的值。