待完善,只是自己的一点读书随想
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的最短路径
以上方法只是对于算法实现的一些辅助理解,算法的真正实现步骤下次再完善吧