我创建了一个二叉堆,表示优先队列。这是一个经典的众所周知的算法。该堆调度不同事件的时间排序(排序关键字为时间)。
它支持两个操作:插入和移除。堆中每个节点的键大于或等于其子节点的键。但是,在添加具有相同键的事件时,由于在调用插入或移除之后,堆向上和堆向下过程会破坏顺序,所以它们并不保留它们被添加的顺序。
我的问题是:要如何修改这个经典的算法以保留具有相同优先级的节点的顺序?
我创建了一个二叉堆,表示优先队列。这是一个经典的众所周知的算法。该堆调度不同事件的时间排序(排序关键字为时间)。
它支持两个操作:插入和移除。堆中每个节点的键大于或等于其子节点的键。但是,在添加具有相同键的事件时,由于在调用插入或移除之后,堆向上和堆向下过程会破坏顺序,所以它们并不保留它们被添加的顺序。
我的问题是:要如何修改这个经典的算法以保留具有相同优先级的节点的顺序?
一种解决方案是为插入的元素添加插入时间属性。这可以是一个简单的计数器,在每次向堆中插入新元素时递增。然后当两个元素在优先级上相等时,比较插入时间。