通信网第二章(二)——端间的最短径(D算法、BF算法、F算法)

Dijkstra算法——点对多点

Bellman-Ford算法——点对多点

Floyd-Warshall算法——多点对多点

 

D算法

D算法把端集分为两组,一组称为置定端集Gp,另一组称为未置定端集G-Gp。

每端都逐步给予一个标值。

对于置定端,标值是vs到该端的最短径的长度;

对于未置定端,所标的值是暂时的,随着算法的进展而调整。

 

D算法的适用范围

D算法对有向图也适用

也可适用于端点有权的情况

D算法不适用于边的权有正有负的情况

 

BF算法

Bellman-Ford算法能在更普遍的情况下(存在负权边)解决单源点最短路径问题。对于给定的带权(有向或无向)图 G=(V,E),其源点为s,加权函数 w是 边集 E 的映射。对图G运行Bellman-Ford算法的结果是一个布尔值,表明图中是否存在着一个从源点s可达的负权回路。若不存在这样的回路,算法将给出从源点s到 图G的任意顶点v的最短路径d(vs,vj)=min{d(vs,vi)+wij}

判断:如果存在从源点可达的权为负的回路,就无法收敛,不满足公式 d(v) < d (u) + w(u,v)。

Bellman-Ford算法的迭代松弛操作,实际上就是按顶点距离s的层次,逐层生成这棵最短路径树的过程。

 

B-F算法的运算量

设有N个节点, B-F算法最多循环N次;每次循环处理N-1个节点;对每个节点求最小路径,有N-1种选择

最坏情况下计算量为N的立方,表示为O(N的立方)

 

F算法

弗洛埃德(Floyd)算法,简称F算法。

F算法与D算法原理是一样的,只是用矩阵形式来表达,并进行系统化的计算。

对于n个端,已给边长dij的图,顺序计算各个n×n的W阵和R阵,前者代表径长,后者代表转接路由。

 

F算法步骤如下:

F0:

通信网第二章(二)——端间的最短径(D算法、BF算法、F算法)_第1张图片

通信网第二章(二)——端间的最短径(D算法、BF算法、F算法)_第2张图片

文字描述:定义径长矩阵与转接路由矩阵

                 径长矩阵:有边就为端点之间距离  无边就为无穷大  端点为本身就为0

                 转接路由矩阵:如果径长矩阵有边,r就为j   

 

F1:已得W(k-1)和R(k-1),求W(k)和R(k)

通信网第二章(二)——端间的最短径(D算法、BF算法、F算法)_第3张图片

文字描述:

从第1个端点到最后一个端点依次作为两两端点中间端点,求径长及转接路由

规则:

径长矩阵:比较之前矩阵与现在加了端点后的矩阵,取小值(我们可以看着矩阵来进行计算)

转接路由:如果加了端点后的径长与之前相同,那r就取r(k-1)矩阵j列

                  如果加了端点后的径长小于之前的,就取之前r(k-1)矩阵k列

F2:k

我们可以通过矩阵找两个端点之间的最小路径

 

评价:

1D算法与P算法很相近,都是分为置定端集与未置顶端集,来进行计算,只是D算法求最短经相比P算法求最短主树多了更新这个操作

2F算法,就是n行n列不断更新相加,来找最短径,注意最开始径长与转接路由设定:两个端没相邻,前者为∞,后者为0;重合的话两者都为0,即斜线为0

你可能感兴趣的:(通信网)