- 15
- 0
- 约2.76万字
- 约 55页
- 2021-11-04 发布于广东
- 举报
* 一开始用例子来讨论Bellman-Ford算法的运行。其中每轮循环采用什么顺序进行边的检查是任意的。 第一轮用动画讲。 第二轮让学生做。提炼出第一个idea:不必检查所有的边。 第三轮也让学生做。提示:显然只需要考虑c和e的“发出”边。显然,第四、五、六轮不必做了。引出第二个idea。 讲完了2个idea之后,给出伪码并讲解。着重指出,LIST可以实现这两个idea:只检查必要的边;且可以发现是否有必要继续(LIST为空意味着不会发生更新了) * 1)label-correcting算法中,站在每个顶点i的角度看,源点到i的距离是否更新,只取决于i的反向邻接点是否更新了。 2)反过来呢?站在每个顶点i的角度看,他到某个目的点d的最小距离是否需要更新,只取决于i的正向邻接点到d的距离标记是否发生了更新。 3)因此,只要路由器i的某个邻接点j告诉i它到其他路由器的距离(一个距离矢量),i就可以判断他到其他路由器的距离是否需要更新。 * * 应对负权重有两个困难:负圈检测和负权重。调用Bellman-Ford一次,就可以解决这两个问题。 用图来说明:采用这种权重变换后,得到的必是非负值。因为:如果是负值,就说明d(b)不是最短路距离,矛盾。 * 复杂度分析:假定权重为整数;最大权重为C 1)针对每个节点对,每轮检查需要检查n次(i,j不变,k有n种可能); 2)最多需要多少轮?最坏
原创力文档

文档评论(0)