常见路由算法解析

静态路由算法

Dijkstra算法(最短路径算法)

迪科斯彻算法使用了广度优先搜索解决赋权有向图或者无向图的单源最短路径问题,算法最终得到一个最短路径树。该算法常用于路由算法或者作为其他图算法的一个子模块。
这个算法我刚刚学了一下,真的非常简单,咱们就来快速的说一下:
首先画个图(有向图或者是无向图都OK,咱们讲无向图,都一样)
在这里插入图片描述
这是用draw.io画的,还挺粗糙,将就着看吧。
咱们现在想一下,如何从近到远计算出从某个点出发,然后能到达的点呢?
首先咱们写一个details数组记录一下。
0表示这次的静态搜索是从这个点出发的
-1表示目前还不能从出发点搜索到该点

咱们啊,试着从dot-3出发!

第一步:
从dot-3出发,咱们先把dot-3放到res结果数组中。首先遭遇dot-2和dot-4,然后咱们更新一下details数组:
在这里插入图片描述
看嘛,这一次的搜索中,Dot-2胜出,所以咱们将Dot-2放到res数组中!在这里插入图片描述
完美,那么咱们乘胜追击,再从dot-2出发看看,当然已经存在于res中的点咱们就不看了。
很显然找到了dot-1和dot-5和dot-4(别忘了它哦,它可没进入res哦),OK咱们继续先更新details的信息,然后把小的那个放到res中。
在这里插入图片描述
OK咱们现在继续从优胜者入手,找到Dot-5 andDot-6,继续更新details数组然后找到优胜者,加入res!
在这里插入图片描述
咱们继续从dot-5出发,找到Dot-1 and Dot-0 and Dot-6,然后更新details数组,找到优胜者,加入res!
在这里插入图片描述
这里我想强调一点:从优胜点开始出发搜索下一步节点时,去更新他们的值。但是在比较的时候,是将所有的还没进入res且已经有记录details数值的点进行比较,而不是单纯只比较下一步的几个节点!!!
代码就暂时不上了,感觉很简单的样子

动态路由算法

距离向量路由算法

在这里插入图片描述
其实非常简单,就是某个路由节点E,选出自己身边的足够近的一些点(ABCD,当然C可以不是直接相连),然后再选出直接相连的一些点(ABD),OK开始构建这样的一张表,其中关注一下纵轴,指的是如果想从E点出发,先经过一次这个点,然后再到达相近节点,需要的权重和。这样一来,如果从E点出发,想去C点,就会知道,下一步走哪个点合适啦。
如果有一个新的节点想加入呢?
很简单,先收集一下自己身边的节点信息,然后也建立一张这样的表,最后把自己的表给别人更新过去。相邻节点一看,卧槽,有新的点或者是某个路径的最小值更新了,于是它自己也会更新;同样的,它还会将这些改变传播开来,直到稳定收敛。

猜你喜欢

转载自blog.csdn.net/weixin_44039270/article/details/106698757
今日推荐