繁体   English   中英

使用 Dijkstra's 在加权有向图中找到权重最低的循环

[英]Find the lowest-weight cycle in a weighted, directed graph using Dijkstra's

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

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

我见过使用 Floyd-Warshall 的解决方案,但我想知道我们将如何使用 Dijkstra 来做到这一点,以及如何在给定的时间限制内做到这一点。

我有几个困惑点:

  • 首先,我们如何知道图中有多少个循环以及如何检查这些循环?
  • 另外,为什么是|E||V|log|V|? 根据我的理解,您应该遍历所有顶点,从而使其|V|log|V|。

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

从每个顶点调用 Dijkstra 算法以找到到自身的最短路径(如果存在)。 从任何顶点到其自身的最短路径是最小圈。 Dijkstra 的算法需要 O(|E| log |V|),所以总时间是 O(|V||E| log |V|)。

请注意,这次可能比 Floyd-Warshall 更糟糕,因为图中可能有 O(|V|^2) 条边。

调用 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 的最低权重循环的长度。对于每对顶点,计算此值并取最小值。 这是重量最低的循环。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM