Floyd-Warshall和矩阵乘法图算法有什么区别?

时间:2017-05-01 07:01:56

标签: graph graph-algorithm matrix-multiplication directed-graph floyd-warshall

我必须解决以下问题:编写一个程序,给定带有成本和两个顶点的有向图,找到给定顶点之间的最低成本步行,或者如果图中存在负成本周期则打印一条消息。程序应使用矩阵乘法算法。

我实现了定义的矩阵乘法算法:伪矩阵乘法,其中加法被最小化替换,乘法加法。但通过这样做,我最终得到了Floyd-Warshall算法。另外,我不能通过这种方式轻松确定负成本周期的存在。

我认为我的算法和实际矩阵乘法图算法之间存在重大差异,但究竟是什么呢?

1 个答案:

答案 0 :(得分:1)

  1. 您可以使用Floyd-Warshall确定是否存在负循环:
  2. https://en.wikipedia.org/wiki/Floyd%E2%80%93Warshall_algorithm#Behavior_with_negative_cycles

      

    尽管如此,如果存在负面循环,那么Floyd-Warshall   算法可用于检测它们。直觉如下:

         
        
    • Floyd-Warshall算法迭代地修改所有顶点对(i,j)之间的路径长度,包括i = j;
    •   
    • 最初,路径(i,i)的长度为零;
    •   
    • 路径[i,k,...,i]只有在长度小于零的情况下才能改进,即表示负循环;
    •   
    • 因此,在算法之后,如果存在从i回到i的负长度路径,则(i,i)将为负。
    •   
    1. 两种算法之间存在一些差异:

      • 矩阵算法可以找到具有特定边数的最小路径(例如,找到边数为< = k的所有顶点对之间的最小路径),FW不能。

      • 矩阵乘法算法需要额外的O(n ^ 2)空间,Floyd-Warshall可以就地使用。

      • 矩阵乘法算法具有O(n ^ 3 * log(n))复杂度repeated squaring或O(n ^ 4),实现简单,Floyd-Warshall复杂度为O(n ^ 3)