【DayDayUp】【算法_图_网络流_之一_增广路】
来源:互联网 发布:鲁滨逊漂流记游戏java 编辑:程序博客网 时间:2024/05/20 19:15
【坚持不能偷懒】
(概念简单说明,具体还请自行百度……)
网络流:
常见问题:最大流
一个图,有向图,边上有容量上限,许多点,起点S,终点E
从S到E,最多流量是多少
核心思想:
【增广路】【剩余图】【反向边】
朴素地说
我找完一条路了,把流量去掉
则加入【反向边】重新做图
做出的图就是【剩余图】
如果我还能找到一条流量不为0的路径
即是一条【增广路】
这条【增广路】的加入,使得流量更多
当无法找到【增广路】时,则为最优
什么是【反向边】
就是譬如我一条边是 A -> B
它能容纳 10 的流量
我已经在当前情况下,占用了8的流量
那么,我的某种更好的情况,或许需要让8变成76543210 或者 910
变成9 10比较容易,就是在剩余图中 A->B 10 改成 A->B 2
而如何【反悔】呢? 就是 B->A 原本没有(0) 改成 B->A 8
譬如
A -> B 10]B -> C 5]B -> D 5] C -> P 10]D -> P 10
那么我第一步,搜到一条 A,B,C,P 的 5 的流量
则图被更改为
A -> B 5]B -> C 0]B -> D 5] C -> P 5]D -> P 10
同时更新反向边
B -> A 5] C -> B 5]P -> C 5]
那么,解题过程就是
while 找到增广路 == true
更新图()
这个复杂度是多少呢(点为V,边为E)
每次找增广路,实际上是要搜尽的,也就是每条边来一次,E
网上说:“可以证明” 增广路的搜索次数不会超过 V * E
所以复杂度就是 O(V E^2) 还是很炸的 完全图最坏就是 V^5了
于是我们就要优化……
——瞎扯时间——
这个最多增广次数 V E 是咋个来的呢……
现在开始瞎扯,看能不能扯出来
思路一:
每次找到增广路,都会使得流量变大
如果一开始最小 是 某个 E(min)
最后最大的流量 是 ∑E(某些)
我的流量更新梯度是 E(min) 点点点 到 E(一坨)
这个上限是我源点S 和 汇点T 周围的流量和的最小值
就算都连上 也就是 V 个 单边的流量
好吧,扯不出来
思路二:
——瞎扯失败——
这个Blog上有对网络流的很专业很全面的讲解,感觉自己写的真是好low……
http://blog.csdn.net/fengchaokobe/article/details/7584781
- 【DayDayUp】【算法_图_网络流_之一_增广路】
- 【DayDayUp】【算法_图_哈密顿回路_之一_回溯法】(待补完)
- 【DayDayUp】【算法_图_强连通_之一_Kosaraju算法和Tarjan算法】
- 【DayDayUp】【算法_图_网络流_之三_最小费用最大流】(待补全)
- 【DayDayUp】【算法_图_欧拉回路_之一_Fleury (弗罗莱) 算法】
- 【DayDayUp】【算法_图_最短路_之一_Dijkstra和几种优化姿势】
- 【DayDayUp】【算法_小技巧之一_建图】
- PIGS(最大流_增广路算法)
- 【DayDayUp】【算法_图_网络流_之二_Dinic层次图与最小费最大流的概述】(待续)
- 【DayDayUp】【算法_搜索_A* 和 IDA*】
- 【DayDayUp】个人经验_Python_正则表达式_之一
- 最大流算法_最短增广算法
- ^_^
- ^_^
- ^_^
- ^_^
- *_&
- ...!@~....!@#....+_#%.
- ACM习题L-12
- struts 1
- Java获取视频文件时长
- 非常简单好看的JQuery弹出层
- 两个链表中的第一个公共节点
- 【DayDayUp】【算法_图_网络流_之一_增广路】
- 一步一步搭框架(asp.netmvc+easyui+sqlserver)
- noi-1702-字符替换
- uboot下run_main_loop中main_loop实现
- 前端页面性能参数搜集
- nyoj499 迷宫
- (0028)iOS 开发之Xcode使用技巧
- Linux 简单 git 使用教程
- 单片机的学习