相比于矩阵乘法,floyd巧妙利用了最短路具有最优子结构的性质,即最短路径的子路径也是最短路径,得到以 d i j ( k ) d_{ij}^{(k)} dij(k)​(为从i到j的一条中间节点全部取自集合 { 1 , 2 , . . . , k } \{1,2,...,k\} {1,2,...,k}的一条最短路径权重)为状态的转移方程,减少每次迭代的计算量,而且迭代过程只需保存两个矩阵 D ( k ) D^{(k)} D(k)和 D ( k + 1 ) D^{(k+1)} D(k+1),这也允许我们方便地进行手工验证。

求 D i j ( k + 1 ) D^{(k+1)}_{ij} Dij(k+1)​时,仅对应floyd算法的一步松弛 D i j ( k + 1 ) = m i n ( D i j ( k ) , D i k ( k ) + D k j ( k ) ) D^{(k+1)}_{ij}=min(D^{(k)}_{ij},D^{(k)}_{ik}+D^{(k)}_{kj}) Dij(k+1)​=min(Dij(k)​,Dik(k)​+Dkj(k)​),就是找到前一个矩阵的第 i i i行第 k + 1 k+1 k+1个元素以及第 j j j列第 k + 1 k+1 k+1个元素求和和 “十字” 中心元素比大小。


举个例子,如图, D 45 ( 1 ) D_{45}^{(1)} D45(1)​更新为 -2,因为 D 45 ( 0 ) > D 4 k ( 0 ) + D k 5 ( 0 ) D_{45}^{(0)}>D_{4k}^{(0)}+D_{k5}^{(0)} D45(0)​>D4k(0)​+Dk5(0)​,此时 k = 1 k=1 k=1,找到 D 41 ( 0 ) D_{41}^{(0)} D41(0)​和 D 15 ( 0 ) D_{15}^{(0)} D15(0)​.

由于矩阵共有 n 2 n^2 n2个元素,floyd做到了 O ( n ) O(n) O(n)求每个元素,按老师的话说,别人很难想到,因此,前面的矩阵乘法方法叫矩阵乘法求全源最短路,而这个算法用floyd的名字命名。

floyd-warshall算法浅理解相关推荐

  1. C++floyd warshall算法求最短路径(附完整源码)

    C++floyd warshall算法求最短路径 floyd warshall算法求最短路径的完整源码(定义,实现,main函数测试) floyd warshall算法求最短路径的完整源码(定义,实现 ...

  2. Floyd Warshall算法

    Description: 描述: This is a very popular interview problem to find all pair shortest paths in any gra ...

  3. WarShall算法求传递闭包(可达矩阵)

    最近在复习离散数学,顺便记录记录自己对warshall算法的理解. 1.传递闭包(可达矩阵) 传递闭包是有向图的一个重要性质,它指的是在有向图中从任意一个节点出发,可以到达的所有节点的集合.在某些应用 ...

  4. 浅谈Warshall算法

    Warshall算法 ​ 今天的离散数学课后作业里有需要求传递闭包的题目,不懂上课没听,本来想用matlab偷一下懒,但是搜到了Warshall算法,故参考百科及其它博客后写水篇博客. 传递性 ​ 了 ...

  5. 怎么使用计算机算法,浅谈如何在用计算机来更好的实现Floyd算法

    [摘 要]本文主要介绍了数学建模中的一个常用的方法(Floyd算法).我们首先介绍了邻接矩阵的定义.其次,阐述了Floyd算法的具体内容以及Floyd算法的改进.最后,给出了Floyd算法的广泛应用, ...

  6. 【算法】弗洛伊德(Floyd)算法

    这个算法主要要弄懂三个循环的顺序关系. 弗洛伊德(Floyd)算法过程: 1.用D[v][w]记录每一对顶点的最短距离. 2.依次扫描每一个点,并以其为基点再遍历所有每一对顶点D[][]的值,看看是否 ...

  7. (转载)机器学习知识点(十五)从最大似然到EM算法浅解

    从最大似然到EM算法浅解 机器学习十大算法之一:EM算法.能评得上十大之一,让人听起来觉得挺NB的.什么是NB啊,我们一般说某个人很NB,是因为他能解决一些别人解决不了的问题.神为什么是神,因为神能做 ...

  8. EM从最大似然到EM算法浅解

    从最大似然到EM算法浅解 zouxy09@qq.com http://blog.csdn.net/zouxy09 机器学习十大算法之一:EM算法.能评得上十大之一,让人听起来觉得挺NB的.什么是NB啊 ...

  9. 智能算法浅介----模拟退火,遗传算法,禁忌搜索,神经网络等

    本文讲的过于笼统,如果想真正理解,请参考: 1模拟退火 2遗传算法 3禁忌搜索 智能算法浅介----By cooler 一个比方 在工程实践中,经常会接触到一些比较"新颖的算法"如 ...

最新文章

  1. 在PHP中模拟asp的response类
  2. java cdata xml 解析,如何解析lt;![CDATA []]gt;的XML
  3. Ubuntu16.04下使用ufw保护docker容器
  4. 命名空间“Microsoft.Office”中不存在类型或命名空间名称“Interop”(是否缺少程序集引用?...
  5. 深入jvm虚拟机第4版_深入理解JVM虚拟机
  6. CentOS下编译64位的libpython2.6.so.1.0库
  7. js学习笔记 chapter5 引用类型
  8. 虚拟机设计与实现:以jvm为例 pdf_Java虚拟机:Jvm概念和原理详解以及GC机制的分析...
  9. 深入理解 Hive 分区分桶 (Inceptor)
  10. 【微信小程序开发】 踩坑 抽奖幸运大转盘 完美实战
  11. 计算机黑屏但是有鼠标,电脑黑屏有鼠标箭头怎么办
  12. SpringBoot使用快递鸟进行电子面单的获取以及打印
  13. 新浪博客服务器是不是在维护,新浪博客是不是又在升级了?
  14. java gzip rest_使用restclient或postman发送gzip数据
  15. 月薪2300深圳流水线女工,逆袭为年薪80万谷歌工程师,又因疫情失业:我绝不轻易认输...
  16. 先有鸡还是先有蛋?先有操作系统,还是先有汇编器?(对计算机本质的探讨)
  17. OSChina 周四乱弹 ——潘金莲告西门庆
  18. (二)树莓派系列教程:树莓派4B手动连接wifi,远程控制。命令行界面、桌面界面
  19. 超级详细利用Vmware部置XP虚拟机
  20. LintCode Find the Duplicate Number

热门文章

  1. Spring学习笔记(二十三)——实现网站微信扫码登录获取微信用户信息Demo
  2. 【微信小程序】选择器组件picker
  3. elasticsearch最大节点数_记录 Elasticsearch 的 maximum shards open 问题
  4. iOS程序模块化设计
  5. 学习与尝试 --> 事件风暴
  6. 一种实用的笑脸检测方法
  7. 傅里叶变换与小波分析
  8. Android 实现微信,QQ的程序前后台切换:back键切换后台;点击通知栏恢复前台。
  9. windows10 系统配置nginx文件服务器
  10. 界面组件——按钮(Button)与图片按钮(ImageButton)