1
我有一個簡單的堆定義爲列表的列表。我從heapq模塊中使用heapop模塊來提取具有最小密鑰(我知道它隱含地是內部列表的第一個元素)的列表。但在以下情況下,流行操作似乎給出了不尋常的結果。heappop的不尋常結果?
有人可以解釋爲什麼嗎?
堆= [[0,0,0],[INF,1,1],[INF,2,2],[5,3,3],[INF,4,4]]
heapq.heappop(堆)
[0,0,0]
heapq.heappop(堆)
[INF,1,1]
heapq.heappop(堆)
[5,3,3]
heapq.heappop(堆)
[INF,2,2]
heapq.heappop(堆)
[INF,4,4]
如果我在執行某些操作時將inf修改爲某個值,該怎麼辦?我需要再次運行heapify嗎? – Janmajay
如果你可能改變順序,那麼你將需要再次heapify。這不是魔術 - 它只是一個標準化的排序算法。一種選擇是將你想要更改的列表申請出來,然後在新列表中應用。如果要將列表保存爲堆,那麼只能使用heapq操作對其進行修改 –
heapq.heapreplace是一個函數,它允許您同時執行pop和push操作 –