博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
对最大流算法Dinic的研究与理解
阅读量:5959 次
发布时间:2019-06-19

本文共 750 字,大约阅读时间需要 2 分钟。

        早上困得不行,坐在电脑面前一直想睡觉。跑到教室外面的走廊上看《数据结构与算法》(java语言版)对Dinic算法的讲解。

       其实这个算法理解起来不难。当然还没有编程实现,希望不会被认为站着说话不腰疼。  我的理解就是:不停的分层,然后不停的按层寻路!

       分层:就是从汇点开始,所有与汇点相邻的点记录其层次为1,然后遍历整个层次为1的点,找与其相邻的点,记其层次为2……直到找到源点为止。所以很容易看出来,这必须用BFS搜索整个图。

        寻路:按层次找出所有连接源点到汇点的路径。当然每找到一条就需要把这个层次中路径的流量更改。表示这条路已经有人买断了 呵呵 !一般而言,至少能找到一条满足条件的路径!如果符合条件的路已经全部找完,你需要做的很简单,再分层!然后再寻路。为了快速寻路,当然会用到DFS算法。

       如果那一次分层后,你找不到路了,那么恭喜你!整个算法走到终结!可以回家吃饭了 呵呵 ……

            所以书上会说:Dinic算法是BFS和DFS的综合运用!学了这么多天的图论算法过后,我终于渐渐能理解:“DFS和BFS是整个图论算法的基础”这句话了!无论是求最短路的Dijkstra,Bellman-Ford 还是求最小生成树的Prime、Kruskal ,或者求二部图匹配的Hungarian,或者求最大流的2F、Dinic 都是基于图的搜索,在此基础上增加一些搜索的条件或者过滤一些点而已!这里需要提一下的是 Floyd算法可能有些另类,但我们总需要一些与众不同的声音的存在吧!而且这种跳出框框的思维是很值得珍视的 !

  有一个问题:我用2F算法实现并没有出现书上所说的小流量增量的循环。难道是我的2F基因突变了? 所以弄完2F我就直接跳到了Dinic,没有去研究EK算法了!先就写到这里,下去把算法实现再说吧!

转载地址:http://vlkax.baihongyu.com/

你可能感兴趣的文章
Android开发学习总结(五)——Android应用目录结构分析(转)
查看>>
[PHP]PHP rpc框架hprose测试
查看>>
Atom 编辑器系列视频课程
查看>>
C#三种定时器
查看>>
范数 L1 L2
查看>>
协同过滤及大数据处理
查看>>
Java8 本地DateTime API
查看>>
[原][osgearth]osgearthviewer读取earth文件,代码解析(earth文件读取的一帧)
查看>>
完美解决html中select的option不能隐藏的问题。
查看>>
推荐5大开源工具,用于开发Kubernetes项目
查看>>
制定2015年的移动开发策略
查看>>
JPA 2.2改进了易用性
查看>>
从蚂蚁金服实践入手,带你深入了解 Service Mesh
查看>>
24周年,“常青树”Delphi发布新版本10.3.1
查看>>
7. 从数据库获取数据- 从零开始学Laravel
查看>>
阿里百川码力APP监控 来了!
查看>>
使用dotenv管理环境变量
查看>>
温故js系列(11)-BOM
查看>>
Vuex学习
查看>>
bootstrap - navbar
查看>>