Proof for Floyd-Warshall's Shortest Path Derivation Algorithm Also Demonstrates the Hierarchical Path Construction Process
(THIS BLOG WAS ORIGINALLY WRTITTEN IN CHINESE WITH LINK: http://www.cnblogs.com/waytofall/p/3732920.html)
Foreword: Floyd-Warshall is a classical dynamical programming algorithm for deriving shortest paths between each pair of nodes on a graph. It has n iterations (n for the number of nodes). During each iteration k, the shortest paths for each pair of nodes with intermediate nodes numbered no more than k are derived. Since inductively, we can assume that before iteration k, the shortest paths for each pair of nodes with intermediate nodes numbered no more than k-1 are derived, the way to derive the paths with intermediate nodes numbered no more than k can be derived as:

In order to derive all the intermediate nodes on a shortest path, the algorithm maintains a predecessor matrix Π, with its element πij denoting the node before j in the shortest path from i to j. The matrix is defined as follows:


For more detailed specification, please refer to Introduction to Algorithms.
My problem: for two nodes i, j of graph, there is a maximal k, such that during the kth iteration, the shortest paths dynamically programmed by the algorithm was combined by shortest paths i ~ k, k ~ j, whose intermediate nodes are numbered less than k. And for the shortest paths i ~ k, k ~ j, we can also have such a iteration. Therefore, the path can be visualised as follows:

In the tree displayed above, each parent is separated by the "middle node" k, which is the maximal number of iteration that combines two paths. The shortest paths derived from the predecessor matrix are easily proved correct, but the problem is, whether the paths derived by such methods are identical to the paths displayed by the figure above? In another word, whether the paths derived demonstrate the hierarchical path construction process of Floyd-Warshall? The answer is yes. And I'm gonna prove it.
Lemma 1: If, during the kth iteration, the shortest path from i to j was derived by combining paths i ~ k, k ~ j, and we have m = πij(k) and m ≠ k; then the shortest path constructed by the algorithm from i to m also are derived from combining i ~ k, k ~ m.
Proof: Since πkj(k-1) = πij(k)= m, that is, in the path from k to j with intermediate nodes numbered no more than k, the predecessor of j is m, so we have:
dkj(k-1) = dkm(k-1) + wmj
wmj is the weight for edge(m, j).
Since there is an edge from m to j, from the Triangle Inequality, we have:
dij(k-1) ≤ dim(k-1) + wmj (1)
which is:
dim(k-1) ≥ dij(k-1) - wmj (2)
From the condition of the lemma, we have:
dij(k-1) > dik(k-1) + dkj(k-1) (3)
Subtract wmj from both sides, we have:
dij(k-1) - wmj > dik(k-1) + dkj(k-1) - wmj = dik(k-1) + dkm(k-1) (4)
Which can be transformed to:
dij(k-1) - wmj > dik(k-1) + dkm(k-1) (5)
Combining (2) and (5), we have:
dim(k-1) > dik(k-1) + dkm(k-1) (6)
Done.
Then we are going to prove our conclusion.
Proof: We use mathematical induction. Before the first iteration, the paths derived from the Π(0) matrix certainly meet the property.
Then, supposing that path derived from Π(k-1) meet the property, then in the kth iteration:
(1). If the shortest path from i to j does not contain node k, we have dij(k) = dij(k-1),πij(k) = πij(k-1) = m. Applying the shortest path construction function, we can have a nodes sequence:
πij(k) = m
πim(k) = n
...
πio(k) = p
πip(k) = i
For any πix(k) (x belongs to {m,n,...,p,i}), πix(k) =πix(k-1). So we have:
πij(k) = πij(k-1) = m
πim(k) = πim(k-1) = n
...
πio(k) = πio(k-1) = p
πip(k) = πip(k-1) = i
That is, the shortest paths derived from Π(k) is identical to the shortest paths derived from Π(k-1). Since Π(k) has the propery, the path also has the property.
(2). If the shortest path from i to j contains node k, we have:
dij(k) = dik(k-1) + dkj(k-1),πij(k) = πkj(k-1)= m
and:
πij(k) = πkj(k-1) = m
πim(k) = πkm(k-1) = n
...
πio(k) = πko(k-1) = p
πip(k) = πkp(k-1) = k
That is, we enumerate the predecessor of j until we get to k. Now, all the intermediate nodes of the path from i to k are identical to the path derived from Π(k-1), so the subpath meet the property. The same for path from k to j, so the shortest paths from i to j derived from Π(k) meet the property.
Done.
Proof for Floyd-Warshall's Shortest Path Derivation Algorithm Also Demonstrates the Hierarchical Path Construction Process的更多相关文章
- 图论之最短路径(1)——Floyd Warshall & Dijkstra算法
开始图论学习的第二部分:最短路径. 由于知识储备还不充足,暂时不使用邻接表的方法来计算. 最短路径主要分为两部分:多源最短路径和单源最短路径问题 多源最短路径: 介绍最简单的Floyd Warshal ...
- SPFA(Shortest Path Faster Algorithm)
特别说明 本文转载自三金(frinemore)的博客: 点这 前言 1.关于SPFA,它没死. 2.接下来的所有代码,都是自己手写的(未检查正确性,补充的代码有检查过,是对的),有错误请帮忙指出. S ...
- 安装vmware-tools遇the path "" is not valid path to the gcc binary和the path "" is not a valid path to the 3.10.0-327.e17.x86_64 kernel headers问题解决
#./vmware-install.pl踩点: 1.the path "" is not valid path to the gcc binary 2.the path " ...
- 安装vm tools时出现如下问题 The path "/usr/bin/gcc" is not valid path to the
sudo suapt-get updateapt-get dist-upgradeapt-get install open-vm-tools-desktop fusereboot https://bl ...
- os.path.join合并 os.path.dirname返回上一级目录 os.path.exists(path) os.stat('path/filename')获取文件/目录信息
import os str1 = "grsdgfd" str2 = "wddf" str3 = "gddgs" # print(str1 + ...
- zk 09之:Curator之二:Path Cache监控zookeeper的node和path的状态
在实际应用开发中,当某个ZNode发生变化后我们需要得到通知并做一些后续处理,Curator Recipes提供了Path Cache 来帮助我们轻松实现watch ZNode. Path Cache ...
- os.path.dirname(__file__)使用、Python os.path.abspath(__file__)使用
python中的os.path.dirname(__file__)的使用 - CSDN博客https://blog.csdn.net/u011760056/article/details/469698 ...
- Floyd —Warshall(最短路及其他用法详解)
一.多元最短路求法 多元都求出来了,单源的肯定也能求. 思想是动态规划的思想:从任意节点A到任意节点B的最短路径不外乎2种可能,1是直接从A到B,2是从A经过若干个节点X到B.所以,我们假设Dis(A ...
- 图论学习笔记·$Floyd$ $Warshall$
对于图论--虽然本蒟蒻也才入门--于是有了这篇学习笔记\(qwq\) 一般我们对于最短路的处理,本蒟蒻之前都是通过构建二维数组的方式然后对每两个点进行1次深度或者广度优先搜索,即一共进行\(n\)^2 ...
随机推荐
- mstsc Windows局域网内远程桌面连接
1.检查被连接计算机的远程桌面连接功能是否开启 控制面板->系统和安全->系统->远程设置->远程桌面->勾选"仅允许运行使用网络级别身份验证的远程桌面的计算 ...
- TCP、UDP详解
OSI 计算机网络7层模型 TCP/IP四层网络模型 传输层提供应用间的逻辑通信(端到端),网络层提供的是主机到主机的通信,传输层提供的是可靠服务. TCP 中常说的握手指的是:连接的定义和连接的建立 ...
- 自定义requestAnimationFrame帧频
requestAnimationFrame(callback)触发的callback方法会接受一个时间戳参数,所以如果不想直接跟随浏览器系统帧频的话, 就可以利用这个时间戳参数来做到自定义帧频,做法就 ...
- selenium-java,定位并操作frame和iframe内的元素
因为frame和iframe的原因,在frame里的元素不能直接定位需要切到相应的frame才可以对元素进行操作,下面是涉及的方法 webDriver.switchTo().defaultConten ...
- 数位DP新识
简单题:HDU2089 HDU3652 HDU4734 HDU3555 POJ3252 HigoCoder1033(需要前导0,或者用方法4) 总结: 1,dfs(pos,state, ...
- sync-settings(vscode)
vscode插件以及设置 sync-download e45c6db33cd91d661e0cc545efb6817c
- POJ2728 Desert King 【最优比率生成树】
POJ2728 Desert King Description David the Great has just become the king of a desert country. To win ...
- BZOJ1486 HNOI2009 最小圈 【01分数规划】
BZOJ1486 HNOI2009 最小圈 Description 应该算是01分数规划的裸板题了吧..但是第一次写还是遇到了一些困难,vis数组不清零之类的 假设一个答案成立,那么一定可以找到一个环 ...
- 论坛源码推荐(11.6):iPhone6/6 plus屏幕适配Demo,Java代码转Objective-C
http://www.cocoachina.com/ios/20141106/10153.html iPhone6/6 plus 屏幕适配Demo(代码底层处理)(论坛会员satian)htt 该项目 ...
- 【Netty】netty学习之nio网络编程的模型
[一]NIO服务器编程结构 [二]Netty3.x服务端线程模型