最小堆优先级队列的递减键函数的实现
Implementation of decrease key function for a min heap priority queue
我正在尝试运行Dijkstra的算法,我需要实现一个decreaseKey
函数。我在做这件事时遇到了麻烦。我在这里读到了一个解决方案,但它通过在堆中存储哈希图来消耗大量内存。有没有一种方法可以在没有哈希映射的情况下实现decreaseKey
,并且仍然保持O(logn)时间?
到目前为止,我的decreaseKey
函数有两个参数:顶点和newDistance。当我调用decreaseKey(vertex * v, int newDistance)
时,算法必须找到存储顶点"v"的索引,然后改变其距离。我不知道如何"找到"顶点以获得其索引并将其保存在O(logn)时间内。
您不需要哈希映射来存储信息;您只需要从顶点到优先级队列位置的映射。如果顶点由连续整数标识,则映射由|V|整数的数组组成(其中|V|是顶点数)。
虽然这不是一个微不足道的空间量,但每个图顶点只有一个单词,这大大小于边列表所占用的空间。
相关文章:
- 用常见虚拟函数实现的任意组合来实现派生类的正确方法是什么
- 分段 排序函数实现中的错误
- 无法去函数实现 vim
- C++ 20 中的运算符 == 和 <=> 应该作为成员还是自由函数实现?
- 为什么在这种情况下不调用我的虚拟函数实现?
- 我能否通过将函数实现为类对象方法来避免使用互斥锁
- 嵌套的模板结构构造函数实现
- C++接口的工厂函数实现
- 链表中的递归长度函数实现
- 我可以期望某些 STL 函数实现是可自动矢量化的吗?
- 如何将深拷贝构造函数实现到链表中?
- 虚拟 CTOR 的克隆函数实现是否有问题
- 没有捕获列表的 lambda 通常作为普通函数实现吗?
- C++二叉树打印函数实现
- C++:默认构造函数实现
- C++派生类中的纯虚函数实现
- 决定放置函数实现的位置
- 强制实施纯虚函数实现,可能使用不同的参数类型
- 如何让成员函数实现依赖于类的模板参数?
- 我们如何将Ostream函数作为类的成员函数实现,而不是作为朋友函数,以便我可以用作虚拟函数