Graph Floyd Warshall和矩阵乘法图算法之间的区别是什么?

Graph Floyd Warshall和矩阵乘法图算法之间的区别是什么?,graph,graph-algorithm,matrix-multiplication,directed-graph,floyd-warshall,Graph,Graph Algorithm,Matrix Multiplication,Directed Graph,Floyd Warshall,我必须解决以下问题:编写一个程序,给定一个具有成本和两个顶点的有向图,在给定顶点之间找到成本最低的行走,或者如果图中存在负成本循环,则打印一条消息。程序应使用矩阵乘法算法 我实现了定义中的矩阵乘法算法:伪矩阵乘法,其中加法由最小化和加法乘法代替。但通过这样做,我也得到了Floyd-Warshall算法,我无法通过这种方式轻松确定负成本周期的存在 我假设我的算法和实矩阵乘法图算法之间有一个很大的区别,但这到底是什么呢 您可以使用Floyd Warshall确定是否存在负循环: 尽管如此,如果存在

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

我实现了定义中的矩阵乘法算法:伪矩阵乘法,其中加法由最小化和加法乘法代替。但通过这样做,我也得到了Floyd-Warshall算法,我无法通过这种方式轻松确定负成本周期的存在

我假设我的算法和实矩阵乘法图算法之间有一个很大的区别,但这到底是什么呢

  • 您可以使用Floyd Warshall确定是否存在负循环:
  • 尽管如此,如果存在负循环,弗洛伊德-沃德模型应 算法可以用来检测它们。直觉如下:

    • Floyd–Warshall算法迭代修正所有顶点对(i,j)之间的路径长度,其中i=j
    • 最初,路径(i,i)的长度为零
    • 如果路径[i,k,…,i]的长度小于零,即表示负循环,则路径[i,k,…,i]只能在此基础上改进
    • 因此,在算法之后,如果存在从i返回i的负长度路径,则(i,i)将为负
  • 两种算法之间的一些差异:


    • Matrix algo可以找到具有特定边数的最小路径(例如,找到所有具有边数的顶点对之间的最小路径这确实是Floyd Warshall的一件好事,我对此感到不安,因为我仍然不知道为什么要使用“矩阵乘法图算法”,而不是“弗洛伊德·沃沙尔",因为我看不出两者之间有什么区别。非常感谢。@ImiMali,我在答案中增加了这两种算法之间的一些区别。非常感谢,我现在清楚地了解了区别是什么,只是想法的相似性让我有点困惑。最后,我用重复的方法实现了矩阵乘法算法平方运算,效果很好。再次感谢你。另外,我还找到了一种方法来重建涉及的路径,方法是使用另一个包含边列表的矩阵,每次乘法时通过连接这些列表来重建路径。我确切地知道matr.乘法算法和Floyd Warshall now.T之间的区别有一件事我没有看到,弗洛伊德使用同一个矩阵,并在每一步中进行更新,而矩阵乘法使用另一个矩阵,并对其进行一次又一次的平方运算。这样,弗洛伊德只需在一次“乘法”后进行运算,而另一次必须对结果日志(n)进行平方运算时代,因为它不随时间更新。这是我从一开始就在寻找的。虽然我在一个月前也让我的程序工作了,但这是我寻找的一件事,作为一个不同的问题,作为一个答案:“如果你还在某个地方,你介意分享算法吗?我对使用你在评论中提到的辅助矩阵检索路径的部分感到困惑。”你可以在这里找到它:如果那里有不清楚的地方,请随时与我联系:)