最近在学习OSPF协议,发现里面用到的计算路由的算法就是dijistra算法。虽然前面有学过,但是没有做笔记就忘了,那就在这里 写下我对这个算法 的理解吧
就以下面这个图作为题目吧:
总结dijistra算法的中心思想:通过更新已经找到最短路径结点集合松弛起始结点到其他结点的距离
所以首先要有一个集合用来存放已经找到最短路径结点:S(这个应该也是用数组类型)
有一个数组用来存放起始结点到其他结点的距离:dis
用一个表格来描述
说明一下:
(1)表格中的v1到各点的距离指的是:v1可以直接到达的点的距离,或者说v1可以通过已经更新在S中的点可以间接到达的距离
举个例子:在S = {v1,v2}时,求dis[v1到v3] =dis[v1到v2] + dis[v2到v4] = 1+3 < 原来的无穷大,所以更新dis[v1到v4]为4
(2)每次更新dis都是一次表格意义上的纵向比较,将本次与上一次的比较,将较小者更新在对应的dis中,如果本次比较没有比上次小,那么就不做更新
如果到了最后也没有更新dis值,那么就沿表格着看什么时候停止更新数据的,就能找到v1到这个结点的对应的最小路径,比如:v1到v6的最小路径是:v1-v2-v4-v6
(3)每一次挑选结点 都是一次表格意义上横向的比较,将最小值对应的结点挑选出来更新在S中
上述只是提供了思路,但是用算法实现的话,对于最后如何查看v1到每个点的最短路径我想我的考虑还欠妥。 之后再考虑吧