我注意到给定一个列表,如果我使用heapq.heapify()创建一个堆,那么元素的顺序与我获得的顺序不同,如果我遍历列表并执行heap.heappush()。
有人可以帮我理解为什么吗?
另外,考虑到iterable,创建堆的方法比其他方法更好,为什么?
答案 0 :(得分:2)
heapify
使用O(n)算法,它不同于一个接一个地插入,只有O(n log n)。查看Wikipedia's description。
答案 1 :(得分:0)
我注意到给定一个列表,如果我使用heapq.heapify()创建一个堆,那么元素的顺序与我获得的顺序不同,如果我遍历列表并执行heap.heappush()。
有人可以帮我理解原因吗?
没有理由他们应该是一样的。存储数据的方法不止一种。
另外,考虑到iterable,创建堆的方法比其他方法更好,为什么?
制作一个列表并将其传递给heapify
(这是heapify
的用途,这使得它变得更简单,并且它也具有更好的渐近性能,如果这无关紧要的话。)