Warm tip: This article is reproduced from serverfault.com, please click

python-我们应该使用福特-富克森多少次?

(python - how many times we should used ford-Fulkerson?)

发布于 2020-11-28 03:02:01

我们给定了一个具有K顶点的网络,并赋予ab所有边缘的容量为infinite对于从a的流bmax flow通过它的边缘称为瓶颈边缘,而通过该边缘传递的流量的容量称为流的瓶颈。M给出一个整数我们希望将M瓶颈最小的大小的传输流从a转移到b。我们应该使用福特-富克森多少次来计算该流量?

O(1)运行是答案,但是如何?

Questioner
user9851867
Viewed
11
Ami Tavory 2020-11-28 19:27:30

假设你为每个边分配一个容量1,一次运行FF,并得到结果图。另外,将最大流量设为M'直观地,我们发现最小割为$ M'$,这意味着在这种情况下,从a到bM'条边不相交的路径。这告诉我们如何通过适当地缩放流量来获得⌈M / M'solution的解例如,假设$ M = 5 $,并且将容量设置为1时,我们得到$ M'= 2 $。那么我们知道最小割为2。如果将容量增加到5/2 = 2.5,那么我们将确切地得到5的流量。由于这是非整数,因此我们会将某些边(形成从a到b的路径)的容量增加到3,再将一些容量增加到2。

你所得到的任何东西都不会比发现的东西低。如果你可以得到更低的值,例如说M''<⌈M / M'⌉,那么如果将所有边的容量设置为M'',则流程不会改变。根据最大流/最小割定理,这意味着存在M / M''> M'的最小割这与最小切割仅是M'相矛盾