由 Hack Floyd 问题引出的 Floyd 的正确性证明

摘自一篇博客,突然想写了,但是确实和原题做法也没啥关系(其实也有点关系)。感觉 Floyd 的动态规划还是非常高深的,我好像以前并没有完全理解清楚他在做什么,即使我做了灾后重建一题。

主要是一个结论:当我们求 \(d_{i,j}\) 的时候,枚举了中转点 \(k\),当我们枚举的 \(k\) 的编号等于 \(path(u,v)\) 上编号最大的点的时候,我们就完成了更新。

我们使用数学归纳法:当我们求 \(d_{i,j}\) 的时候,我们要证明 \(d_{i,k}\)\(d_{k,j}\) 的答案都是最优的。我们记 \(path(i,k)\)\(path(k,j)\) 上的点分别为 \(k1\)\(k2\)。由于 \(k1<k\)\(k2<k\),那么由归纳,我们的 \(d_{i,k}\)\(d_{k,j}\) 就是最优的。又因为对于任意的 \(i\),满足 \(d_{i,i}=0\),于是我们就证明完毕了。

posted @ 2025-02-20 20:56  DataEraserQ  阅读(31)  评论(0)    收藏  举报