【问题标题】:Which algorithm is best to traverse weighted , directed graph provided the start and end point?哪种算法最适合遍历提供起点和终点的加权有向图?
【发布时间】:2013-12-09 12:14:56
【问题描述】:

您好,我正在寻找最佳算法来找出遍历有向加权图的最佳路径。

[大家好,我正在编辑问题以完全解释我的要求]

例如:如果在 5 个节点的图中(让我们分别为所有 5 个节点分配编号 1,2,3,4,5),如果我希望从节点 2 开始遍历并在 4 结束,覆盖所有节点,那么解决问题的最佳算法是什么?

我们可以有两个假设:

a) 任何两个节点之间总是有一条边。 (意味着两个节点(A 和 B)有一条从 A 到 B 和从 B 到 A 的边。

b) 我们可以遍历一个节点两次(如果需要遍历完整图)。

【问题讨论】:

  • 不,图没有任何负边。但我希望算法遍历所有节点并最终到达特定节点。
  • 就像在 5 个节点的图中(让我们分别为所有 5 个节点分配编号 1、2、3、4、5),如果我希望从节点 2 开始遍历并最终在 4 ,覆盖所有节点,那么解决问题的最佳算法是什么?

标签: data-structures graph


【解决方案1】:

这是计算机科学中的经典问题,有一个众所周知的解决方案。

图是否只有非负边权重?然后使用Dijkstra’s algorithmA*。否则使用Bellman–Ford algorithm。如果要查找所有节点之间的所有对最短路径,请使用algorithm of Floyd & Warshall

【讨论】:

  • Dijkstra 的算法是否也可以达到在某个所需节点结束的目的。就像在 5 个节点的图中(让我们分别为所有 5 个节点分配编号 1,2,3,4,5 ),如果我希望从节点 2 开始遍历并在 4 结束,覆盖所有节点,那么将Dijkstra 算法达到目的?
  • @AbhishekGahlout 不,算法将不会涵盖这一点。您之前没有明确提到“覆盖所有节点”的要求(我将“遍历”表示只是通过它)。听起来你正在搜索的是一个最小的旅游,有点像 TSP - 这个线程可能有帮助吗? Minimum cost closed walk in a graph(顺便说一下,这些附加信息会使您的问题更加复杂和有趣)。
  • 是的!这些附加信息也使问题变得更加复杂和有趣。感谢您的链接。这个链接讨论了相关的问题(我的问题),但用于无向图。
【解决方案2】:

使用 Dijkstra 是可行的方法,但您可以将算法(默认为单源 - 多接收器算法)调整为单源单接收器实现。

基本上不是从一个节点(源节点)开始,而是同时从开始节点和结束节点开始。对于汇节点以相反的方向遍历边缘。 您可以使用两个优先级队列,并为每个步骤峰值从哪个队列中删除下一个条目。每当您尝试将新元素加入队列时,请检查它是否已包含在另一个队列中。在这种情况下,您已经找到了从源到接收器的路径。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-11-05
    • 1970-01-01
    • 1970-01-01
    • 2014-07-17
    • 2015-12-05
    • 1970-01-01
    • 1970-01-01
    • 2021-08-23
    相关资源
    最近更新 更多