[算法导论]Floyd-Warshall算法及其证明[DP的经典应用]

可以为负权边,但是不可以有负权环。不仅可以solve the all-pairs shortest-paths problem, but also find the transitive closure of a directed graph.

此算法基于以下观察:

假设节点为V={1,2,3...,n},首先定义中间节点,考虑subset={1,2,...,k},对于任何一对节点(i,j),只考虑中间节点为subset的最短路径,

对于subset={1,2,...,k-1},则有以下情况:

1)如果k不位于(i,j)的最短路径上,那么(i,j)的最短路径在subset={1,2,...,k-1}的情况不变;

2)如果k位于(i,j)的最短路径上,那么我们考虑i->k->j的路径,那么i->k和k->j的最短路径的中间节点都在subset={1,2,...,k-1}中,这个是已知情况了;

所以我们可以得到以下递归式:

[算法导论]Floyd-Warshall算法及其证明[DP的经典应用]_第1张图片

[算法导论]Floyd-Warshall算法及其证明[DP的经典应用]_第2张图片

π(i,j)表示i->j的最短路径中j的前序。



紧接着就是求图的传递闭包了,定义为:


其中一种方法就是将权值赋值为1,求节点对的最短路径,时间复杂度为O(n^3);

然而我们可以用另一个角度来看Floyd算法,定义t(i,j)=1表示i->j存在路径,那么就得到如下的递归式了:

[算法导论]Floyd-Warshall算法及其证明[DP的经典应用]_第3张图片

over................................(*^__^*) 




你可能感兴趣的:(算法,算法导论)