Python,heapq,如何高效修改heapq中的最小元素?

我在 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


跃然一笑
浏览 141回答 1
1回答
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python