解析Bellman-Ford算法求最短路径

标签: 解析 bellman ford | 发表时间:2014-02-01 04:07 | 作者:wingahi
出处:http://blog.csdn.net

上一篇博文已经说了用dijkstra算法来求图(有向图和无向图)的最短路径了,那么怎么还需要使用Bellman-Ford算法来求解最短路径问题呢?其实这两个算法有各自求解的限制条件:dijkstra算法不能求解包含负权的图;但是用矩阵来存储图的话,那么Bellman-Ford算法时间复杂度达O(n3),所以这也是一个限制。但是还有一个改良的Bellman-Ford算法,其时间复杂度只为O(n2),这个算法到后面再给出。

        下面说明下dijkstra算法和Bellman-Ford算法的求解,而dijkstra算法无法求解负权图的原因吧!请看下图(本图片来自百度文库 用户: 1107905594


          我可以从这个图中及其求解过程及其结果看到,dijkstra算法在求解带负权的图的最短路径是不合理的,因为它需要找的下一个点都必须是与自己相邻的并且路径最短的一个点,所以逐步迭代下去,最终他会忽略权为负值得边,比如图中的E(v0,v1)=7>E(v0,v2),因此,根据该算法的选边原则,它将会选择边E(v0,v1),所以就导致忽略了后面的E(v1,v2)=-2的边,这样一来就误求了v0->v2的最短路径,因为min(v0->v2)=2。到目前你也许明白了为什么dijkstra算法不适用求带负权的图了。
          现在就说下Bellman-Ford算法的基本步骤和基本思想。
  • 下Bellman-Ford算法基本思想
  •  Bellman-Ford算法的基本步骤

            1、首先将所求起点s到图中的各点距离用数组dist[n]存储起来,如果两边可达,则dist[i]=Edge[s][i],否则则灵dist[i]=maxm,(maxm为一个无穷大值,根据需要设定数值),(注意:这里假设不允许顶点自身可达)。

            2、然后通过通过循环n-2次找出含有最多含有n-1条边的路径的最小路径数组path[u]=v,这个数组也是通过保存当前顶点v的最短路径前缀u。最后也是通过读取前缀得出一条路径。由于第一步将第一条边已经保存下来,所以这里只须循环n-2次就可以了。这一步很关键,因为这一步是说怎么去找出每个节点的最短路径的呢?然而,在n-2次循环中,每循环一次,他都将保存好当前节点v离始点的最短距离的前缀u,所以一维数组path[n]保存了图中所有可达节点到节点v的最短路径前缀。最后就得到结果path[n]。

           代码的编写就不写了,借别人的用一下。





本博文翻译于一 百度文库用户,有侵权之处请见谅,通知本人删除。

作者:wingahi 发表于2014-1-31 20:07:11 原文链接
阅读:0 评论:0 查看评论

相关 [解析 bellman ford] 推荐:

解析Bellman-Ford算法求最短路径

- - CSDN博客推荐文章
上一篇博文已经说了用dijkstra算法来求图(有向图和无向图)的最短路径了,那么怎么还需要使用Bellman-Ford算法来求解最短路径问题呢. 其实这两个算法有各自求解的限制条件:dijkstra算法不能求解包含负权的图;但是用矩阵来存储图的话,那么Bellman-Ford算法时间复杂度达O(n3),所以这也是一个限制.

Ford 和 Bug Labs 合作,把原先的 SYNC 系統做得更棒

- SotongDJ - Engadget 中文版
又要再說一次:這幾天對 Ford 來說真的是很重要. 他們先在法蘭克福發表電動腳踏車和雲端車的概念款,然後又在舊金山的 TechCrunch Disrupt 宣佈他們與 Bug Labs 合作. 這次合作的第一個產物就是 OpenXC 平台,用來取代先前的 Ford SYNC 平台. OpenXC 能夠整合其他副廠的軟硬體擴充,例如新的音樂播放介面、行車安全設備或是環境檢測系統等等.

Ford 的概念電動腳踏車 E-Bike Concept 車把可以裝 Galaxy S II,騎車更有智慧!

- lost sheep - Engadget 中文版
Ford 這次在法蘭克福連續讓我們驚艷兩次,先是四輪的 Evos Concept,現在又有了這台兩輪的 E-Bike Concept 概念腳踏車. 它的前輪配備電動馬達,動力來源是 9.2Ah 的電池,單靠它就能讓時速高達每小時25公里. 當然,你也可以用踩踏的方式透過碳纖維車鏈帶動後輪,讓車子往前跑.

Ford 的概念电动脚踏车 E-Bike Concept 车把可以装 Galaxy S II,骑车更有智慧!

- Chinaxingwei - Engadget 中国版
Ford 这次在法兰克福连续让我们惊艳两次,先是四轮的 Evos Concept,现在又有了这台两轮的 E-Bike Concept 概念脚踏车. 它的前轮配备电动马达,动力来源是 9.2Ah 的电池,单靠它就能让时速高达每小时25公里. 当然,你也可以用踩踏的方式透过碳纤维车链带动后轮,让车子往前跑.

解析DynamoDB

- - 技术改变世界 创新驱动中国 - 《程序员》官网
DynamoDB是Amazon最新发布的NoSQL产品. 本文在介绍DynamoDB特性的基础上,将其与SimpleDB、Cassandra和MongoDB进行了分析和比较. 在NoSQL概念日益火爆的今天,市场上又增加了一个重量级的NoSQL产品—DynamoDB,它是Amazon AWS于2012年1月18日发布的.

xml sax解析

- - 移动开发 - ITeye博客
最近一直在做接口,主要用对xml的解析用的是sax,下面我对sax的几种写法做了一个测试:. System.out.println("耗时:"+(end-start));. System.out.println("当前 Java 虚拟机中的使用内存量:" + (freeMemory01-freeMemory02) + " 字节");.

mysql explain 解析

- - SQL - 编程语言 - ITeye博客
Mysql Explain 详解. 例如: explain select * from t3 where id=3952602;. 二.explain输出解释. | id | select_type | table | type  | possible_keys     | key     | key_len | ref   | rows | Extra |.

java解析APK

- - Linux - 操作系统 - ITeye博客
1、结合安卓提供apktool工具,用java执行cmd解析命令获取apk信息. 2、利用相关jar包里的集成方法解析apk. 这里只给出第二种方法,因为第一种方法在linux服务器下会出现不在控制范围之内的结果. // 将解压文件对象转列举对象. // 获得名为AndroidManifest.xml的文件.

sql 解析器

- - zzm
// parser得到AST. // 将AST通过visitor输出. 已有 0 人发表留言,猛击->> 这里<<-参与讨论. —软件人才免语言低担保 赴美带薪读研.

java解析xml数据---sax解析器

- - ITeye博客
下面是handler解析数据的方法. private HashMap map = null;// 存储单个解析的完整对象. private List> list = null;// 存储全部的解析对象. private String currentTag = null; // 正在解析的元素的标签.