最小堆插入
最小堆(Min Heap)是一種特殊的完全二叉樹,其中每個節點的值都不大於其父節點的值。最小堆通常用來實現優先佇列,其中堆頂總是最小的元素。在最小堆中插入一個新元素的過程稱為「插入」(Insert)或「構建最小堆」(Build Min Heap)。
最小堆插入的步驟如下:
- 創建一個新的節點,並將其值設定為要插入的元素。
- 將新節點作為最小堆的最後一個孩子節點(如果最小堆為空,則為根節點)。
- 從最後一個節點開始,向上調整堆結構,直到新節點到達正確的位置(即,新節點的父節點比它小,或者新節點已經是根節點)。
這個過程可以通過遞歸或循環來實現。以下是遞歸實現的偽代碼:
function insert(node, value):
if node is null:
node = new Node(value)
else:
insert(node.left, value)
if value <= node.value:
swap(node, node.left)
insert(node.left, node.value)
function swap(node1, node2):
temp = node1.value
node1.value = node2.value
node2.value = temp
在Python中,可以使用heapq
模組來實現最小堆,該模組提供了一個heappush
函式來插入新元素。以下是一個簡單的例子:
from heapq import *
class MinHeap:
def __init__(self):
self.heap = []
def insert(self, value):
heappush(self.heap, value)
def extract_min(self):
if not self.heap:
return None
min_value = self.heap[0]
self.heap[0] = self.heap[-1]
heappop(self.heap)
return min_value
# 使用MinHeap
heap = MinHeap()
heap.insert(4)
heap.insert(1)
heap.insert(3)
print(heap.extract_min()) # 輸出: 1
print(heap.extract_min()) # 輸出: 3
print(heap.extract_min()) # 輸出: 4
在這個例子中,MinHeap
類維護了一個內部列表,heapq
模組的heappush
和heappop
函式用於插入和刪除最小堆頂元素。heappush
函式會自動將新元素插入到正確的位置,而heappop
函式會刪除並返回堆頂元素,同時維護堆的性質。