单源最短路径的基本算法 -- 算法导论笔记

来源:互联网 发布:c语言函数的声明 编辑:程序博客网 时间:2024/06/06 03:31

通用的Bellman-Ford:

        特点:能处理存在负权边的情况,并能判断是否存在负权回路。可以用在差分约束系统问题的求解,有解情况下最短路径是一组可行解。效率低,O(VE)。

        过程:做 顶点数(V) - 1 次对所有边的松弛操作,也可以加一个flag检查到没有需要松弛的时候便结束,快一点。再检查一遍是否有边还能做松弛操作(把松弛操作比较部分反过来做判断条件),若能则说明有负权回路。

            注:负权回路很多时候能代表存在一些不合理的性质(让人可以钻空子的bug),比如交易系统可以交易一圈(即最终交易回初始物品)之后得到多的钱poj1860,不合理的虫洞旅行见到旅行前的自己(在科幻片中类似场景层出不穷)poj3259,这种情况就可以用该算法来检测。也就是说,该算法不仅可以用来求存在负权边的最短路,还可以用来检测是否存在负权回路。


dag(有向无回图)(directed acyclic graphs):

        特点:对dag图能做,能处理负权边,效率高,O(V+E)。可用于 求PERT图(program evaluation and review technique chart,程序评价和审查技术图)中的关键路径(关键路径指通过dag的一条最长路径),由于PERT图反应工作的依赖关系,必然是dag。

        过程:拓扑排序,按序对边做一次松弛操作。


Dijkstra:

        特点:不能处理负权边,效率较高(效率取决于优先队列的实现方式,二叉堆实现时为O((V+E)lgV))。

        过程:类似BFS,不过把普通的队列换成了优先队列。

                  

DIJIKSTRA(G,w,s)//initialinitialize_single_source(G,s)//bfsS <- empty //work as color[]Q <- V[G]while Q != empty      do u <- extract_min(Q)         S <- S + {u}         for each v from Adj[u]               do RELAX(u,v,w)

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 无法读取源文件或磁盘怎么办 文件中转站未安装上传控件怎么办 手机外国网址网速太差怎么办 istpng里显示不出图片怎么办 电脑上保持登录状态后怎么办 电脑打游戏闪退怎么办 实训老师教不好怎么办 善心汇损失的钱怎么办 去陌生的地方怕传销怎么办 被执行人不提供财产线索怎么办 宽带ip地址改了怎么办 移动宽带恢复出厂设置了怎么办 移动100兆网速慢怎么办 手机显示无法解析dns地址怎么办 台式电脑宽带连接不上怎么办 电信宽带账号登录密码忘记了怎么办 电信校园宽带超时了怎么办 宽带连接账号密码忘了怎么办 移动宽带路由器上不了网怎么办 移动宽带太卡了怎么办 电信adsl密码忘记了怎么办 移动宽带无法连接网络怎么办 移动宽带电视无信号怎么办 联通网线故障电话打不通怎么办 w10系统ip地址错误怎么办 移动流量太贵了怎么办 修改wifi密码ip地址怎么办 苹果6s接电话声音小怎么办 k歌录音器失败怎么办 想报警但不能说话怎么办 微粒贷要家人电话怎么办 4g网络信号差怎么办 手机移动网络信号不好怎么办 移动的4g网络差怎么办 4g移动网络慢怎么办 房间没有4g网络怎么办 oppo显示2g网络怎么办 oppo只有2g网络怎么办 移动卡4g网络慢怎么办 易信专线电话用完了怎么办 手机拨打电话时黑屏怎么办