优先级相同的Heapq

时间:2018-08-06 11:25:52

标签: python heap binary-heap heapq

我正在努力营造一种时尚氛围。因此,我定义了一个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上的事件,因此heapq<中寻找Event实现。我还没有实现它,但是即使我做到了,我也不知道怎么做,因为某些事件没有任何标准来区分应该首先从堆中弹出的事件。

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

另一方面,如果我在同一时刻(相同的事件)有相同类型(相同的类)的事件,我想将它们放在一起并同时对待它们。

我可以看到的实现此目标的最佳方法是同时弹出所有项目,将它们存储在列表中,然后顺序对待它们。然后转到下一个瞬间。但是,它似乎与heapq不兼容。

谢谢!

1 个答案:

答案 0 :(得分:1)

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

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

您当然想将其转换为真实的Python代码,但基本思想有效,并且是对堆的完全有效使用。