如何在二进制堆实现的优先级队列中保留相同优先级元素的顺序?

psi*_*lia 15 c algorithm priority-queue binary-heap

我创建了一个二进制堆,它代表一个优先级队列.它只是经典的众所周知的算法.此堆计划不同事件的时间顺序(排序键是时间).

它支持2种操作:插入和删除.堆的每个节点的密钥大于或等于其每个子节点.但是,使用相同的键添加事件不会保留它们的添加顺序,因为每次调用Remove或Insert后,堆启动和堆降过程都会破坏顺序.

我的问题是:在经典算法中应该改变什么以保持具有相同优先级的节点的顺序?

Jur*_*aho 16

一种解决方案是向插入元素添加插入属性的时间.每次将新元素插入堆中时,这可能只是一个简单的计数器递增.然后,当两个元素优先级相等时,比较插入时间.

  • @psihodelia:不会.在您的实现中,插入或删除元素时必须对优先级进行比较.只需通过比较优先级和时间戳来扩展此比较. (3认同)