zoukankan      html  css  js  c++  java
  • 多源最短路径 – Floyd-Warshall Algorithm

    介绍:

      是解决任意两点间的最短路径的一种算法,可以正确处理有向图或负权(但不可存在负权回路)的最短路径问题,同时也被用于计算有向图的传递闭包。

      Floyd-Warshall算法的时间复杂度是O(N3),空间复杂度O(N2)。

    原理:

      Floyd-Warshall算法的原理是动态规划。

      用fk(i,j)表示从 i 到 j 只以(1...k)集合中的节点为中间节点的最短距离,这样从fk-1(i,j)推出fk(i,j)就很容易了。

      1° 若最短路径经过点k,fk(i,j) = fk-1(i,k) + fk-1(k,j)

      2° 若最短路径不经过点k,fk(i,j) = fk-1(i,j) 

      因此fk(i,j) = min(fk-1(i,j)  ,  fk-1(i,k) + fk-1(k,j))。

      在实际算法中,为了节约空间,可以直接在原来空间上进行迭代,这样空间可降至二维。

    算法描述:

      

     其他作用:

      在有向图中,有时不必关心路径的长度,而只关心每两点间是否有通路,则可以用1和0分别代表“连通”和“不连通”。这样除了预处理需要做少许调整外,主算法只需把“d[i][j] = min( d[i][j] , d[i][k] + d[k][j] )”改成“d[i][j] = d[i][j] || (d[i][k] && d[k][j])”。这样的结果称为有向图的传递闭包。

      还可以求最小环。

  • 相关阅读:
    rsyslog服务日志收集配置
    Python urllib2 发送HTTP Request
    Jenkins版本回滚
    C++算法的40个高频面试问题集锦
    Linux添加自启动daemon service
    python爬虫随机设备信息生成模板
    selenium配置有账号密码验证的代理
    app脱壳后多个dex合并成一个
    webpack优化系列-多进程打包thread-loader
    AtCoder abc158_f
  • 原文地址:https://www.cnblogs.com/lfri/p/9535874.html
Copyright © 2011-2022 走看看