我在 python 3.7 中使用 heapq
我有两个关于 heapq 的问题:
如果我只想修改 min 元素,我不知道如何有效地保持堆不变。
这是我的实现。(这很慢)q= [5,8,9,10] heapq.heapify(q) q[0] = 1200 heapq.heapify(q)
_siftdown() 和 _siftup() 这两个方法是做什么用的?它们之间有什么区别?如何使用这两种方法来保持堆不变?
最后,我使用 _siftdown() 实现了一个代码(但是我仍然对这两种方法感到困惑,并且不能确保我的代码是否正确。)
s = time.time()
q = []
for i in range(0, 10000):
heapq.heappush(q, i)
for i in range(0, 10000):
q[0] = 10000+i
heapq._siftup(q,0)
print(q[0])
e2 =time.time()
print(e2-s)
s = time.time()
q = []
for i in range(0, 10000):
heapq.heappush(q, i)
for i in range(0, 10000):
q[0] = 10000+i
heapq.heapify(q)
print(q[0])
e2 =time.time()
print(e2-s)
输出是:
10000
0.09700560569763184
10000
7.193411350250244