我在 python 3.7 中使用 heapq我有兩個(gè)關(guān)于 heapq 的問(wèn)題:如果我只想修改 min 元素,我不知道如何有效地保持堆不變。這是我的實(shí)現(xiàn)。(速度很慢)q= [5,8,9,10]heapq.heapify(q)q[0] = 1200heapq.heapify(q)這兩個(gè)方法 _siftdown() 和 _siftup() 有什么用?它們之間有什么區(qū)別?如何使用這兩種方法來(lái)保持堆不變性?最后,我使用_siftdown() 實(shí)現(xiàn)了一段代碼(但是我對(duì)這兩種方法仍然很困惑,不確保我的代碼是否正確。)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
添加回答
舉報(bào)
0/150
提交
取消