最小二叉堆
优先队列是一种重要的数据结构这点不必多说。作为 Python 使用者,我觉得很自然地会想使用列表及相应的排序算法实现优先队列。但是 insert 方法是 O(n),sort 方法是 O(nlogn),这样的实现貌似不是很高效。实际上实现优先队列的经典方法是使用二叉堆,这种实现使得我们能够在 O(logn) 内排队和出队。这里给出一个二叉堆的基本实现:
class BinaryHeap(object):
def __init__(self):
self.heap = [0]
self.current_size = 0
def _sortUp(self, i):
while i // 2 > 0:
if self.heap[i] < self.heap[i//2]:
self.heap[i], self.heap[i//2]