Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.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 Bellman-Ford算法正确性证明_Algorithm_Time Complexity_Correctness_Proof Of Correctness - Fatal编程技术网

Algorithm Bellman-Ford算法正确性证明

Algorithm Bellman-Ford算法正确性证明,algorithm,time-complexity,correctness,proof-of-correctness,Algorithm,Time Complexity,Correctness,Proof Of Correctness,我正试图学习贝尔曼-福特算法,但我对正确性的证明感到困惑。 我用过,但我就是不懂证据。我在Youtube上没有找到任何有用的东西。 希望大家能简单解释一下。这一页没有回答我的问题 谢谢。让我们从没有负循环的图的动态规划的角度来看这个问题 我们可以将动态规划的记忆表可视化如下: 列表示节点,行表示更新步骤(节点0是源节点),从步骤中的一个框指向下一步中的另一个框的箭头是min更新(步骤0是初始化) 我们从所有最短路径中选择一条路径,并说明为什么它是正确的。让我们选择0->3->2->4->5。

我正试图学习贝尔曼-福特算法,但我对正确性的证明感到困惑。 我用过,但我就是不懂证据。我在Youtube上没有找到任何有用的东西。 希望大家能简单解释一下。这一页没有回答我的问题


谢谢。

让我们从没有负循环的图的动态规划的角度来看这个问题

我们可以将动态规划的记忆表可视化如下:

列表示节点,行表示更新步骤(节点0是源节点),从步骤中的一个框指向下一步中的另一个框的箭头是
min
更新(步骤0是初始化)

我们从所有最短路径中选择一条路径,并说明为什么它是正确的。让我们选择0->3->2->4->5。这是从0到5的最短路径,我们可以选择其他路径。我们可以通过简化来证明其正确性。初始值是源0,显然,0和它本身之间的距离应该是0,最短的。我们假设0->3->2是0和2之间的最短路径,我们将在第三次迭代后证明0->3->2->4是0和4之间的最短路径

首先,我们证明在第三次迭代之后,节点4必须固定/拧紧。如果节点4不固定,则意味着除0->3->2->4之外,至少有一条路径可以到达4,并且该路径应短于0->3->2->4,这与我们的假设相矛盾,即0->3->2->4->5是0和5之间的最短路径。然后在第三次迭代之后,应该连接2和4

其次,我们证明了放松应该是最短的。它不能越来越小,因为它是唯一的最短路径


让我们看一个负循环图

这是它的备忘表:

让我们证明在| V |的迭代中,这里| V |是顶点数6,更新不应该停止

我们假设更新已停止(并且存在一个负循环)。让我们看看循环3->2->4->5->3

dist(2)3是一个负循环

因此,我们确信,在| V |的步骤和之后,更新将永远不会停止

我的密码在这里

参考:


  • 让我们从一个没有负循环的图的动态规划的角度来看这个问题

    我们可以将动态规划的记忆表可视化如下:

    列表示节点,行表示更新步骤(节点0是源节点),从步骤中的一个框指向下一步中的另一个框的箭头是
    min
    更新(步骤0是初始化)

    我们从所有最短路径中选择一条路径,并说明为什么它是正确的。让我们选择0->3->2->4->5。这是从0到5的最短路径,我们可以选择其他路径。我们可以通过简化来证明其正确性。初始值是源0,显然,0和它本身之间的距离应该是0,最短的。我们假设0->3->2是0和2之间的最短路径,我们将在第三次迭代后证明0->3->2->4是0和4之间的最短路径

    首先,我们证明在第三次迭代之后,节点4必须固定/拧紧。如果节点4不固定,则意味着除0->3->2->4之外,至少有一条路径可以到达4,并且该路径应短于0->3->2->4,这与我们的假设相矛盾,即0->3->2->4->5是0和5之间的最短路径。然后在第三次迭代之后,应该连接2和4

    其次,我们证明了放松应该是最短的。它不能越来越小,因为它是唯一的最短路径


    让我们看一个负循环图

    这是它的备忘表:

    让我们证明在| V |的迭代中,这里| V |是顶点数6,更新不应该停止

    我们假设更新已停止(并且存在一个负循环)。让我们看看循环3->2->4->5->3

    dist(2)3是一个负循环

    因此,我们确信,在| V |的步骤和之后,更新将永远不会停止

    我的密码在这里

    参考:


  • 您最好将此问题发布到-致力于计算机科学理论的堆栈交换社区。您最好将此问题发布到-致力于计算机科学理论的堆栈交换社区。您最好将此问题发布到-致力于计算机科学理论的堆栈交换社区。