弗洛伊德算法原理解释(数学证明)

弗洛伊德算法原理解释

不了解floyd算法是怎么一回事的可以先看下这篇文章,https://blog.csdn.net/yuewenyao/article/details/81021319是我见过讲得很清晰的了。

本文是对其原理的解释,希望看完此文后你能明白,“为什么floyd算法在插入N个顶点后一定会得到最短路径” ,以及,“乱序/任意顺序的插入所有顶点后都将得到最短路径”

要解释清楚这些,需要从最短路径的结果入手,可以认为floyd是从已知结果出发探寻出来的一种算法,以下是正文。

假设N个顶点之间的任意两点的最短路径已经确定,不妨认为,A1到Am两个点间的最短路径为A1->A2->…->Am-1->Am(其中m<n,A1点与Am点是任取的点)。

那么在这条最短路径上的任意两个点Ai与Aj之间的路径都将会是这两个点之间的最短路径,这个是好确定的:如果不是的话,把Ai与Aj之间的最短路径替换一下就会与上面的A1到Am的最短路径产生矛盾。

于是,当插入不属于这m个点的点时(即不是A1、A2、… 、Am之间的点),都不会影响到这些点之间的最短路径,那么我们可以不管非m个点之间的插入后的影响,同样的也不需要管A1和Am两个端点的影响,而只需要分析插入的是中间m-1个点(即A2、A3、… 、Am)时的结果。

为了让大家好理解一点,先插入A2试一下,那么A1->A3的距离,在经过A2后会达到最短(这是之前假设的结论),相当于一定会得到A1->A2->A3这样的一条A1到A3的最短路径。 同样的道理,如果我们插入中间的某个点Ai,就一定可以得到Ai-1->Ai->Ai+1这样的一条Ai-1到Ai+1的最短路径。于是,我们把中间的点全部插入后,这些最短路径就可以连起来从A1一直指向Am,这就与我们前面假设的最短路径一致了。

同时,基于上面的插入中间值的分析,显然我们任意顺序插入中间m-1个点最后都可以得到A1到Am的最短路径,故此,我们解释清楚了一开始的两个问题

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值