python如何在堆中订购值?

时间:2016-06-11 03:48:25

标签: python python-2.7 heap

例如,随机数列表:

>>> 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?

1 个答案:

答案 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