证明Dijkstra最短路径(非转载——但可能会有类似)

前言:

昨天因为某位**,想要喷我那篇思路和别人抄的证明博客。。。

然后,就果断删除啥也没保存,今天又来重写。

自己推的


引子:

我们应该知道一些东西, D i j k s t r a Dijkstra Dijkstra的路径应该是他的已经确定的最短路,到源点的距离。

然后捏~ D i j k s t r a Dijkstra Dijkstra的大概思想就是从一开始将起点到起点的距离记为 0 0 0,然后进行 n n n次循环,然后我们会找到一个到起点距离 d i s t dist dist最短的点 x x x

但是为什么循环找到的 x x x,必定就是 d i s t dist dist到源点的最短路呢?

证明啊!


证明:

再次声明,没有转载!

我们设前面 n n n个已经确定为最短路 d i s t dist dist是正确的即是前 n n n个点已经是红点,

那么要证明 n + 1 n + 1 n+1个蓝点 x x x会变为红点,即证明剩下的点中连最小的蓝点的距离 d i s t dist dist也是正确的。

简单来说,就是证明这条从源点出发的,并且经过之前 n n n个红点的那条路径,也就是之后蓝点的路径 x x x的最短路。

那么假设 n + 1 的那个点的距离并不是正确的,那就是说最短路不是path应该有以下的两种情况:

  • x x x的最短路是另外一条路 path_path_ 这条最短路,除了 x x x其他都是红色阵营集合里面的,那么接着设path_所经过的最后一个红点是L

在蓝点阵营中找一个相邻顶点k,使得与Ldist距离最小。

当 k ! = L 时 当 k != L 时 k!=L,对于前面我们假设 n + 1 n + 1 n+1的那个点的 p a t h path path并不是正确的假设,可以得知:

distL + dist(L , x) < distk + dist(k,x)

当 k = L 时 当 k = L 时 k=L,根据前 n n n个点都会对的假设的话,又会得出来一个东西:

len(path) <= len (L)

如果想要有更短的路径,只能经过红色阵营外面的点。那么设真正的源点到 x x x的最短路为 p a t h ‘ path‘ path

p a t h ’ path’ path经过的第一个集合外面的点 k k k

当 k ! = x 时 : 当 k != x 时: k!=x

根据前 n n n个点都是正确的最短路的假设,所以 k k k的最短路一定是diskk

我们知道 D i j k s t r a Dijkstra Dijkstra和无负权边的尿性特点,我们知道

lenpath’ = distk + disk(k , x)

lenpath’ > diskk > diskx

所以 p a t h ′ path' path根本不可能是最短路,所以矛盾。

得证!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值