具有同等优先级的堆



我正在尝试创建一个hip of event。因此,我定义了一个类Event,它由我的不同事件继承。

class Event:
def __init__(self, last_instant):
self.last_instant = last_instant # That's the prio criteria
class Event1(Event):
def __init__(self, last_instant, value):
Event.__init__(self, last_instant)
self.value = value
class Event2(Event):
...

last_instant是prio标准,因此堆由如下定义的元组组成:

(last_instant, Event)

但是,我有放置在同一个last_instant的事件,因此heapqEvent中查找<实现。我还没有实现它,但即使实现了,我也不知道是怎么实现的,因为有些事件没有任何标准来区分哪些应该首先从堆中弹出。

如果last_instant相同,那么如何实现顺序无关紧要的堆?

另一方面,如果我在同一时刻(同一prio(有相同类型(同一类(的事件,我想把它们放在一起,同时处理它们。

我所看到的实现这一点的最佳方法是在同一时刻弹出所有项目,将它们存储在列表中,然后按顺序处理。然后转到下一个瞬间。然而,它似乎与heapq不兼容。

谢谢!

没有理由不能使用您提出的方法:在同一时刻弹出所有项目,将它们存储在列表中,然后按顺序处理。基本思想是:

item = heap.pop()
itemlist.push(item)
while (heap not empty && heap.peek().priority == item.priority) {
itemlist.push(heap.pop());
}

当然,您会想将其转换为真正的Python代码,但基本思想是可行的,并且是堆的完美有效使用。

最新更新