最小堆优先级队列的递减键函数的实现

Implementation of decrease key function for a min heap priority queue

本文关键字:函数 实现 优先级 队列      更新时间:2023-10-16

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

到目前为止,我的decreaseKey函数有两个参数:顶点和newDistance。当我调用decreaseKey(vertex * v, int newDistance)时,算法必须找到存储顶点"v"的索引,然后改变其距离。我不知道如何"找到"顶点以获得其索引并将其保存在O(logn)时间内。

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

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