Dinic算法的复杂度分析及证明

本文详细分析了Dinic算法在不同图类型下的复杂度,包括一般图的O(n^2m)、单位图的O(nmn)以及边容量为1的图的O(min{n^3/2, m^(2/1)})。通过对dfs增广过程的探讨,解释了算法运行时间的上界,并引用了相关文献作为理论支持。" 79490581,7136635,Java使用pdfdom解析PDF为HTML并提取Json数据填充Table,"['PDF转换', 'Java', '前端开发', 'jQuery']

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一般图

复杂度主要取决于dfs增广的过程。

将dfs部分的复杂度分成两部分来分析:1)修改增广路上边的流量。至多会增广 m m m次,一条增广路的长度至多是 n n n,所以这一部分的复杂度是 O ( n m ) O(nm) O(nm)。2)dfs遍历时找增广路失败时经过的边。由于一旦从某条边出发找最短路失败了,我们就不会再走那条边(当前弧优化),所以这一部分的复杂度是 O ( m ) O(m) O(m)的。故而dfs增广的复杂度是 O ( n m ) O(nm) O(nm)

而由于每一次重新建分层图,残余网络上 s s s t t t的最短路长度一定会增加,所以至多重建 n − 1 n-1 n1次图。

故dinic的运行时间上界为 O ( n 2 m ) O(n^2m) O(n2m)

单位图 (unit graph)

定义

单位图(unit graph) 是指,所有的边的容量都是整数,且每一个不是 s s s t t t的点,要么出度为 1 1 1,连出去的边容量为 1 1 1,要么入度为 1 1 1,连进来的边容量为 1 1 1

复杂度分析

在单位图上,至多进行 2 ⌈ n − 2 ⌉ 2\lceil \sqrt {n-2}\rceil 2n2 次dfs增广。

考虑某一次dfs增广时,现在已经得到了的流为 f f f,最大流为 f ∗ f^* f R R R f f f的残留网络。则 f ∗ − f f^* - f ff R R R上的一个流,并且 R R R是单位图。我们必然可以将 f ∗ − f f^* - f ff上容量为 1 1 1的边划分成 ∣ f ∗ ∣ − ∣ f ∣ |f^*| - |f| ff条从 s s s t t t的路径(可能还有一些环)。由于 R R R是单位图,所以除了 s , t s,t s,t以外的任意一个点至多属于一条路径,所以最短路径的长度至多为 n − 2 ∣ f ∗ ∣ − ∣ f ∣ + 1 {n-2\over |f^*|-|f|} + 1 ffn2+1

经过 ⌈ n − 2 ⌉ \lceil\sqrt {n-2}\rceil n2 次dfs增广之后,最短路的长度至少

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值