【问题标题】:In Dijkstra's algorithm why must it first expand nodes with the current least cost?在 Dijkstra 的算法中,为什么必须首先扩展当前成本最低的节点?
【发布时间】:2020-06-03 07:16:32
【问题描述】:

我在其他帖子中读到,Dijkstra 的算法总是首先扩展最短路径。为什么必须以这种方式实施?假设我们创建了一个轻松的 Dijkstra 版本,只要它们的成本(根据上一次迭代计算)小于无穷大,它就会扩展 任何 未访问的路径/节点。

我已经研究了一些示例,但尚未展示使用此算法的轻松版本无法计算正确最短路径的示例。

【问题讨论】:

    标签: algorithm search graph shortest-path dijkstra


    【解决方案1】:

    如果你展开任何节点,你最终会找到一些到达目标的路径,但你不能保证到达目标的路径成本是最优的。

    如果您找到到已访问节点的更便宜的路径,则必须从该已访问节点传递更新所有节点,从而使您的宽松算法的效率低于原始算法。

    【讨论】:

    • 我知道,如果我们在达到目标后停止,那么松弛算法可能会产生次优的路径成本。但是,如果我们假设它必须始终运行到完成(即,一旦访问了每个节点就停止)。它会/是否仍然会计算从源到目的地的错误总成本?
    • 如果您在第一次访问时碰巧访问了更昂贵路径上的任何一个节点,并且在检测到更便宜的路径时不更新成本,那么您最终会获得昂贵的总成本。在这种情况下,访问每个节点一次并不是一个足够的终止标准。如果你确实更新节点成本,你也必须更新传递成本,这些传递更新会使你的惰性算法在运行时比原来的更昂贵
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-04-08
    • 1970-01-01
    • 2015-10-26
    • 2013-09-21
    • 1970-01-01
    • 1970-01-01
    • 2011-05-02
    相关资源
    最近更新 更多