为什么使用heapq.heapify创建堆不同于迭代heapq.heappush创建的堆

时间:2016-01-25 02:00:57

标签: python heap

我注意到给定一个列表,如果我使用heapq.heapify()创建一个堆,那么元素的顺序与我获得的顺序不同,如果我遍历列表并执行heap.heappush()。

有人可以帮我理解为什么吗?

另外,考虑到iterable,创建堆的方法比其他方法更好,为什么?

2 个答案:

答案 0 :(得分:2)

heapify使用O(n)算法,它不同于一个接一个地插入,只有O(n log n)。查看Wikipedia's description

答案 1 :(得分:0)

  

我注意到给定一个列表,如果我使用heapq.heapify()创建一个堆,那么元素的顺序与我获得的顺序不同,如果我遍历列表并执行heap.heappush()。

     

有人可以帮我理解原因吗?

没有理由他们应该是一样的。存储数据的方法不止一种。

  

另外,考虑到iterable,创建堆的方法比其他方法更好,为什么?

制作一个列表并将其传递给heapify(这是heapify的用途,这使得它变得更简单,并且它也具有更好的渐近性能,如果这无关紧要的话。)