Algorithm Bellman-Ford算法正确性证明
我正试图学习贝尔曼-福特算法,但我对正确性的证明感到困惑。 我用过,但我就是不懂证据。我在Youtube上没有找到任何有用的东西。 希望大家能简单解释一下。这一页没有回答我的问题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。
谢谢。让我们从没有负循环的图的动态规划的角度来看这个问题 我们可以将动态规划的记忆表可视化如下: 列表示节点,行表示更新步骤(节点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 |的步骤和之后,更新将永远不会停止 我的密码在这里 参考:
您最好将此问题发布到-致力于计算机科学理论的堆栈交换社区。您最好将此问题发布到-致力于计算机科学理论的堆栈交换社区。您最好将此问题发布到-致力于计算机科学理论的堆栈交换社区。