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 ...
随机推荐
- iOS开发:UITableView的优化技巧-异步绘制Cell
最近在微博上看到一个很好的开源项目VVeboTableViewDemo,是关于如何优化UITableView的.加上正好最近也在优化项目中的类似朋友圈功能这块,思考了很多关于UITableView的优 ...
- 64位系统下注册32位dll、ax文件
64位系统下注册32位dll.ax文件. 换了64位系统遇到的新问题,目前常用的影音处理软件多数为32位. 注册这些32的滤镜会提示不兼容,大概因为32 位进程不能加载64位Dll,64位进程也不可以 ...
- matlab load
参考文献:http://jingyan.baidu.com/article/fec4bce2257963f2618d8bfa.html 对应save,load 命令更加简单. load的方式有三种: ...
- opengl去除控制台黑窗口
增加如下语句: #pragma comment(linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\ ...
- BZOJ - 4318: OSU! (期望DP&Attention)
Description osu 是一款群众喜闻乐见的休闲软件. 我们可以把osu的规则简化与改编成以下的样子: 一共有n次操作,每次操作只有成功与失败之分,成功对应1,失败对应0,n次操作对应为1 ...
- linux自学(一)之vmware虚拟机安装
之前有研究过linux,后来一段时间没有操作了,现在有点陌生,而且当初也没有记录学习内容.现在想从新开始包括虚拟机安装到部署Javaweb项目,把这之间所需要的全都记录下来,以便后边学习参考使用. 虚 ...
- Java 按行拆分txt
T028619630|@|聚二零|@|M|@|1983-01-01|@|0|@|110101198301010098|@||@||@||@|湖南省衡阳市耒阳市蔡伦步行街1005号302|@|42100 ...
- VC++ 获取鼠标状态,获取鼠标弹起消息
LRESULT CALLBACK TestProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { switch (msg) { case W ...
- VMware虚拟机克隆CentOS 6.5后网卡修改方法
VMware虚拟机安装好CentOS6.5系统后,纯净的系统多克隆几份出来方便后期做试验.克隆步骤很简单,克隆后出现的问题是克隆后的网卡MAC地址和原系统MAC地址一样,在局域网内会有冲突,需要更改克 ...
- 常见企业IT支撑【8、端口回流问题】
端口回流故障场景,常见于内网启用了Server服务器,使用出口路由设备的外网口NAT映射了一个公网地址,域内内网主机访问了这个公网地址,访问不通. 故障容易出现在办公网内的带有对外Server测试环境 ...