关于dijistra算法的理解

最近在学习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到每个点的最短路径我想我的考虑还欠妥。 之后再考虑吧

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值