Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm Floyd-Warshall算法的最小重量循环_Algorithm_Graph_Floyd Warshall - Fatal编程技术网

Algorithm Floyd-Warshall算法的最小重量循环

Algorithm Floyd-Warshall算法的最小重量循环,algorithm,graph,floyd-warshall,Algorithm,Graph,Floyd Warshall,“设G是一个无负圈的有向加权图。设计一个算法,在G中找到一个时间复杂度为O(| V | ^3)的最小加权圈。” 以上是我一直在做的一个问题,作为我课程的一部分。当我第一次读到它时,我立即想到Floyd Warshall算法可以解决这个问题——主要是因为F-W在O(| V | ^3)时间内运行,并且它适用于无负循环的正加权图和负加权图。然而,我很快就想起了F-W是用来寻找一个图的最短路径的,而不是一个最小权循环 我在这个问题上走对了吗?有没有可能修改Floyd-Warshall算法以在图中找到最小

“设G是一个无负圈的有向加权图。设计一个算法,在G中找到一个时间复杂度为O(| V | ^3)的最小加权圈。”

以上是我一直在做的一个问题,作为我课程的一部分。当我第一次读到它时,我立即想到Floyd Warshall算法可以解决这个问题——主要是因为F-W在O(| V | ^3)时间内运行,并且它适用于无负循环的正加权图和负加权图。然而,我很快就想起了F-W是用来寻找一个图的最短路径的,而不是一个最小权循环


我在这个问题上走对了吗?有没有可能修改Floyd-Warshall算法以在图中找到最小权重循环?

我想你已经非常接近了。一旦在O(| V | ^3)中进行FW循环,就得到了每对顶点之间最短路径的权重,我们称之为D(i,j)。现在我们主要问题的解决方案如下:对循环中的顶点施加蛮力,比如说X。对Y施加蛮力,Y是循环中的最后一个顶点,在X之前。这个循环的重量显然是D(X,Y)+W(Y,X)。然后你只需要选择一个最小的值。这显然是一个正确的答案,因为: (1) D(X,Y)+D(Y,X)的所有这些值代表某些(可能非简单)循环的权重; (2)如果最优循环是一些A->-> B-> A,则当x= a,y= b;p>
要重建答案,首先需要跟踪哪个X,Y给了我们最佳结果。一旦我们有了这个X和Y,剩下的唯一一件事就是找到从X到Y的最短路径,这可以通过各种方式来完成

是的,你在正确的轨道上。包含顶点v的最小权重循环由最小权重uuuuuuuuuuuuuuuuuuuuu开始,然后是[n]uuuuuuuuuuuuuuuu。填空:)我不知道上面的空白应该是什么,但循环是从顶点到自身的(非平凡)路径。你只需调整FW的初始设置即可得到你想要的。@G.Bach我想hacker的意思是,如果你先解出所有对的最短路径,你可以在O(n^3)中构造最小循环。如果我们想找到一个没有重复的简单循环,那就困难多了nodes@NiklasB. 我认为将每个顶点一分为二,用一条零权重边连接它们,然后按照此操作通常的方式调整所有边就足够了。然后我们运行Floyd Warshall,寻找从v_o到v_i的最短路径,其中v覆盖所有顶点。因为我不记得Floyd Warshall是否会给你非简单的路径,一旦我们有了一条路径,我们就可以很容易地在线性时间内去掉其中的所有(零权重)循环。@G.Bach:这对像这样的有向图有效,只要你在每种情况下都从v_I到v_o添加边。(但请尽量不要对家庭作业问题给出完整答案…)