实现最小堆优先级队列的减少键功能

时间:2015-11-11 23:06:53

标签: c++ algorithm heap priority-queue

我试图运行Dijkstra的算法,我需要实现decreaseKey函数。我在做这件事时遇到了麻烦。我读了一个解决方案here但是它通过在堆中存储哈希映射来使用大量内存。有没有办法在没有哈希映射的情况下实现decreaseKey并且仍然保持O(log n)时间?

到目前为止,我的decreaseKey函数有两个参数:vertex和newDistance。当我调用decreaseKey(vertex * v, int newDistance)时,算法必须找到顶点' v'存储然后改变它的距离。我无法弄清楚如何找到'顶点获取其索引并将其保持在O(log n)时间内。

1 个答案:

答案 0 :(得分:0)

您不需要哈希映射来存储信息;您只需要从顶点到优先级队列位置的映射。如果顶点由连续的整数标识,则映射由| V |数组组成整数(其中| V |是顶点数)。

虽然这不是一个微不足道的空间,但每个图形顶点只有一个单词,远远小于边缘列表占用的空间。