我有一个包含对某些对象的引用的PriorityQueue。当我最初将元素插入优先队列时,排序由数据结构维护。现在,在删除操作之后,我更新了一些由优先级队列保存的引用。理想情况下,这需要对优先级队列进行重新组合,但显而易见,因为我在外部修改选定的引用,因此不能触发重新组合。那么确保我能够像修改队列中的任意元素一样快速提取最大值的堆的优点,最好的方法是什么?我看到我需要一个更好的数据结构?更新元素后重新初始化java.util.PriorityQueue
更具体地说,我需要在Java中实现类似斐波那契堆的东西。 http://en.wikipedia.org/wiki/Dijkstra%27s_algorithm 可用吗?
如果你有兴趣,我有一个Java中的斐波那契堆的实现。它可以在http://www.keithschwarz.com/interesting/code/?dir=fibonacci-heap在线获得。希望能帮助到你! – templatetypedef 2011-12-29 03:43:02
即使斐波那契堆在面对元素权重的带外变化时也不具有弹性。我认为你需要在修改之前删除一个元素,然后重新插入它。 – 2011-12-29 04:46:16
从堆中移除任意元素将需要O(n)堆构造,我猜。 – 2011-12-29 05:17:51