首先简单介绍下最大路径问题:给定一个加权图,找到两点之间最短加权路径,本质上就是求两点之间哪条路径的权重和最小。有两种算法去做:Dijkatra和Bellman-Ford,后面几节课会专门讲这两个算法。

下面我们先来看看加权图中是怎么定义最短路径和一些数据结构的概念的:

其实主要就下面两个概念需要注意:

  • d(v):点v的当前权重值。
  • ∏(v):点v的最佳路径来源点。

(注:在权重图初始化时,除出发点s,其他点的权重都为无穷,只有达到它们后计算相应的权重,他们的当前权重才会改变,而最短路径就是为了找到各点最低的权重值。)

对于权重图中都是正权重来说,比较好找最短路径,但是如果权重图中有负值,可能会出现如下的负循环negative cycles问题,图中S->B其实就应该停止了,但B->D->C是个负循环,为了减低点B的当前权重,传统做法可能会使得最短路径陷入该负循环中,成为S->B->D->C->B->D->C->...(无限循环)。

之后的课讨论怎么解决这个问题,现在先让我们看下如果针对权重图都是正权重下,寻找最短路径的最直观做法是怎样的:

其实就是计算可达到某点的路径权重,如果大了,就进行relax edge操作,直到当前权重小于等于任何其他可达到路径的权重。但是实际中并不会用这种方法,因为它过于繁琐,特别是遇到下面这种指数权重图:

我这里不细讲,大概就是这种指数权重图,一旦放松了某个边,又会牵连其他边的当前权重,导致算法过于复杂。这个问题的关键就是如何挑选合适的边,而不是像上面这种遍历的方式挑选边。合理挑选边的方法主要在于下面的一个道理就是:最短路径的子路就是最短路径。

最新文章

  1. .NET基础拾遗(7)Web Service的开发与应用基础
  2. svn 版本迁移到 git 仓库
  3. 通过java反射,封装bean
  4. Tomcat8安装, 安全配置与性能优化
  5. 学习使用 jQuery & CSS3 制作照片堆栈效果
  6. Highcharts-3.0.6
  7. selendroid项目实战2--ruby下的TOAST定位
  8. 如何在Win10中启用和关闭管理员账户?
  9. DIV + CSS 盒子模型
  10. 使用chrome调试xpath
  11. MVC+MQ+WinServices+Lucene.Net
  12. 对html语义化的理解
  13. Logging 日志配置格式模板
  14. ES6删除对象中的某个元素
  15. The Little Prince-11/27
  16. eclipse与SVN 结合(删除SVN中已经上传的问题)
  17. [leetcode]721. Accounts Merge账户合并
  18. CommonCode升级:把不常用的Sqlite独立出去
  19. python基础之多线程锁机制
  20. 解决Cannot read property 'style' of null中样式问题

热门文章

  1. Dubbo部分知识点总结
  2. 多测师讲解 _requests安装问题解决_高级讲师肖sir
  3. ABAP 7.55 新特性 (一)
  4. 【C语言编程学习笔记】利用462字节代码实现雅虎logo ACSII 动画!
  5. 【图论】USACO07NOV Cow Relays G
  6. Pyrhon-OS库
  7. win8怎样才能启用administrator登录 别的用户也是如此
  8. B站弹幕爬取
  9. 这份算法攻略,我拿到了5个大厂的offer
  10. 洛谷 p6858 深海少女与胖头鱼 洛谷月赛 期望dp