美文网首页数据结构和算法分析
最小生成树、最大流、最小费用最大流问题精简

最小生成树、最大流、最小费用最大流问题精简

作者: gis11 | 来源:发表于2019-11-28 13:54 被阅读0次

最小生成树:

 简单来说即图中一个使各点连通的N-1个边的子图,当边权和最小时为最小生成树。

经典Prim,Kruskal算法:

  • \color{blue}{(1) Prim:(从点出发,贪婪最小)}
  1. 创建顶点集合V,边集合E
  2. 初始化V随意取一点u,E为空
  3. 取与u连接最小的权边与点v,将(u,v)加入E
  4. 继续重复,取与V中现有点所连接的最小权边,加入到E
  5. 直到V中包括了所有顶点

\color{red}{通俗解释:}每次判断根据点集中现有点,与其他点连接的权值,找最小的权边。
比如V中有U1,U2两点,从整个图中找到与U1或U2所连接的最小权边,并把这个权边的顶点加到V中,更新V变成U1,U2,U3,继续重复。

  • \color{blue}{(2) Kruskal:(分解聚类(归并)思想)}
  1. 边权排序,各顶点可编不同号
  2. 选最小,将两顶点标号归并为一类即同号化
  3. 除去上一个最小,再选最小,判断标号,不同就把所有标号1的点归类到标号2上,相同就不操作继续执行。
  4. 直到所有顶点为同标号。

\color{red}{通俗解释:} 通过权值的排序,将权值边从小到大,一步步通过顶点的标号判断归到一起,到最后一定是满足连通无回路条件下的最小权生成树。


最大流问题:

 在满足每个边容量限制情况下,流通在图中的最大权值和。

经典的FF,EK,Dinic算法:

  • \color{blue}{(1) FF:(Ford-Fulkerson DFS搜索):}
  1. DFS找出一个有效路径
  2. 生成残余网络,带反向边
  3. 再在残余图基础上DFS有效路径
  4. 直到找不到有效路径
  5. 把每次的最小权值压进每个边中即最大流

\color{red}{通俗解释:} 深度优先搜索,以最大流最小割为理论依据,残余图无增广路径则最大为判断依据,一直找。 增广路径就是一个有效可通路径的专业叫法而已。

  • \color{blue}{(2) EK:(Edmond-Karp BFS搜索):}
     与FF算法区别就在于搜索方式,变成了BFS,为什么变成BFS就更快了呢,由于FF搜索是随机的,我们可以把整个图看成无权距离图,或者说每段距离为1的图,BFS即是无权图最短距离的算法。BFS方式下只要搜到终点就是最短的。所以这个方法也可有人称作最短路径搜索法。

  • \color{blue}{(3) Dinic:(层次优化):}
     此算法在EK的基础上,加了一步层次优化,在生成残余网络后层次优化,层次优化是一个分类过程,通过将各点与起点的最短距离或说成相差的最小边数为依据,以BFS方式分成距离起点1条边的,2条边的,3条边的等等,将分成的各类中,相同类中的的边去掉。再去做一次DFS搜索增广路径。 然后生成残余网络再优化,如此循环,每次都全部更新,直到终点不在层次图内结束。


最小费用最大流:

 最小费用最大流问题其实十分简单,抽象化后,我们会明显发现,其实就是把之前无权图当作有权图,权值为单位费用价值,用过这个有权的图找最短路径,这就涉及最短路径算法了,一般用SPFA,因为有反向边,要计算负权问题。找到最短路径后,依然通过生成残余网络方式,进行流的迭代增加生成最大流。 每次都在费用权最小条件下向边压进流,最后得到的就是最小费用条件下的最大流。

相关文章

网友评论

    本文标题:最小生成树、最大流、最小费用最大流问题精简

    本文链接:https://www.haomeiwen.com/subject/cucbwctx.html