最小堆python

最小堆是一種特殊的樹形數據結構,它的主要特性是每個父節點的值都小於或等於其子節點的值。下面是一個簡單的Python實現最小堆的例子:

class MinHeap:
    def __init__(self):
        self.heap = []

    def parent(self, i):
        return (i - 1) // 2

    def leftChild(self, i):
        return 2 * i + 1

    def rightChild(self, i):
        return 2 * i + 2

    def insert(self, value):
        self.heap.append(value)
        i = len(self.heap) - 1
        while i != 0 and self.heap[self.parent(i)] > self.heap[i]:
            self.heap[i], self.heap[self.parent(i)] = (
                self.heap[self.parent(i)],
                self.heap[i]
            )
            i = self.parent(i)

    def deleteMin(self):
        if len(self.heap) == 0:
            return None
        root = self.heap[0]
        if len(self.heap) > 1:
            self.heap[0] = self.heap[-1]
            del self.heap[-1]
        else:
            del self.heap[0]
        self.__heapify_up(0)
        return root

    def __heapify_up(self, i):
        while i != 0 and self.heap[i] < self.heap[self.parent(i)]:
            self.heap[i], self.heap[self.parent(i)] = (
                self.heap[self.parent(i)],
                self.heap[i]
            )
            i = self.parent(i)

使用這個類,你可以創建一個最小堆,並插入和刪除元素。例如:

h = MinHeap()
h.insert(3)
h.insert(5)
h.insert(1)
h.insert(2)
print(h.heap)  # Output: [1, 2, 3, 5] (堆的初始狀態)
min_val = h.deleteMin()  # min_val = 1, heap after deletion = [2, 3, 5]
print(min_val)  # Output: 1

這個類只是一個簡單的實現,並沒有包含一些錯誤檢查或最佳化。在實際使用中,你可能需要根據你的需求進行修改或擴展。