Skip to content

Latest commit

 

History

History
24 lines (23 loc) · 1.24 KB

最短路径之Dijkstra算法证明.md

File metadata and controls

24 lines (23 loc) · 1.24 KB

这个算法真的是学一次忘一次。。在此写一下证明方法

主要思想就是利用数学归纳法,证明命题“每次从剩余集合中选取一个到v0距离最短的点,这个距离就是新选取点到v0的最短距离”
一共有n个点,设出发点为v0,每次选出的到v0最近的点为v1,v2,v3,...,vk, vn,得到一组距离d1,d2,d3,d4......vn,证明这样得到的距离d1,d2,d3,....dn
是v1,v2,v3,....vn到v0的最短距离。
1.i=1
很明显成立
2.假设i=k时成立
如果i=k+1得到的d(k+1)不是v(k+1)到v0的最短距离,那么这个最短距离只可能经过点v(k+2)以及之后的点
(因为不可能从池子里走,从池子里走的最短就是d(k+1)了)。而dk+2肯定比dk+1大(这样的话距离就是dk+2 + distance(k+1, k+2)),矛盾,
所以这样取得的距离都是最小距离。

可以用一句话概括, ``` 开疆扩土,逐个击破 ``` 每次总是把最好打的加入自己的领土,同化后再挑剩下的软柿子捏,这才是最简单的征途

所以我们可以从此看出迪杰斯特拉算法的本质

迪杰斯特拉算法是贪心算法,每一步得到的都是最优解(最短路径)

https://blog.csdn.net/a19990412/article/details/80232810