Dinic的几种复杂度
学了那么久网络流才发现自己不知道 Dinic 算法的一个在各边容量均为 的网络时复杂度上的结论。我说为啥学术社区那题优化建图复杂度是对的呢……
以下均认为使用了当前弧优化与多路增广。
以下认为 为点数, 为边数,。
以下考虑的复杂度均为 ,这个显然是一个合法上界。
一般网络:
对于一般网络,增广轮数显然为 ,因为每轮终点层数递增。
对于单轮增广复杂度,在不限制容量范围时,不会超过 :对于每个状态的当前弧,只会消耗 的时间找到一组合法增广路;而当前弧状态数不会超过 。
因此,对于一般网络,其复杂度为 。
关于值域的增广轮数上界:
假设每个点 的出边容量和为 ,入边容量和为 ,定义
则增广轮数不会超过 。
如果在 轮内已经结束,显然就是 的。
假设已经经过了 轮,则到达汇点的增广路长度,也即在残量网络上的最短路长度,接下来不会低于 。
假设接下来几轮中我们还要流 条增广路,则由于除源汇外每个点最多属于 条有流量的路径,在当前残量网络中存在一种取 条路径(不是增广路)的方案。于是残量网络上起点到终点最短路为 的。
于是,,所以最多再流 轮,增广轮数即为 的。
因此增广轮数是 的。
各边容量均为 的网络:
接下来我们考虑的是各边容量均为 的网络。
对于单轮增广复杂度,考虑到每条边会被访问不超过一次,单轮复杂度为 的。
增广轮数是 的:。
增广轮数是 的:这个比较高明,推导比较复杂,咕了。
因此,对于各边容量均为 的网络,其复杂度为 。
单位网络:
单位网络是一类特殊的各边容量均为 的网络,满足除源汇外各点入度不超过 或出度不超过 。
显然单轮增广复杂度还是 的。
考虑增广轮数,,因此增广轮数是 的。
因此,对于单位网络,其复杂度为 。
在稀疏图、稠密图上的分析
稀疏图() | 稠密图() | |
---|---|---|
一般网络 | ||
各边容量均为 的网络 | ||
单位网络 |
在稀疏图上,各边容量均为 的网络的效率比较明显, 可以取到 左右。
在稠密图上,三者的差异就更大了。(不过复杂度一般卡不满)
本文来自博客园,作者:myee,转载请注明原文链接:https://www.cnblogs.com/myee/p/dinic-algorithm.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App
· 张高兴的大模型开发实战:(一)使用 Selenium 进行网页爬虫