【发布时间】:2011-10-18 02:04:15
【问题描述】:
我创建了一个二进制堆,它代表一个优先级队列。这只是经典的众所周知的算法。这个堆调度不同事件的时间序列(排序键是时间)。
它支持两种操作:插入和删除。堆的每个节点的键都大于或等于它的每个子节点。但是,添加具有相同键的事件并不会保留它们添加的顺序,因为每次调用 Remove 或 Insert 后,heap-up 和 heap-down 过程都会破坏顺序。
我的问题是:在经典算法中应该改变什么来保持具有相同优先级的节点的顺序?
【问题讨论】:
-
假设您添加一个新元素,其优先级已经存在.. 会是什么顺序?
-
添加另一个称为插入顺序(long long)的字段,并且在插入时始终递增。所以你最终得到了最终键的配对:优先级+插入顺序
标签: c algorithm priority-queue binary-heap