bellmax-ford算的证明

\(dist[x]\)表示源点到\(x\)的最短路的距离(图中无负环),若对图中任意一条边\((x,y,z)\)满足\(dist[y]≤dist[x]+z\),那么\(dist\)就是最短路数组

证:考虑任意一个点\(a\),假设找出了一条源点到\(a\)的最短路径{\(x_0,x_1,...,x_n,a\)},那么显然这条路径上\(x_0\)到任意一个点一定是最短路径;我们来证明对任意一个\(x_i\)\(dist[x_i]\)为最短路径

\(x_1\)来说,有\(dist[x_1]≤dist[x_0]+z_{x_0->x_1}=z_{x_0->x_1}\),由于\(z_{x_0->x_1}\)是最短的,所以\(dist[x_1]=z_{x_0->x_1}\),所以\(x_1\)满足

\(x_i\)来说,若前面的点都满足\(dist\)为最短路数组,那么有\(dist[x_i]≤dist[x_{i-1}]+z_{x_{i-1}->x_i}\);由于\(dist[x_{i-1}]+z_{x_{i-1}->x_i}\)表示的是最短路,所以\(dist[x_i]=dist[x_{i-1}]+z_{x_{i-1}->x_i}\),得证

再证明一下时间复杂度。就按spfa来证明,spfa相当于BFS,满足两段性,所以我们再给队列中的每个元素加一个分量,表示这个元素所代表路径的边数,那么显然边数是逐渐递增的,每一层最多包含所有点,所有点全部走完所有边,于是复杂度为\(O(nm)\)

posted @ 2024-05-19 16:45  最爱丁珰  阅读(3)  评论(0编辑  收藏  举报