data-structures – 二进制堆优先级队列的位置索引?

因此,假设我有一个具有优先级的N个项目的优先级队列,其中N是数千个,使用
binary heap实现的优先级队列.我理解EXTRACT-MIN和INSERT原语(参见
Cormen, Leiserson, Rivest,它使用-MAX而不是-MIN) ).

但DELETE和DECREASE-KEY似乎都要求优先级队列能够在给定项目本身的情况下在堆中找到项目的索引(或者,该索引需要由优先级队列的使用者给出,但这似乎是一种抽象违规)….这看起来像一个疏忽.有没有办法有效地做到这一点,而无需在堆顶部添加哈希表?

最佳答案 是的,我认为这里的重点是,对于优先级队列的实现,您可以使用二进制堆,其API为其HEAP-INCREASE-KEY(A,i,key)获取索引(i),但是接口为可以允许优先级队列采用任意密钥.您可以自由地使用优先级队列封装key->索引映射的详细信息.如果你需要你的PQ-INCREASE-KEY(A,旧的,新的)在O(log n)中工作,那么你最好有一个O(log n)或更好的索引查找键来保持最新状态.这可能是哈希表或其他快速查找结构.

所以,回答你的问题:我认为数据结构不可避免地要增加一些方式.

点赞