为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

跃然一笑 2021-09-11 15:02:02
我在 python 3.7 中使用 heapq我有两个关于 heapq 的问题:如果我只想修改 min 元素,我不知道如何有效地保持堆不变。这是我的实现。(速度很慢)q= [5,8,9,10]heapq.heapify(q)q[0] = 1200heapq.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)输出是:100000.09700560569763184100007.193411350250244
查看完整描述

1 回答

  • 1 回答
  • 0 关注
  • 129 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信