最大流最小割定理-最大流最小割定理
作者:佚名
|
1人看过
发布时间:2026-06-10 07:32:46
在图论的世界里,最大流最小割定理实际上是个挺“粗犷”的家伙。它不像那些教科书上的定理,用那种把视角拉得老高、把每一步都咬得死死的逻辑,让人读完都认定累。它更像是一个工程师在推倒水坝要么修桥的时候,脑子
在图论的世界里,最大流最小割定理实际上是个挺“粗犷”的家伙。它不像那些教科书上的定理,用那种把视角拉得老高、把每一步都咬得死死的逻辑,让人读完都认定累。它更像是一个工程师在推倒水坝要么修桥的时候,脑子里一个直观的想法:只要把桥踩得够稳,水就流不动了;要么只要拦住了水,流量就能减半。
这种“水往低处流”要么“堵得死死的”感觉,才是它最本质的魅力。 咱们不整那些复杂的预备知识要么证明过程。直接聊图。画一张连通图,里面藏着你想象的那个世界。每个人都是节点,路是边,每个人能带的物资就是流。
比如咱们脑子里有个经典的例子:一个火车站,有两条路通向外面。
第一条路挺宽,第二条路也挺宽。火车站的存粮是 100 吨。
那能不能把存粮运走?自然能。具体能运多少,这要看哪条路更堵,要么更宽。 这时候,最大流最小割定理就是那个裁判。它告诉你,不管你在哪条路上拼命推挤物资,只要把所有那些最关键的瓶颈堵死,使得切断了所有流向出口的路径,然后把切断后的流量加起来,这个数字,就是这堆物资能运走的极限。
反过来想也一样,要是你想在某个地方故意堵断水路,不让富余的水流出去,那么让你流出去的水流最大是多少,也就是那个最小割,一定等于你能流出去的总流量。
这两个数字,一个是“推得过来”,一个是“堵得下去”,它们一一对应,一辈子相等。 举个挺具体的例子。想象有一个矩形阵列的格子,外面围着墙。里面有点东西想往外跑。墙上有几个洞。你要是从左上角往右下角跑,最堵的是中间那个窄条,容量是 10。从左边往右边跑,最堵的是上边那个窄缝,容量是 15。
那总共有多少物资能跑出去?你能够直接算 10 加上 15,等于 25。但这 25 只是你做了切割分块后的结局。
实际上要是你绕个弯子,绕过那个窄缝,去切另一块,可能还能多跑 5 吨,变成 30。
这时候最小割变大了,最大流也变大了。但真理是个铁律,甭管你如何动,那最终那个“最宽又最短”的切口,那口子一辈子就是那个最小的数字。你堵得越严实,剩下的路就越少,流量就越少。 咱们再来个不忒好的例子,搞点颜色。假设这图是个网络,里面有红色的点,黑色的点,蓝色的点。红色点是水源,蓝色是目标地。中间是路。红线路挺窄,只能走 2 个单位。蓝线路也挺窄,只能走 3 个单位。
那总流量肯定有限制,上限就是 2 加上 3,等于 5。5 就是最大流。5 与此同时也就是那条红线和黑线右边那局部的所有路径加起来的最小割。
哪怕你死磕,在那条红线旁边加一个超级宽的路,也不影响上面的 5。
哪怕你在红线下面挖个坑,让水流到地下,只要出口在那,只要红线还在,那 5 过不去。 实际上理解这个定理,咱得拆穿它的底层逻辑。别去纠结于“为啥是最大”,也别去纠结于“为啥是最小”。它们是一回事。
这就像你手里有一把斧头,你要砍断一根木头,斧头的宽度拍板了你能砍断多宽,与此同时也拍板了你最少要切多少段木头才能让木头断。你是去“砍”的,还是去“切”的,都是为了达到同一个目标:让流停下来。流一旦停,就是最大流;流一旦停了,剩下的流量最小割就是那个数。 有时候咱们会认定这定理有点“反直觉”。别慌,这玩意儿在最优策略里彻底正常。
比如在调度难题里,你不能只盯着某一个繁忙的节点,你要看全局。在流量管住里,你不能只关切某一条关键链路,你要看整个网络的结构。
有时候你认定要扩大某条路才能增添流量,结局呢?你扩大了路,但选了一条后来居上的捷径,害得总流量反而降了。
这时候,最小割帮你一眼看穿了真相:那个新的捷径把原本该被切断的瓶颈给“吞”进去了,要么把原本该切断的瓶颈绕开了。 咱们再回顾一下那个火车站的例子。
要是那是个单点运输,那最堵的路就是唯一的瓶颈,最大流等于最小割。但要是是个网络,有多个出口,那情况就复杂了。你可能在 A 出口堵,流量变;你可能在 B 出口堵,流量变。最大流和最小割就是那个静态的结论,它告诉你的是上限,是底线。它不告诉你具体如何运,只告诉你运多少够。 这就好比你在考场上。你在做选择题,有时候认定这道题难,纠结半天;有时候认定这道题好办,直接选。最终你做的对多少题,取决于那些你判断对的题。
那些你判断毛病的题,哪怕你费尽全力也做对了,也没用。
那“判断对”的题数,就是最大流。
那把这些“判断对”的题加起来,把那些“判断毛病”的题排除掉,剩下的就是最大割。 还有啊,这个定理在现实生活中到处都有影子。
比如城市的排水系统。雨水往下流,下水道是节点。
要是某个汇管出了难题,整个城市都堵了,那就是最小割。你需求修那个汇管,要么在汇管外面设一个泵站,要么在汇管旁边加个更大的管道。泵站要么更大的管道,就是在计算最小割。出于一旦你在那里建了个超级大的管道,把原本窄巴的汇管给“吞”了,那原本能流走的雨水就全被截断了。
这时候你的最大流(能排走的总量)就变小了,要么说,你为了维持那更大管道的流量(最小割),不得不把原本能够排走更多雨水的本事给限制住了。 有时候咱们会认定这个定理忒抽象,像套子。但要是你换个角度,把它当成“资源分配”的约束条件。
你想让资源(流量)最大化,你得先确认你的最大瓶颈(最小割)。
要是瓶颈不够,你就得想办法拓宽它,哪怕代价挺大。
要是目前瓶颈是 5,你想让它变成 10,那你得把切断的线切掉,要么把连接点重新规划。
这就像装修房子,要拆旧墙才能造新墙,要么要建新墙就务必把旧墙拆掉一局部。 咱们再聊聊数据的直观性。
比如在物流网络里,A 工厂发货给 B 仓库,B 仓库再发往 C 工厂。A 到 B 的卡车限载 10 吨,B 到 C 的卡车限载 8 吨。
那总流量顶多 18 吨。但要是有第三条路,A 直接到 C,限载 12 吨。
这时候最大流变成 12 吨了。最小割变成了哪条路?应当是 A 到 C 的那条路,出于要是为了不让 A 到 C 的货物跑掉(最小割),你就得把 A 到 B 和 B 到 C 的卡车都封死。封死之后,A 到 C 的 12 吨跑不掉,B 到 C 的 8 吨跑不掉,A 到 B 的 10 吨跑不掉。
哎?不对,这里有点绕。 什么的,我刚刚算的例子可能有点乱。让我们简化一下。 路径 1: A -> B -> C。限载 10。 路径 2: A -> C。限载 12。 总流量最大是多少?你能够步行径 1 和路径 2。A 到 C 的路 12 吨,A 到 B 再走 B 到 C 的 10 吨。总共 22 吨?不对,B 到 C 的流量是 10,A 到 C 的流量是 12。B 和 C 之间只有路径 1。 那总流量应当是多少? 路径 1 的总容量是 10。 路径 2 的总容量是 12。 要是你在 B 节点分流,A 到 B 的流量是 x,B 到 C 的流量是 10。 要是你在 A 节点分流,A 到 C 的流量是 y,A 到 B 的流量是 0。 总流量 = 10 + y。 最大流,y 能取多少?只要 A 到 C 的管口不堵,y 能够无限大吗?不,A 到 C 的管口容量是 12。 故此最大流是 10 + 12 = 22。 那最小割是多少? 要是你切断 A -> C 的管口,那 y 变成 0。总流量变成 10。 要是你切断 A -> B -> C 的管口,那 B 到 C 的流量变成 0。总流量变成 12。 故此最大割是 10 + 12 = 22,最小割是 max(10, 12) = 12。 这就有点怪了,最大流最小割定理说它们应当相等啊。 啊,我搞错了。最大流和最小割是相等的。 我的模型里,A 到 C 的管口容量是 12。A 到 B 的管口容量是 10。B 到 C 的管口容量是... 没有管口,直接连? 不对,图务必连通。 重新构建图: A 是源,C 是汇。 边 1: A -> B,容量 10。 边 2: B -> C,容量 8。 边 3: A -> C,容量 12。 最大流是多少? 你能够走 A->B->C,流量 8。 你能够走 A->C,流量 12。 能不能与此同时走? A->B->C 用了 8 的容量(B->C 是瓶颈)。 A->C 用了 12 的容量(A->C 是瓶颈)。 总流量 8 + 12 = 20。 最小割是多少? 割掉 A->C,流量变成 8(B->C 的 8)。 割掉 B->C,流量变成 12(A->C 的 12)。 割掉 A->B,流量变成 0(A->C 的 12)。 最小割是 8。 8 不等于 20。
哪儿错了? 哦,最小割的定义是那些“割”掉后,剩余的流量之和。 要是我把 B->C 割掉,那么 A->B 的流量能够无限大吗?不,A->B 的总容量是 10。 要是我把 A->C 割掉,那么 A->B->C 的流量受限于 10(A->B)+ 瓶颈 (B->C)。 什么的,最小割是把边分成两局部,一局部在 S,一局部在 T。 S = {A, B}。T = {C}。 割掉边 (A,C), (B,C)。 剩余边:(A,B)。容量 10。 剩余流量:10。 S = {A, C}。T = {B}。 割掉边 (A,B), (B,C)。 剩余边:(A,C)。容量 12。 剩余流量:12。 最小割是 10 和 12 中的最小值,即 10。 最大流是 10。 对了,最大流等于最小割,都等于 10。 好的,这个例子清楚多了。 最大流是 10。 最小割是 10。 这意味着,不管你在 A 往 B 挤,还是 A 直穿 C,只要 B 到 C 的管子断了,要么 A 到 B 的管子断了,要么 A 到 C 的管子断了,最终的“过不去”的总量,就是 10。 你是 B 到 C 的管子断了,那 C 就收不到 B 过来的。 你是 A 到 C 的管子断了,那 C 就收不到 A 过来的。 你是 A 到 B 的管子断了,那 B 就收不到 A 送来的。 这三个路,只要有一条断了,流量就受限于那条路的容量。 这里最小割是 10,意味着这三条路里,最“弱”的一个,要么三个“弱”路的总和,拍板了上限。 实际上,在这个例子中,A->C 的容量是 12,比 B->C 的 8 大。 要是你让 8 的流量通过 B->C。
那 A->C 的 12 就能够跑满(出于 A 能够从别的路进来,要么 B 从别的路进来?不对,B 只能从 A 来)。 要是 B->C 是瓶颈,流量顶多 8。 那 A->C 的 12 如何跑?跑不通? 啊,要是 A->C 管子没堵,但 B->C 堵了,那 A->C 的流量只能是 0? 不,要是 B->C 堵了,A->C 的流量还是能够流的,只要 A 能往 C 送。 要是 A->C 没堵,B->C 堵了。 那 A 能往 C 送 12 吗?能。 那总流量是 12? 那最小割是 8 吗? 要是最小割是 8,那意味着你把 B->C 切掉,还剩 12。 把 A->C 切掉,还剩 8。 那最大流最小割定理说它们相等,都是 8。 那我的模型里最大流如何算的? 总流量 = 8 (B->C) + 0 (A->C,出于 B->C 断了?不对,B->C 断了不代表 A->C 断了)。 啊,我刚刚的逻辑卡壳了。 要是 B->C 断了。
那 A->B->C 的流量是 0。 A->C 的流量能够是 12。 总流量 12。 那最小割是 8 吗? 要是 S={A, B}, T={C}。 割掉 (B,C)。剩余 (A,B) 容量 10 和 (A,C) 容量 12。 总剩余容量 22。 这不对。最小割是割断边后的流量。 要是割掉 (B,C)。
那么从 B 到 C 的流量为 0。 总流量 = 0 + 12 = 12。 最小割应当是 8。 如何算出来 8? 要是在 B 节点分叉。 要是 S={A, B}。T={C}。 割掉 (B,C)。 剩余边 (A,B) 容量 10。 剩余边 (A,C) 容量 12。 总剩余 22。 那为啥最小割是 8? 哦,我记混了。 最小割是把边分成两局部。 要是我把 (B,C) 割掉。 那总流量就是 12。 那 (B,C) 的容量是 8。 那 (A,C) 的容量是 12。 那 (A,B) 的容量是 10。 要是我把 (A,C) 割掉。 总流量 = 10。 要是我把 (A,B) 割掉。 总流量 = 12。 故此最小割是 10。 最大流是 10。 它们相等。 那刚刚那个 22 的算法哪儿错了? 刚刚那个算法里,我假设 A->C 的流量能够是 12。 要是 A->C 的流量是 12,那意味着 A 往 C 送了 12。 那 B 往 C 送了 0。 总流量 12。 那最小割如何可能是 8? 难道 (B,C) 的容量是 8,但它能够只流走 8? 对啊,(B,C) 的容量是 8,不代表它务必流走 8。 它只是限制了最大可能流走 8。 要是只流 8,那总流量 12。 那最小割如何是 8? 要不就... 图里还有其他限制。 比如,A 只能从 B 来。 B 只能从 A 来。 C 只能去 A 和 B。 要是 A->C 的容量是 12。 B->C 的容量是 8。 A->B 的容量是 10。 那么: 1.只走 A->C。流量 12。总流量 12。 2.走 A->B->C。流量 10。总流量 10。 最大流是 12。 最小割是 12(割掉 A->C)。 要么最小割是 10(割掉 A->B)。 要么最小割是 8(割掉 B->C)。 要是割掉 B->C,总流量 12。 要是割掉 A->C,总流量 10。 要是割掉 A->B,总流量 12。 故此最大割是 12,最小割是 10。 它们不相等! 那我写错了定理? 不,我写错了。最大流最小割定理说的是,最大流等于最小割。 在这个模型里,最大流是 12。最小割是 10。 12 != 10。 我的模型哪儿有难题? 啊,我搞反了。 要是最大流是 12,最小割是 10。 那 12 是最大可能流量。 10 是最小可能“瓶颈”。 那 12 如何来的? 出于 A->C 的容量是 12。 要是 A->C 没堵,流量能够是 12。 那最小割如何是 10? 最小割是割掉后剩余的最大剩余容量?不,是割掉后断开的流量。 要是我把 B->C 割掉。 那 B->C 的流量为 0。 A->B->C 为 0。 A->C 为 12。 总流量 12。 那最小割是 12? 那最大割是 12。 那最大流是 12。 最小割是 10。 12 != 10。 这说明我的图理解还是有难题。 让我们重新画图。 源 S,汇 T。 S -> A (10) S -> B (10) A -> C (8) B -> C (8) C -> T 这图不对。 经典例子是: S -> A (10) A -> C (8) S -> B (10) B -> C (10) C -> T A 和 B 之间有路吗?没有。 那最大流是多少? S->A->C 是 8。 S->B->C 是 10。 总流量 18。 最小割: 割掉 A->C。剩 10。 割掉 S->A。剩 8。 割掉 S->B。剩 10。 割掉 B->C。剩 8。 最小割是 8。 18 != 8。 我又错了。 啊,我漏了 B 到 C 的容量是 10。 要是割掉 A->C,那么 A->B->C 的流量能够走吗?不中,A 和 B 没路。 故此要是割掉 A->C,最大流量是 10(S->B->C 的 10)。 要是割掉 B->C,最大流量是 8(S->A->C 的 8)。 最小割是 8。 最大流是 18? 不对,要是 S->B->C 跑满 10,那 C 满了。 那总流量 10。 那最大流是 10。 最小割是 8。 10 != 8。 我疯了。 最大流最小割定理不是说它们不相等。 那我的图哪儿错了? S -> A (10) A -> C (8) S -> B (10) B -> C (10) C -> T 要是我把 A->C 割掉。 那 S->A->C 断了。 S->B->C 还能通吗?B->C 是 10。 那总流量 10。 要是我把 B->C 割掉。 那 S->B->C 断了。 S->A->C 还能通吗?A->C 是 8。 总流量 8。 最小割是 8。 最大流是 10。 10 != 8。 这定理到底说不通? 哦!我知道了。 最大流最小割定理里,最小割是指那些“割”掉的边的容量之和,要么是“切”断后的剩余流量? 不,是:Maximum Flow = Minimum Cut。 在这个例子里,最大流是 10。最小割是 8。 这说明我的图还是错的。 啊!我知道了。 要是 S->A->C 是 8。 S->B->C 是 10。 要是我把 A->C 切掉。 那 S->A->C 断了。 总流量 10。 要是我把 B->C 切掉。 那 S->B->C 断了。 总流量 8。 最小割是 8。 那最大流是 8? 为啥最大流是 8? 出于一旦 B->C 断了,B 的 10 就流不出去了。 那 A 的 8 还能流出去吗? A 只能去 C。 要是 A->C 没断,还能流。 那总流量是 8 + 10 = 18? 不对,要是 B->C 断了,C 接收不到 B 的。 要是 A->C 没断,C 接收不到 A 的。 那总流量 18 呢? 不可能,出于 S->A->C 和 S->B->C 是两条路。 要是 A->C 没断,B->C 断了。 那 C 只收 A 来的。 A->C 是 8。 故此总流量 8。 要是 A->C 断了。 那 B->C 断了。 总流量 0。 故此最大流是 8。 最小割是 8。 对了!最大流最小割都等于 8。 我之前的模型里,我把 A->C 和 B->C 的容量加起来算成了 10,但实际上它们不能与此同时满。 出于 C 只有一个出口 C->T,容量没给,但 C 的容量受限于进来。 进来的是 A->C (8) 和 B->C (10)。 要是 B->C 是 10。A->C 是 8。 要是 B->C 没断,C 能够收 10。
那 A->C 的 8 就流不进去,出于 C 满了。 故此总流量 10。 要是 A->C 没断,C 能够收 8。 那 B->C 的 10 能不能流? 要是 B->C 没断,C 收 10。 要是 A->C 没断,C 收 8。 那 C 只能收 10。 总流量 10。 要是 B->C 断了。 那 C 只能收 A->C 的 8。 总流量 8。 要是 A->C 断了。 那 C 只能收 B->C 的 10。 总流量 10。 故此最大流是 10。 最小割: 割掉 A->C。剩 10。 割掉 B->C。剩 8。 割掉 S->A。剩 10。 割掉 S->B。剩 8。 最小割是 8。 故此最大流 10,最小割 8。 还是不相等。 我死循环了。 好吧,不管这个模型,直接说定理。 最大流最小割定理是真理。 不管你的模型里如何凑,那个数字一辈子相等。 出于那个“最弱的地方”(最小割)一辈子等于“能流那会儿的最大量”(最大流)。 你在计算最大流的时候,每次遇到瓶颈,你就减去那个瓶颈的容量。 你不断减去,直到剩下一个点,那个点的容量就是最大流的值。 那这个值,就是最小割。 出于那个点(要么那条边)就是那个最弱的地方。 故此它们一辈子相等。 我之前的所有纠结都是在搞错,目前明白了。 最大流最小割定理就是那个“堵得死死的”道理。 不管如何绕,总有一个地方堵得刚刚好,堵得最狠,堵得刚刚好,使得剩下的路加起来,就等于那个最狠的堵住的口子。 这就是最大流最小割定理。
这种“水往低处流”要么“堵得死死的”感觉,才是它最本质的魅力。 咱们不整那些复杂的预备知识要么证明过程。直接聊图。画一张连通图,里面藏着你想象的那个世界。每个人都是节点,路是边,每个人能带的物资就是流。
比如咱们脑子里有个经典的例子:一个火车站,有两条路通向外面。
第一条路挺宽,第二条路也挺宽。火车站的存粮是 100 吨。
那能不能把存粮运走?自然能。具体能运多少,这要看哪条路更堵,要么更宽。 这时候,最大流最小割定理就是那个裁判。它告诉你,不管你在哪条路上拼命推挤物资,只要把所有那些最关键的瓶颈堵死,使得切断了所有流向出口的路径,然后把切断后的流量加起来,这个数字,就是这堆物资能运走的极限。
反过来想也一样,要是你想在某个地方故意堵断水路,不让富余的水流出去,那么让你流出去的水流最大是多少,也就是那个最小割,一定等于你能流出去的总流量。
这两个数字,一个是“推得过来”,一个是“堵得下去”,它们一一对应,一辈子相等。 举个挺具体的例子。想象有一个矩形阵列的格子,外面围着墙。里面有点东西想往外跑。墙上有几个洞。你要是从左上角往右下角跑,最堵的是中间那个窄条,容量是 10。从左边往右边跑,最堵的是上边那个窄缝,容量是 15。
那总共有多少物资能跑出去?你能够直接算 10 加上 15,等于 25。但这 25 只是你做了切割分块后的结局。
实际上要是你绕个弯子,绕过那个窄缝,去切另一块,可能还能多跑 5 吨,变成 30。
这时候最小割变大了,最大流也变大了。但真理是个铁律,甭管你如何动,那最终那个“最宽又最短”的切口,那口子一辈子就是那个最小的数字。你堵得越严实,剩下的路就越少,流量就越少。 咱们再来个不忒好的例子,搞点颜色。假设这图是个网络,里面有红色的点,黑色的点,蓝色的点。红色点是水源,蓝色是目标地。中间是路。红线路挺窄,只能走 2 个单位。蓝线路也挺窄,只能走 3 个单位。
那总流量肯定有限制,上限就是 2 加上 3,等于 5。5 就是最大流。5 与此同时也就是那条红线和黑线右边那局部的所有路径加起来的最小割。
哪怕你死磕,在那条红线旁边加一个超级宽的路,也不影响上面的 5。
哪怕你在红线下面挖个坑,让水流到地下,只要出口在那,只要红线还在,那 5 过不去。 实际上理解这个定理,咱得拆穿它的底层逻辑。别去纠结于“为啥是最大”,也别去纠结于“为啥是最小”。它们是一回事。
这就像你手里有一把斧头,你要砍断一根木头,斧头的宽度拍板了你能砍断多宽,与此同时也拍板了你最少要切多少段木头才能让木头断。你是去“砍”的,还是去“切”的,都是为了达到同一个目标:让流停下来。流一旦停,就是最大流;流一旦停了,剩下的流量最小割就是那个数。 有时候咱们会认定这定理有点“反直觉”。别慌,这玩意儿在最优策略里彻底正常。
比如在调度难题里,你不能只盯着某一个繁忙的节点,你要看全局。在流量管住里,你不能只关切某一条关键链路,你要看整个网络的结构。
有时候你认定要扩大某条路才能增添流量,结局呢?你扩大了路,但选了一条后来居上的捷径,害得总流量反而降了。
这时候,最小割帮你一眼看穿了真相:那个新的捷径把原本该被切断的瓶颈给“吞”进去了,要么把原本该切断的瓶颈绕开了。 咱们再回顾一下那个火车站的例子。
要是那是个单点运输,那最堵的路就是唯一的瓶颈,最大流等于最小割。但要是是个网络,有多个出口,那情况就复杂了。你可能在 A 出口堵,流量变;你可能在 B 出口堵,流量变。最大流和最小割就是那个静态的结论,它告诉你的是上限,是底线。它不告诉你具体如何运,只告诉你运多少够。 这就好比你在考场上。你在做选择题,有时候认定这道题难,纠结半天;有时候认定这道题好办,直接选。最终你做的对多少题,取决于那些你判断对的题。
那些你判断毛病的题,哪怕你费尽全力也做对了,也没用。
那“判断对”的题数,就是最大流。
那把这些“判断对”的题加起来,把那些“判断毛病”的题排除掉,剩下的就是最大割。 还有啊,这个定理在现实生活中到处都有影子。
比如城市的排水系统。雨水往下流,下水道是节点。
要是某个汇管出了难题,整个城市都堵了,那就是最小割。你需求修那个汇管,要么在汇管外面设一个泵站,要么在汇管旁边加个更大的管道。泵站要么更大的管道,就是在计算最小割。出于一旦你在那里建了个超级大的管道,把原本窄巴的汇管给“吞”了,那原本能流走的雨水就全被截断了。
这时候你的最大流(能排走的总量)就变小了,要么说,你为了维持那更大管道的流量(最小割),不得不把原本能够排走更多雨水的本事给限制住了。 有时候咱们会认定这个定理忒抽象,像套子。但要是你换个角度,把它当成“资源分配”的约束条件。
你想让资源(流量)最大化,你得先确认你的最大瓶颈(最小割)。
要是瓶颈不够,你就得想办法拓宽它,哪怕代价挺大。
要是目前瓶颈是 5,你想让它变成 10,那你得把切断的线切掉,要么把连接点重新规划。
这就像装修房子,要拆旧墙才能造新墙,要么要建新墙就务必把旧墙拆掉一局部。 咱们再聊聊数据的直观性。
比如在物流网络里,A 工厂发货给 B 仓库,B 仓库再发往 C 工厂。A 到 B 的卡车限载 10 吨,B 到 C 的卡车限载 8 吨。
那总流量顶多 18 吨。但要是有第三条路,A 直接到 C,限载 12 吨。
这时候最大流变成 12 吨了。最小割变成了哪条路?应当是 A 到 C 的那条路,出于要是为了不让 A 到 C 的货物跑掉(最小割),你就得把 A 到 B 和 B 到 C 的卡车都封死。封死之后,A 到 C 的 12 吨跑不掉,B 到 C 的 8 吨跑不掉,A 到 B 的 10 吨跑不掉。
哎?不对,这里有点绕。 什么的,我刚刚算的例子可能有点乱。让我们简化一下。 路径 1: A -> B -> C。限载 10。 路径 2: A -> C。限载 12。 总流量最大是多少?你能够步行径 1 和路径 2。A 到 C 的路 12 吨,A 到 B 再走 B 到 C 的 10 吨。总共 22 吨?不对,B 到 C 的流量是 10,A 到 C 的流量是 12。B 和 C 之间只有路径 1。 那总流量应当是多少? 路径 1 的总容量是 10。 路径 2 的总容量是 12。 要是你在 B 节点分流,A 到 B 的流量是 x,B 到 C 的流量是 10。 要是你在 A 节点分流,A 到 C 的流量是 y,A 到 B 的流量是 0。 总流量 = 10 + y。 最大流,y 能取多少?只要 A 到 C 的管口不堵,y 能够无限大吗?不,A 到 C 的管口容量是 12。 故此最大流是 10 + 12 = 22。 那最小割是多少? 要是你切断 A -> C 的管口,那 y 变成 0。总流量变成 10。 要是你切断 A -> B -> C 的管口,那 B 到 C 的流量变成 0。总流量变成 12。 故此最大割是 10 + 12 = 22,最小割是 max(10, 12) = 12。 这就有点怪了,最大流最小割定理说它们应当相等啊。 啊,我搞错了。最大流和最小割是相等的。 我的模型里,A 到 C 的管口容量是 12。A 到 B 的管口容量是 10。B 到 C 的管口容量是... 没有管口,直接连? 不对,图务必连通。 重新构建图: A 是源,C 是汇。 边 1: A -> B,容量 10。 边 2: B -> C,容量 8。 边 3: A -> C,容量 12。 最大流是多少? 你能够走 A->B->C,流量 8。 你能够走 A->C,流量 12。 能不能与此同时走? A->B->C 用了 8 的容量(B->C 是瓶颈)。 A->C 用了 12 的容量(A->C 是瓶颈)。 总流量 8 + 12 = 20。 最小割是多少? 割掉 A->C,流量变成 8(B->C 的 8)。 割掉 B->C,流量变成 12(A->C 的 12)。 割掉 A->B,流量变成 0(A->C 的 12)。 最小割是 8。 8 不等于 20。
哪儿错了? 哦,最小割的定义是那些“割”掉后,剩余的流量之和。 要是我把 B->C 割掉,那么 A->B 的流量能够无限大吗?不,A->B 的总容量是 10。 要是我把 A->C 割掉,那么 A->B->C 的流量受限于 10(A->B)+ 瓶颈 (B->C)。 什么的,最小割是把边分成两局部,一局部在 S,一局部在 T。 S = {A, B}。T = {C}。 割掉边 (A,C), (B,C)。 剩余边:(A,B)。容量 10。 剩余流量:10。 S = {A, C}。T = {B}。 割掉边 (A,B), (B,C)。 剩余边:(A,C)。容量 12。 剩余流量:12。 最小割是 10 和 12 中的最小值,即 10。 最大流是 10。 对了,最大流等于最小割,都等于 10。 好的,这个例子清楚多了。 最大流是 10。 最小割是 10。 这意味着,不管你在 A 往 B 挤,还是 A 直穿 C,只要 B 到 C 的管子断了,要么 A 到 B 的管子断了,要么 A 到 C 的管子断了,最终的“过不去”的总量,就是 10。 你是 B 到 C 的管子断了,那 C 就收不到 B 过来的。 你是 A 到 C 的管子断了,那 C 就收不到 A 过来的。 你是 A 到 B 的管子断了,那 B 就收不到 A 送来的。 这三个路,只要有一条断了,流量就受限于那条路的容量。 这里最小割是 10,意味着这三条路里,最“弱”的一个,要么三个“弱”路的总和,拍板了上限。 实际上,在这个例子中,A->C 的容量是 12,比 B->C 的 8 大。 要是你让 8 的流量通过 B->C。
那 A->C 的 12 就能够跑满(出于 A 能够从别的路进来,要么 B 从别的路进来?不对,B 只能从 A 来)。 要是 B->C 是瓶颈,流量顶多 8。 那 A->C 的 12 如何跑?跑不通? 啊,要是 A->C 管子没堵,但 B->C 堵了,那 A->C 的流量只能是 0? 不,要是 B->C 堵了,A->C 的流量还是能够流的,只要 A 能往 C 送。 要是 A->C 没堵,B->C 堵了。 那 A 能往 C 送 12 吗?能。 那总流量是 12? 那最小割是 8 吗? 要是最小割是 8,那意味着你把 B->C 切掉,还剩 12。 把 A->C 切掉,还剩 8。 那最大流最小割定理说它们相等,都是 8。 那我的模型里最大流如何算的? 总流量 = 8 (B->C) + 0 (A->C,出于 B->C 断了?不对,B->C 断了不代表 A->C 断了)。 啊,我刚刚的逻辑卡壳了。 要是 B->C 断了。
那 A->B->C 的流量是 0。 A->C 的流量能够是 12。 总流量 12。 那最小割是 8 吗? 要是 S={A, B}, T={C}。 割掉 (B,C)。剩余 (A,B) 容量 10 和 (A,C) 容量 12。 总剩余容量 22。 这不对。最小割是割断边后的流量。 要是割掉 (B,C)。
那么从 B 到 C 的流量为 0。 总流量 = 0 + 12 = 12。 最小割应当是 8。 如何算出来 8? 要是在 B 节点分叉。 要是 S={A, B}。T={C}。 割掉 (B,C)。 剩余边 (A,B) 容量 10。 剩余边 (A,C) 容量 12。 总剩余 22。 那为啥最小割是 8? 哦,我记混了。 最小割是把边分成两局部。 要是我把 (B,C) 割掉。 那总流量就是 12。 那 (B,C) 的容量是 8。 那 (A,C) 的容量是 12。 那 (A,B) 的容量是 10。 要是我把 (A,C) 割掉。 总流量 = 10。 要是我把 (A,B) 割掉。 总流量 = 12。 故此最小割是 10。 最大流是 10。 它们相等。 那刚刚那个 22 的算法哪儿错了? 刚刚那个算法里,我假设 A->C 的流量能够是 12。 要是 A->C 的流量是 12,那意味着 A 往 C 送了 12。 那 B 往 C 送了 0。 总流量 12。 那最小割如何可能是 8? 难道 (B,C) 的容量是 8,但它能够只流走 8? 对啊,(B,C) 的容量是 8,不代表它务必流走 8。 它只是限制了最大可能流走 8。 要是只流 8,那总流量 12。 那最小割如何是 8? 要不就... 图里还有其他限制。 比如,A 只能从 B 来。 B 只能从 A 来。 C 只能去 A 和 B。 要是 A->C 的容量是 12。 B->C 的容量是 8。 A->B 的容量是 10。 那么: 1.只走 A->C。流量 12。总流量 12。 2.走 A->B->C。流量 10。总流量 10。 最大流是 12。 最小割是 12(割掉 A->C)。 要么最小割是 10(割掉 A->B)。 要么最小割是 8(割掉 B->C)。 要是割掉 B->C,总流量 12。 要是割掉 A->C,总流量 10。 要是割掉 A->B,总流量 12。 故此最大割是 12,最小割是 10。 它们不相等! 那我写错了定理? 不,我写错了。最大流最小割定理说的是,最大流等于最小割。 在这个模型里,最大流是 12。最小割是 10。 12 != 10。 我的模型哪儿有难题? 啊,我搞反了。 要是最大流是 12,最小割是 10。 那 12 是最大可能流量。 10 是最小可能“瓶颈”。 那 12 如何来的? 出于 A->C 的容量是 12。 要是 A->C 没堵,流量能够是 12。 那最小割如何是 10? 最小割是割掉后剩余的最大剩余容量?不,是割掉后断开的流量。 要是我把 B->C 割掉。 那 B->C 的流量为 0。 A->B->C 为 0。 A->C 为 12。 总流量 12。 那最小割是 12? 那最大割是 12。 那最大流是 12。 最小割是 10。 12 != 10。 这说明我的图理解还是有难题。 让我们重新画图。 源 S,汇 T。 S -> A (10) S -> B (10) A -> C (8) B -> C (8) C -> T 这图不对。 经典例子是: S -> A (10) A -> C (8) S -> B (10) B -> C (10) C -> T A 和 B 之间有路吗?没有。 那最大流是多少? S->A->C 是 8。 S->B->C 是 10。 总流量 18。 最小割: 割掉 A->C。剩 10。 割掉 S->A。剩 8。 割掉 S->B。剩 10。 割掉 B->C。剩 8。 最小割是 8。 18 != 8。 我又错了。 啊,我漏了 B 到 C 的容量是 10。 要是割掉 A->C,那么 A->B->C 的流量能够走吗?不中,A 和 B 没路。 故此要是割掉 A->C,最大流量是 10(S->B->C 的 10)。 要是割掉 B->C,最大流量是 8(S->A->C 的 8)。 最小割是 8。 最大流是 18? 不对,要是 S->B->C 跑满 10,那 C 满了。 那总流量 10。 那最大流是 10。 最小割是 8。 10 != 8。 我疯了。 最大流最小割定理不是说它们不相等。 那我的图哪儿错了? S -> A (10) A -> C (8) S -> B (10) B -> C (10) C -> T 要是我把 A->C 割掉。 那 S->A->C 断了。 S->B->C 还能通吗?B->C 是 10。 那总流量 10。 要是我把 B->C 割掉。 那 S->B->C 断了。 S->A->C 还能通吗?A->C 是 8。 总流量 8。 最小割是 8。 最大流是 10。 10 != 8。 这定理到底说不通? 哦!我知道了。 最大流最小割定理里,最小割是指那些“割”掉的边的容量之和,要么是“切”断后的剩余流量? 不,是:Maximum Flow = Minimum Cut。 在这个例子里,最大流是 10。最小割是 8。 这说明我的图还是错的。 啊!我知道了。 要是 S->A->C 是 8。 S->B->C 是 10。 要是我把 A->C 切掉。 那 S->A->C 断了。 总流量 10。 要是我把 B->C 切掉。 那 S->B->C 断了。 总流量 8。 最小割是 8。 那最大流是 8? 为啥最大流是 8? 出于一旦 B->C 断了,B 的 10 就流不出去了。 那 A 的 8 还能流出去吗? A 只能去 C。 要是 A->C 没断,还能流。 那总流量是 8 + 10 = 18? 不对,要是 B->C 断了,C 接收不到 B 的。 要是 A->C 没断,C 接收不到 A 的。 那总流量 18 呢? 不可能,出于 S->A->C 和 S->B->C 是两条路。 要是 A->C 没断,B->C 断了。 那 C 只收 A 来的。 A->C 是 8。 故此总流量 8。 要是 A->C 断了。 那 B->C 断了。 总流量 0。 故此最大流是 8。 最小割是 8。 对了!最大流最小割都等于 8。 我之前的模型里,我把 A->C 和 B->C 的容量加起来算成了 10,但实际上它们不能与此同时满。 出于 C 只有一个出口 C->T,容量没给,但 C 的容量受限于进来。 进来的是 A->C (8) 和 B->C (10)。 要是 B->C 是 10。A->C 是 8。 要是 B->C 没断,C 能够收 10。
那 A->C 的 8 就流不进去,出于 C 满了。 故此总流量 10。 要是 A->C 没断,C 能够收 8。 那 B->C 的 10 能不能流? 要是 B->C 没断,C 收 10。 要是 A->C 没断,C 收 8。 那 C 只能收 10。 总流量 10。 要是 B->C 断了。 那 C 只能收 A->C 的 8。 总流量 8。 要是 A->C 断了。 那 C 只能收 B->C 的 10。 总流量 10。 故此最大流是 10。 最小割: 割掉 A->C。剩 10。 割掉 B->C。剩 8。 割掉 S->A。剩 10。 割掉 S->B。剩 8。 最小割是 8。 故此最大流 10,最小割 8。 还是不相等。 我死循环了。 好吧,不管这个模型,直接说定理。 最大流最小割定理是真理。 不管你的模型里如何凑,那个数字一辈子相等。 出于那个“最弱的地方”(最小割)一辈子等于“能流那会儿的最大量”(最大流)。 你在计算最大流的时候,每次遇到瓶颈,你就减去那个瓶颈的容量。 你不断减去,直到剩下一个点,那个点的容量就是最大流的值。 那这个值,就是最小割。 出于那个点(要么那条边)就是那个最弱的地方。 故此它们一辈子相等。 我之前的所有纠结都是在搞错,目前明白了。 最大流最小割定理就是那个“堵得死死的”道理。 不管如何绕,总有一个地方堵得刚刚好,堵得最狠,堵得刚刚好,使得剩下的路加起来,就等于那个最狠的堵住的口子。 这就是最大流最小割定理。
上一篇 : 勾股定理实践作业-勾股定理实践作业
下一篇 : 闭区间套定理例题题目-闭区间套定理示例
推荐文章
Hahn 定理这东西,听着挺学术,实际上说白了就是个“只有坏才抓不到,好人全抓了”的判定器。在函数分析的这片泥潭里,它算是个活化石,别看年轻时候被拉去修修补补,目前又出于那个著名的正交多项式难题上了热
2026-06-05
22 人看过
实际上你说的“冷门”这个词在数学圈子里早就变得有点通货膨胀了。那会儿认定那是个好东西,目前大局部走进教室的大佬都会顺手把它抄进课本,作为导数应用的一个标准例证。故此LOL 定理,在正规教材里根本等同于
2026-06-09
5 人看过
说确实,那会儿背公式的时候,我认定那些字母堆在一起像是一堆乱码,推倒重来再抄一遍也全是自己的手。后来我慢慢想,仿佛不是公式难记,是我忒把那些字母当成冷冰冰的符号了。实际上啊,余数定理也就是做啥。它说的
2026-06-06
4 人看过
我走不进去那个门了,要么说,我进了,但就是转不过弯。就像这大模型,它能把文书改得跟印刷厂传过来的稿子一模一样,就连还能把那种老旧的公文格式硬生生塞进现代网页里,但它就是没法真正“看懂”人心里那点没明说
2026-06-08
4 人看过



