最小堆插入

最小堆(Min Heap)是一種特殊的完全二叉樹,其中每個節點的值都不大於其父節點的值。最小堆通常用來實現優先佇列,其中堆頂總是最小的元素。在最小堆中插入一個新元素的過程稱為「插入」(Insert)或「構建最小堆」(Build Min Heap)。

最小堆插入的步驟如下:

  1. 創建一個新的節點,並將其值設定為要插入的元素。
  2. 將新節點作為最小堆的最後一個孩子節點(如果最小堆為空,則為根節點)。
  3. 從最後一個節點開始,向上調整堆結構,直到新節點到達正確的位置(即,新節點的父節點比它小,或者新節點已經是根節點)。

這個過程可以通過遞歸或循環來實現。以下是遞歸實現的偽代碼:

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模組的heappushheappop函式用於插入和刪除最小堆頂元素。heappush函式會自動將新元素插入到正確的位置,而heappop函式會刪除並返回堆頂元素,同時維護堆的性質。