Python实现通用堆算法
堆是一种重要的数据结构,可用于排序、查找最大/小值等操作。本篇文章将介绍如何使用Python实现一个通用的堆算法,并附上完整的源代码。
首先我们需要了解堆的基本概念。堆是一种完全二叉树,通常分为两种情况:最大堆和最小堆。最大堆中,每个节点的值都大于等于它的子节点的值;最小堆中,每个节点的值都小于等于它的子节点的值。
接下来,我们定义一个名为Heap的类来表示堆:
class Heap:
def __init__(self, cmp_func=None):
self.cmp_func = cmp_func or (lambda x, y: x > y)
self.arr = []
def push(self, val):
self.arr.append(val)
self._shift_up(len(self.arr) - 1)
def pop(self):
if not self.arr:
raise ValueError('Heap is empty')
val = self.arr[0]
last = self.arr.pop()
if self.arr:
self.arr[0] = last
self._shift_down(0)