使用Dijkstra在加权有向图中找出最低权重循环

时间:2017-11-26 00:15:01

标签: algorithm graph shortest-path dijkstra

嗨,我正在努力解决这个问题。它是以下内容:

  

设计算法以在加权有向图G =(V,E)中找到最低权重周期(即图中所有周期,边缘权重之和最小的周期)。简要说明运行时和空间复杂性。假设所有边都是非负的。它应该在O(| V || E | log | V |)时间运行。   提示:使用多次调用Dijkstra算法。

我见过使用Floyd-Warshall的解决方案,但我想知道如何使用Dijkstra以及如何在给定的时间限制内完成此操作。

我有几点困惑:

  • 首先,我们如何知道图表中有多少个周期以及如何 检查那些?
  • 另外,为什么它是| E || V | log | V |?根据我的理解,你应该穿越 通过所有顶点,使其成为| V | log | V |。

这是我个人的学习,所以如果有人有他们可以使用的例子,那将对我有很大的帮助!我并不是在寻找伪代码 - 只是一种通用算法来理解如何使用从一个节点到所有节点的最短路径来帮助我们解决这个问题。 谢谢!

2 个答案:

答案 0 :(得分:1)

从每个顶点调用Dijkstra算法,找到自己的最短路径(如果存在)。从任何顶点到自身的最短路径是最小的循环。  Dijkstra的算法取O(| E | log | V |),因此总时间为O(| V || E | log | V |)。

请注意,这个时间可能比Floyd-Warshall差,因为图中可能有O(| V | ^ 2)个边缘。

答案 1 :(得分:0)

调用Dijkstra的算法| V |使用V中的每个顶点作为起始顶点。将结果存储在矩阵中,其中dist(u,v)是从u到v的最短路径长度。 对于每对顶点(u,v),dist(u,v)是从u到v的最短距离,而dist(v,u)是从v到u的最短路径。因此,dist(u,v)+ dist(v,u)是包含u和v的最小权重循环的长度。对于每对顶点,将其取值并取最小值。这是最低的weigtht周期。