dijkstra,bellman-ford,floyd分析比较
http://www.cnblogs.com/mengxm-lincf/archive/2012/02/11/2346288.html
其实我一直存在疑惑是什么导致dijkstra不能处理负权图?
今日偶见某大牛说一句“dijkstra选定一个节点后节点值不在改变”,方才大悟。
本质上就是dijkstra选点方式导致的(即贪心),只针对目前的情况作出最好的判断
1)在非负权图中这点是没有错的
2)在负权图中就出错了,如
0 2 4
2 0 -3
4 -3 0
为什么呢?
证明dijkstra可行的最重要定理:即当i被选中时,dist(i)=min{w(s->i)}
定理证明:若不存在一个节点j可以松弛i,那么显然定理成立,否则必存在某一节点j,dist(i)>w(j,i)+dist(j),那么由于在非负权图中所以w(j,i)>0,则dist(i)>dist(j),那么在选择i之前j一定已经被选走,由此推出矛盾,定理证毕。由定理可知贪心在此的正确性。
看到前面证明中关键点(红字处),如果在负权图中那么w(j,i)>0就不一定成立,则定理也就不成立了,贪心也必然是错误的。
再看bellman-ford,假设图G存在最短路径a->b->c->d
循环松弛:第一次找到a->b
第二次找到a->b->c
第三次找到a->b->c->d
但是注意图G至少存在1条最短路,第几次循环松弛就是同时确定所有最短路的第几个节点(注意是第几个节点而不是具体的哪一个点),也就是说在bellman-ford的操作中无法再某一时刻确定某一个节点的dist是最短路径值,但是可以确定当n-1循环松弛后所有最短路一定确定了,因为图G最长的最短路其边数一定小于等于n-1,所以从一条最短路的角度看n-1次松弛后最短路径一定确定了。
再看bellman-ford的负权回路检验,dist(i)>dist(j)+w(j,i)。
为什么这个式子成立即有负权回路。显然若是不存在负权回路那么根据最短路的性质上式不可能成立,因为经过n-1循环松弛所有最短路都已确定那么dist是原点到个点的最短距离,根据最短路的最优子结构,dist(i)<=dist(j)+w(j,i)。
简证:
显然若dist(j)不是最后一轮松弛才出现,则在下一轮松弛中会使dist(i)更新,那么就不会出现上式,那也就是说i必须在以j为终点的最短路中,s->i->j,如果没有i,则dist(j)不可能在最后一轮松弛中才出现,现在可以发现有一个循环i->j,j->i,且这个循环使j的值不断减小,那么这个循环只能是负权的,证毕。
注意dist(i)>dist(j)+w(j,i)可行前提条件是dist是最短路径,由于dijkstra在负权图的无法得出正确最短路径所以无法使用该使检查是否存在负权回路。
floyd可以检查回路(无论正负)
但是floyd的负权检查可以简单一点,即dist[i][i]<INF,判断i终值是否小于初始值,因为若存在负权回路那么必有至少一个点其值在n次循环松弛后由于负权回路的原因小于其初始值。注意这种简化检验只适合于问题:原点不确定的图中是否存在负权回路。同理dist[i][i]>INF,判断i终值是否大于初始值,判断正权回路。
dijkstra,bellman-ford,floyd分析比较的更多相关文章
- 图论——最短路径 Dijkstra算法、Floyd算法
1.弗洛伊德算法(Floyd) 弗洛伊算法核心就是三重循环,M [ j ] [ k ] 表示从 j 到 k 的路径,而 i 表示当前 j 到 k 可以借助的点:红色部分表示,如果 j 到 i ,i 到 ...
- ACM/ICPC 之 最短路径-Bellman Ford范例(POJ1556-POJ2240)
两道Bellman Ford解最短路的范例,Bellman Ford只是一种最短路的方法,两道都可以用dijkstra, SPFA做. Bellman Ford解法是将每条边遍历一次,遍历一次所有边可 ...
- poj1860 bellman—ford队列优化 Currency Exchange
Currency Exchange Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 22123 Accepted: 799 ...
- PKU 1932 XYZZY(Floyd+Bellman||Spfa+Floyd)
题目大意:原题链接 给你一张图,初始你在房间1,初始生命值为100,进入每个房间会加上那个房间的生命(可能为负),问是否能到达房间n.(要求进入每个房间后生命值都大于0) 解题思路: 解法一:Floy ...
- Bellman - Ford 算法解决最短路径问题
Bellman - Ford 算法: 一:基本算法 对于单源最短路径问题,上一篇文章中介绍了 Dijkstra 算法,但是由于 Dijkstra 算法局限于解决非负权的最短路径问题,对于带负权的图就力 ...
- uva 558 - Wormholes(Bellman Ford判断负环)
题目链接:558 - Wormholes 题目大意:给出n和m,表示有n个点,然后给出m条边,然后判断给出的有向图中是否存在负环. 解题思路:利用Bellman Ford算法,若进行第n次松弛时,还能 ...
- C++编程练习(11)----“图的最短路径问题“(Dijkstra算法、Floyd算法)
1.Dijkstra算法 求一个顶点到其它所有顶点的最短路径,是一种按路径长度递增的次序产生最短路径的算法. 算法思想: 按路径长度递增次序产生算法: 把顶点集合V分成两组: (1)S:已求出的顶点的 ...
- 最短路径——Dijkstra算法和Floyd算法
Dijkstra算法概述 Dijkstra算法是由荷兰计算机科学家狄克斯特拉(Dijkstra)于1959 年提出的,因此又叫狄克斯特拉算法.是从一个顶点到其余各顶点的最短路径算法,解决的是有向图(无 ...
- Bellman—Ford算法思想
---恢复内容开始--- Bellman—Ford算法能在更普遍的情况下(存在负权边)解决单源点最短路径问题.对于给定的带权(有向或无向)图G=(V,E),其源点为s,加权函数w是边集E的映射.对图G ...
- 【转载】Dijkstra算法和Floyd算法的正确性证明
说明: 本文仅提供关于两个算法的正确性的证明,不涉及对算法的过程描述和实现细节 本人算法菜鸟一枚,提供的证明仅是自己的思路,不保证正确,仅供参考,若有错误,欢迎拍砖指正 ----------- ...
随机推荐
- HDOJ2009求数列的和
求数列的和 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submi ...
- 每天一道LeetCode--326. Power of Three
Given an integer, write a function to determine if it is a power of three. Follow up:Could you do it ...
- NDIS IM 驱动那些事情
最近不知道为什么开始学习windows NDIS驱动开发,用的是寒江独钓的例子,其实他的改的代码也就一点点,说的有用的东西也就那么多,不过还是感谢他出了这么一本书,不然这真的就没有一本稍微好一点的书籍 ...
- Excel Operation
在日常工作中, 常常需要收集统计一些数据, 然后整理到excel, 这种重复性的操作可以自己写个工具来实现. 采用HtmlUnitDriver 访问页面, 抓取数据, 再把数据列表通过调用POI放到e ...
- PHP学习笔记 - 进阶篇(9)
PHP学习笔记 - 进阶篇(9) 图形图像操作 GD库简介 GD指的是Graphic Device,PHP的GD库是用来处理图形的扩展库,通过GD库提供的一系列API,可以对图像进行处理或者直接生成新 ...
- 多项分布(multinominal distribution)
简介 更一般性的问题会问:“点数1~6的出现次数分别为(x1,x2,x3,x4,x5,x6)时的概率是多少?其中sum(x1~x6)= n”.这就是一个多项式分布. 定义 把二项分布推广至多个(大于2 ...
- 【转】 c++拷贝构造函数(深拷贝,浅拷贝)详解
c++拷贝构造函数(深拷贝,浅拷贝)详解 2013-11-05 20:30:29 分类: C/C++ 原文地址:http://blog.chinaunix.net/uid-28977986-id-3 ...
- php入门单引号与双引号区别
[1]单引号和双引号在处理变量的时候做法: 括在双引号内的变量会解释出值,但是括在单引号内则不做处理,直接输出: <?php $var = 'my name is huige'; echo &q ...
- psp系统需求分析
软件开发方向“PSP系统”软件需求规约 目录 1 引言... 4 1.1 目的... 4 1.2 文档格式... 4 1.3 预期的读者和阅读建议... 4 1.4 范围... 5 1.5 术语... ...
- 【转】How to view word document in WPF application
How to view word document in WPF application (CSVSTOViewWordInWPF) Introduction The Sample demonstra ...