matlab warshell,图论算法:Floyd-Warshall算法

令G的顶点为V = {1, 2 …… n}, 并考虑某个k的顶点的子集{1, 2 …… k}。对于任意一对顶点i, j∈V, 考虑从i到j的所有路径, 这些路径的中间顶点都从{1, 2 ….. k}绘制, 并令p为其中的最小权重路径。 Floyd-Warshall算法利用路径p和从i到j的最短路径之间的链接, 其中所有中间顶点都在{1, 2 ….. k-1}中。链接取决于k是否为路径p的中间顶点。

如果k不是路径p的中间顶点, 则路径p的所有中间顶点都在集合{1, 2​​ …… k-1}中。因此, 从顶点i到顶点j且集合{1, 2​​ …….. k-1}中有所有中间顶点的最短路径也是到顶点j且集合{1中有所有中间顶点的最短路径, 2 ……. k}。

如果k是路径p的中间顶点, 则我们将p分解为i→k→j。

令dij(k)为从顶点i到顶点j的最短路径的权重, 其中所有中间顶点在集合{1, 2​​ ….. k}中。

递归定义为

floyd-warshall-algorithm.png

FLOYD - WARSHALL (W)

1. n ← rows [W].

2. D0 ← W

3. for k ← 1 to n

4. do for i ← 1 to n

5. do for j ← 1 to n

6. do dij(k) ← min (dij(k-1), dik(k-1)+dkj(k-1) )

7. return D(n)

Floyd-Warshall算法采用的策略是动态规划。 Floyd-Warshall算法的运行时间由3-6行循环的三重嵌套确定。第6行的每次执行花费O(1)时间。该算法因此在时间θ(n3)中运行。

示例:应用Floyd-Warshall算法构造最短路径。证明由Floyd-Warshall算法为该图计算的矩阵D(k)和π(k)。

floyd-warshall-algorithm2.png

解:

floyd-warshall-algorithm3.png

步骤(i)当k = 0时

floyd-warshall-algorithm-step1.png

步骤(ii)当k = 1

floyd-warshall-algorithm-step2.png

floyd-warshall-algorithm-step2-2.png

floyd-warshall-algorithm-step2-3.png

步骤(iii)当k = 2

floyd-warshall-algorithm-step3.png

floyd-warshall-algorithm-step3-1.png

步骤(iv)当k = 3

floyd-warshall-algorithm-step4.png

floyd-warshall-algorithm-step4-1.png

步骤(v)当k = 4

floyd-warshall-algorithm-step5.png

floyd-warshall-algorithm-step5-2.png

floyd-warshall-algorithm-step5-3.png

步骤(vi)当k = 5

floyd-warshall-algorithm-step6.png

floyd-warshall-algorithm-step6-2.png

TRANSITIVE- CLOSURE (G)

1. n ← |V[G]|

2. for i ← 1 to n

3. do for j ← 1 to n

4. do if i = j or (i, j) ∈ E [G]

5. the ← 1

6. else ← 0

7. for k ← 1 to n

8. do for i ← 1 to n

9. do for j ← 1 to n

10. dod ij(k) ←

11. Return T(n).

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值