我正在使用堆队列来实现算法,当我将新节点添加到队列中时,它们会按启发式函数排序:例如 heappush(queue, (score(node), node)),这太棒了,除了当我从队列中弹出下一个节点时,我想要最近添加的节点,而不是第一个添加的节点,这是 heappop 返回的。如何在不破坏队列的情况下将最新节点添加到队列中?
我想我可以从第一个元素开始迭代,当下一个元素的分数相同时,继续。然后,当我找到具有该分数的最后一个元素时,我选择它并将其从列表中删除。这显然不是很有效,并且打破了优先级队列的时间复杂度?
我被困在这个问题上,我想不出办法来做到这一点。
谢谢。
编辑; 按照建议使用计数器不起作用(也许我误解了)
>>> queue = []
>>> heappush(queue, (2, 0, 'a'))
>>> heappush(queue, (3, -1, 'b'))
>>> queue
[(2, 0, 'a'), (3, -1, 'b')]
>>> heappush(queue, (2, -2, 'c'))
>>> queue
[(2, -2, 'c'), (3, -1, 'b'), (2, 0, 'a')]
现在队列的排序不正确,并且比 'a' 更糟糕的选项 'b' 被放置在它之前。
编辑2:
我勒个去?
>>> heappop(queue)
(2, -2, 'c')
>>> queue
[(2, 0, 'a'), (3, -1, 'b')]
>>>