【问题标题】:Heap in Dijkstra algorithmDijkstra 算法中的堆
【发布时间】:2013-01-05 11:05:11
【问题描述】:

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

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

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

【问题讨论】:

  • 你不清楚哪一部分? HeapDesc 的定义或如何使用?

标签: c++ algorithm dijkstra


【解决方案1】:

在 Dijkstra 中,您需要一个高效的数据结构,为您提供最低成本的边缘,让您可以到达另一个顶点。

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

【讨论】:

  • 我可以将“数据结构”更改为“数据结构”
【解决方案2】:

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

查看这篇文章了解工厂设计模式。 http://en.wikipedia.org/wiki/Factory_method_pattern

【讨论】:

    【解决方案3】:

    Dijkstra's algorithm 涉及大量“最低成本路径”查找。

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

    至于HeapDesc 本身,它只是看起来是a factory method,用于分配一个Heap 对象。

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

    【讨论】:

    • 但是,这在他的代码中代表什么。 heap = heapDD->newInstance(nn);以及他是如何定义的
    • @NRK 我不确定HeapDesc 本身是什么,但它看起来像是用于创建堆的分配器或工厂方法。您需要查看“heaps/heap.h”。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-07-31
    • 2012-11-25
    • 2018-05-16
    • 2015-07-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多