【发布时间】:2014-05-09 10:43:31
【问题描述】:
“让 G 是一个没有负循环的有向加权图。设计一种算法来找到 G 中的最小权重循环,其运行时间复杂度为 O(|V|^3)。”
以上是我在课程作业中一直在研究的一个问题。当我第一次阅读它时,我立即认为 Floyd-Warshall 算法可以解决这个问题 - 主要是因为 F-W 在 O(|V|^3) 时间内运行,并且它适用于没有负循环的正负加权图。不过,我很快就想起了 F-W 旨在找到图的最短路径,而不是最小权重循环。
我在这个问题上是否正确?是否可以修改 Floyd-Warshall 算法以在图中找到最小权重循环?
【问题讨论】:
-
是的,你在正确的轨道上。包含顶点 v 的最小权重循环由从 _____ 开始的最小权重 _____ 组成,然后是 a[n] _____。填空:)
-
我不知道上面的空白应该是什么,但循环是从顶点到自身的(非平凡的)路径。您只需调整 FW 的初始设置即可获得所需的内容。
-
@G.Bach 我认为黑客的意思是,如果您首先解决了所有对最短路径,则可以在 O(n^3) 内构造最小循环。如果我们想找到一个没有重复节点的简单循环,那就更难了
-
@NiklasB。我认为将每个顶点一分为二就足够了,将它们与零权重边连接,并以通常为此操作完成的方式调整所有边。然后我们运行 Floyd-Warshall,寻找从 v_o 到 v_i 的最短路径,其中 v 覆盖所有顶点。由于我不记得 Floyd-Warshall 是否会为您提供不简单的路径,因此一旦我们有了路径,我们就可以轻松地在线性时间内去除其中的所有(零权重)循环。
-
@G.Bach:这将适用于像这样的有向图,前提是您在每种情况下都添加了从 v_i 到 v_o 的边。 (但请尽量不要对家庭作业问题给出完整的答案......)
标签: algorithm graph floyd-warshall