关于dijkstra算法的个人总结

待完善,只是自己的一点读书随想

dijkstra算法之前一直理解的不是很透彻,今天重新看了下数据结构这本书,有所感悟。

dijkstra算法实现过程如下:

前提:假设出发点为v0,D(i,j)表示vi与vj两点间的直连距离,d(i,j)表示vi到vj的距离

(1)遍历整个距离矩阵,找出直连情况下距离v0最近的点,假设其为v1,则可以计算出由v0至v1的最近距离必定为D(0,1)

注意:理解第一步很重要,因为后面的步骤其实就可以看作是第一步的重复,只不过对点和距离做了相关处理!

证明D(0,1)一定是v1到v0的最短距离:由于v1是所有点(除了v0)中,距离v0的最短的直连距离。如果存在某个点vk,使得v0经过vk到达v1的距离比v0直接到达v1的距离小,那么必定有  D(0,k)+d(k,1)<D(0,1),只显然与D(0,1)是D(0,x)中的最小值相矛盾,所以得证。

(2)现在,我们已经知道v0到v1的最短路径了。接下来,我们将v0->v1看作一个整体,求出剩下的与v1直接相连的点中,距离v1距离最短的点。设这个点为v2,则同(1)可知,v2距离v0的最短路径为D(0,1)+D(1,2),路径为v0->v1->v2,并将这个距离看成v2到v0的直连距离。

(3)依次遍历,每次都是先找出没有计算的点中距离v0直连距离最短的点,重复(2),直至所有的点都求出其到v0的最短路径

以上方法只是对于算法实现的一些辅助理解,算法的真正实现步骤下次再完善吧

    原文作者:Dijkstra算法
    原文地址: https://blog.csdn.net/u010639500/article/details/73477767
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞