c - 如何在作为二叉堆实现的优先级队列中保留相同优先级元素的顺序?

标签 c algorithm priority-queue binary-heap

我创建了一个二叉堆,代表一个优先级队列。这只是经典的众所周知的算法。这个堆安排了不同事件的时间顺序(排序键是时间)。

它支持 2 种操作:插入和删除。堆的每个节点的键都大于或等于它的每个子节点。但是,添加具有相同键的事件并不会保留它们的添加顺序,因为每次调用 Remove 或 Insert 之后,heap-up 和 heap-down 过程都会打乱顺序。

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

最佳答案

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

关于c - 如何在作为二叉堆实现的优先级队列中保留相同优先级元素的顺序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6909617/

相关文章:

c - 指针类型数组与指针不兼容

java - 奇数求和不起作用

algorithm - 如何最好地总结大量 float ?

apache-kafka - 有没有办法在 Apache Kafka 2.0 中确定消息的优先级?

我们可以在 C 语言中使用一个数组到另一个数组中吗?

c++ - IEEE Std 754 Floating-Point : let t := a - b, 标准是否保证 a == b + t?

C 程序 - 接收段错误

java - 用 Java 实现调度算法

c - 近似保序霍夫曼代码

c++ - 我将如何编辑此代码以使最小堆成为可能?