最大流与最小成本流算法解析
1. 预流推进算法
预流推进算法是解决最大流问题的一种有效方法。在分析其运行时间时,我们关注非饱和推送的数量。
1.1 非饱和推送数量分析
定义势函数 $\Phi := \sum_{i 是活跃的} pot[i]$,其中 $pot[i]$ 是活跃顶点 $i$ 的标签。根据推论 5,这个势函数的值被 $2|V|^2$ 所界定。当算法终止时,$\Phi = 0$。
考虑沿着 $(i, j)$ 进行的非饱和推送,之后 $i$ 不再活跃,而 $j$ 变为活跃,且 $pot[j] = pot[i] - 1$,这意味着非饱和推送至少使 $\Phi$ 减少 1。
接下来分析 $\Phi$ 的总增加量,有两种情况:
- 饱和推送 :可能产生新的活跃顶点,势函数最多增加 $2|V| - 1$。由于饱和推送的数量为 $O(|V||A|)$,所以饱和推送导致的 $\Phi$ 总增加量为 $O(|V|^2|A|)$。
- 顶点重标记 :标签从不减少且被 $2|V| - 1$ 界定,重标记操作导致的总增加量为 $O(|V|^2)$。
因此,预流推进算法中非饱和推送的数量为 $O(|V|^2|A|)$,其运行时间为 $O(|V|^2|A|)$。
1.2 算法正确性证明
初始预流是不可行的,但当它变得可行时就是最优的。我们通过为每个阶段的预流提供一个饱和割来证明这一点。饱和割与预流互补,满足 $(f_a - cap_a)u_a = 0$,并且势函数保证 $(p_i - p_j + u
超级会员免费看
订阅专栏 解锁全文
3767

被折叠的 条评论
为什么被折叠?



