例如,随机数列表:
>>> x = [1,24,5,1,5,1,23,6]
>>> heapq.heapify(x)
[1, 1, 1, 6, 5, 5, 23, 24]
为什么它随意做6,5,5而不是5,5,6或5,6,5?
答案 0 :(得分:2)
Python文档包含以下heapq
的说明:
堆是二叉树,每个父节点的值都小于或等于其任何子节点。此实现使用的数组
heap[k] <= heap[2*k+1]
和heap[k] <= heap[2*k+2]
用于所有k
,从零开始计算元素。为了比较,不存在的元素被认为是无限的。堆的有趣属性是它的最小元素始终是根heap[0]
。
您可以使用示例数据进行验证:
>>> for i in xrange(len(x)):
... print '{0} <= {1}'.format(x[i], x[i*2+1:i*2+3])
...
1 <= [1, 1]
1 <= [6, 5]
1 <= [5, 23]
6 <= [24]
5 <= []
5 <= []
23 <= []
24 <= []
有关二进制堆的更多信息,您可以查看Wikipedia。