如果2个图节点之间的间接路径比直接路径短,Dijkstras算法可以检测到它吗?

时间:2017-10-14 14:49:50

标签: graph-theory dijkstra

Dijkstras算法根据起始节点和中间节点之间的边缘权重假设最近邻居。重复此过程,直到到达目标节点。

如果起始节点和中间节点之间的最短路径是通过其他几个中间节点的间接路由,该怎么办?

3 个答案:

答案 0 :(得分:2)

  

如果起始节点和中间节点之间的最短路径怎么办?   是通过其他几个中间节点的间接路由?

在尝试查找最短路径时,通常需要遍历多个节点。如果没有多条可能的路径,那你为什么需要Dijkstra?

想象一下下面的图表:

Graph example 1

为了更好地理解,我们可以说算法从顺时针方向开始,从START开始到1节点。它会发现START -> 1 -> 6 -> END成本为7.然后它会逆时针走,发现START -> 3 -> 5 -> 8 -> 9 -> END成本为5.算法会将逆时针路径标记为从START获取的最短路径到END

现在让我们说我们有以下图表:

Graph example 2

算法会发现START -> 1 -> 9成本为5(顺时针),而START -> 3 -> 5 -> 8 -> 9成本为4(逆时针)。因此算法会将逆时针路径标记为从STARTEND的最短路径,其成本为5.接下来,算法将尝试找到另一个(如果可能的话更短)路径{{1 }}。它会发现此路径的费用为4,并且会将此路径标记为从START -> 1 -> 6 -> ENDSTART的最短路径。

答案 1 :(得分:1)

使用括号中每条边的成本的简单图表:

   _____ (5)
  /     \
Root   Dest
  \__A__/
 (2)    (1)

然后Dijkstra's algorithm using a min-priority queue将:

  • 从根开始,将相邻边形成的所有路径放入队列:
    queue = [(root-A : 2), (root-dest : 5)]
  • 以最低成本从队列中删除路径:
    • 请注意,这是第一次访问A,因此达到A的最低费用为2(如果任何后续的,成本较高的路径达到{{1}然后可以忽略它们。)
    • 将该路径和相邻边形成的所有路径放入队列:
      A
  • 以最低成本从队列中删除路径:
    • 请注意,这是第一次访问queue = [(root-A-dest : 3), (root-dest : 5)],因此达到dest的最低费用为dest
    • 已到达目的地,因此算法将停止。

因此,对于最小优先级队列,如果通过间接顶点的路径与直接路径相比较短,则直接边缘可以在队列中保持未处理状态。

  

如果2个图节点之间的间接路径比直接路径短,Dijkstras算法能否检测到它?

是的,上面的例子表明它会。

答案 2 :(得分:0)

我认为您不太了解该算法的工作原理。是的,它首先检查最近的邻居 - 但它仍然检查所有其他邻居,它不会丢弃它们只是因为它们不是最近的。如果最短路径真正通过间接路径,则沿着该路径的每个节点必须具有比较长的直接路径更短的总距离,并且因此之前被访问。为了确保这一点,需要在算法输入中禁止负权重。