0

这是一个更普遍的问题。我有一张将城市名称映射到其节点的地图(包含国家、纬度、经度等基本信息)。每个城市节点都有一个指向目标节点的边数组。边缘具有时间和成本成员。我想找到在两个节点之间旅行的最短时间,但我已经开始对解决这个问题的最佳方式感到困惑。

我创建了自己的基于城市节点向量的最小堆类。我能够创建地图,将地图中的城市节点添加到最小堆。我已经编写了 dijkstra 的算法来找到最短路径,它适用于某些路径,但不是全部。我相信这是因为当我为 dijkstra 算法更新城市节点的权重时,堆没有正确排序。

一旦我更新了节点的权重,我应该如何重新堆化堆以使最低权重位于顶部?

谢谢!

4

1 回答 1

0

如果您想对整个堆进行排序,请快速查看 http://en.wikipedia.org/wiki/Heapsort

那里有一些伪代码可以提供帮助,您可能需要重新排列它以使顶部最低,但这应该适合您。否则,您可以查看向上堆冒泡并在每个阶段应用它,而不是完全重组堆。

http://en.wikipedia.org/wiki/Binary_heap

在这里描述它们有点复杂,但是向上/向下堆冒泡将确保您的堆组织正确。还值得注意的是,对于最坏的情况,堆排序将以 O(n log n) 运行,而对于大多数操作而言,冒泡是 O(log n)。

于 2013-04-16T22:13:31.283 回答