heap invariant
你可以看到在
docs
还有上面写着:
heap[k] <= heap[2*k+1]
heap[k] <= heap[2*k+2]
对于所有k,从零开始计算元素。为了比较,不存在的元素被认为是无限的。堆的有趣特性是
.
注意它说最小的元素总是根,
heap[0]
,通过查看您的数据可以明显看出。还要注意两个列表是如何观察所列属性的
堆[k]<=堆[2*k+1]
堆[k]<=堆[2*k+2]
对所有k。
inf = float('inf')
arr = [1, 2, 1, 3]
for i in range(len(arr)):
x = arr[i]
try:
y = arr[2 * i + 1]
except IndexError:
y = inf
print('x <= y is {}'.format(x <= y))
x <= y is True
x <= y is True
x <= y is True
x <= y is True
如果使用负数组,也同样适用。希望这能帮你把事情弄清楚。