堆在Dijkstra算法中

时间:2013-01-05 11:05:12

标签: c++ algorithm dijkstra

有人可以解释一下 HeapDesc 在ShaneSaunders Dijkstra算法中的重要性以及如何在这里使用它? 一般来说,我知道Dijkstra算法是如何工作的。但是,我没有把堆放在实施中。

它是一个很大的代码。因此,如果您想查看它,我会发布一个链接。

这里是http://www.cosc.canterbury.ac.nz/research/RG/alg/dijkstra.cpp

3 个答案:

答案 0 :(得分:1)

在Dijkstra中,您需要一个高效的数据结构,为您提供最低成本的优势,使您能够到达另一个顶点。

Heap正是一种数据结构,允许您存储边缘集并以最低成本有效地检索边缘。

答案 1 :(得分:1)

HeapDesc可能实现工厂设计模式以创建不同类型的堆。如果检查文件http://www.cosc.canterbury.ac.nz/research/RG/alg/dijkstra.h,您会注意到构造函数中的堆变量是Heap类型的对象。

看一下本文的工厂设计模式。 http://en.wikipedia.org/wiki/Factory_method_pattern

答案 2 :(得分:0)

Dijkstra's algorithm涉及很多成本最低的路径"抬头。

最小或最大查找是针对(O(1))优化的Heap,这就是它被使用的原因。

对于HeapDesc本身,它似乎只是a factory method,用于分配Heap对象。

Heap *newInstance(int n) const { return new T(n); }; // from heap.h