最短路算法的证明_最短路算法(图论)精要.ppt

这篇博客探讨了最短路算法的多种方法,包括Dijkstra算法的变体和Suurballe算法。强调了在加性权重下求解问题的注意事项,如将权重设为浮点数。同时,介绍了A*算法的原理及其与Dijkstra算法的等效性。此外,还讨论了路由器的最短路径决策和链路状态协议在保持全网一致性中的作用,以及负权重和负圈对最短路问题的影响。
摘要由CSDN通过智能技术生成

* 1)描述这个问题。 2)启发学生:怎么变化Dijkstra算法来求解这个问题。 3)给出这个代码。 4)讨论:复杂度变了么? * 需要讲清楚这个问题与加性权重下的Dijkstra算法的关系。 记得提醒学生,做这个题一定要将权重设为float,要改代码。 * 1)问题描述 2)基本想法:先求一条最短路,然后删除所有该路径经过的边(保证链路分离);然后再求一条最短路。 3)问题是:这样做可能不完备(存在解却得不到);而且就算得到的了,也不一定是最短的。用图来说明。 4)Suurballe算法:先算最短路,然后路径上的边反向(不是删除),然后再求一条最短路;最后合并这两条路径,去掉重复的边。 5)两个难点:对边反向(原本就存在反向边怎么办?);以及路径的组合。 关于路径的组合:可以这样来解决。A)用边表示路径;B)遍历p1和p2,找到“共同”的边(其实2条反向的边);C)从p1和p2种去掉这些共同边,就得到了一些分段。D)这些分段分别编号,例如s(x,y)代表第x条路径(x只能取1或2)的第y个分段。E)按照顺序交替取两条路径上的分段来构造路径。例如s(x,1)+s(y,2)+s(x,3)+s(y,4)……,另一条路径为s(y,1)+s(x,2)+s(y,3)+s(x,4)。注意两条路径上的分段数目肯定是一样的。 * * 每次FindMin都从上一次找到最小的那个桶开始查找,碰到第一个非空的桶为止。 * 最好能做成这样:只有需要的时候才创建新的桶。 * * SF:正向的永久标记集合。SB:反向的永久标记集合。 最坏复杂度一样,但现实用例中双向Dijkstra算法往往更快。 * 难点1:Dijkstra算法代码的框架不变,但循环终止条件和循环体都要变化。 难点2:要增加一些数据结构。 难点3:循环终止后,要从所有找到的路径中拼凑出最短路。 * * * 为什么叫A*?原文中叫Algorithm A,由于它针对给定的heuristic能得到最佳解,所以称为A*。 --参见wikipedia 关于为什么等效: 更改权重后算得的距离标记(也就是排序的依据)为d’(b),对所有的节点来说,这样得到的距离标记与A*所要求的只差一个常数。所以是等效的。 在“尽量将宿点d的距离标记排在前面”这件事上,A*算法是最优的(在给定的启发式下界下)。实际中这个算法出奇地快。虽然其最坏复杂度有可能很差,甚至比Dijkstra还差(有人说是指数的)。参见wikipedia。 在其他应用中,还可以有其他的下界估计方法(比如B*和D*)。而且一般意义上的A*算法实际上允许在运行时以任意的启发式方法来得到下界。参见wikipedia。 * 路由器拿到一个IP包的目的地址,如何转发??转发表。地址与下一跳端口的映射。 如何决定转发表??看到目的地址的最短路。 怎样计算最短路??连路状态的扩散。 注意:每个路由器自己决定最短路,那么这种决定是否具有全网的一致性??只要连路状态不变化,就是的。因为加性原则。 什么时候会不一致??连路状态发生变化,但扩散还没有完成。 * 逐包转发;目的地址;转发表; 注意:决定出端口是看本路由器到目的地址的最短路是经过哪个端口;并非看源地址到目的地址的最短路怎么走。。。 * 先讲每个路由器如何生成其发布的信息; 然后是:洪泛; 最后,某个路由器拿到所有这些链路状态信息后,如何重构一个图。 * 问题1:换句话说,A把目的地址为F的包扔给了D,原因是A认为ADEF是最短路;但E做判决时认为ECF最短,结果走出的路径变成了ADECF? 答:不会。因为最短路上的路径也一定是最短路。 问题2:如果存在多条最短路,不就会产生不一致么? 答:这不是不一致,因为两条路径的权重是一样的。 问题3:如果两个路由器对拓扑的理解不同呢? 答:是的,这样会出现不一致。例如,D知道DE和DC权重为100,而A还以为该值为1。路径就会出错。因为如果A知道,它本可以走ABCF的。 但是,链路状态协议就是为了保证这种理解是一致的。 问题4:链路状态协议在任何情况下都能保证这种一致性么? 除非出现链路失效。 * * 1)负权重下,Dijkstra无法工作。 2)负权重有用么? 通信网中一般不会出现负权重,但是很多其他实际问题建模为最短路问题时,就会出现负权重。Robert Sedgewick在《Algorithms in Java》3rd Ed中(21.7节),就给出了一个例子。他将Hamilton路径问题转化为一个最短路问题,图中出现的权重就可能为负。 3)更糟的是,如果图中存在负圈,则最短路问题无法求解。 ?如果不强制要求解为简单路径(注意,Dijkstra算法求出的必然是简单路径),则不存在最短路,因为路径权重可以为负无穷。 ?如果要求解必须是简单路径,那么

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值