背景 :
在流网络中,st切口是要求源“ s”和接收器“ t”位于不同子集中的切口,它由从源侧到接收器侧的边组成。 st切口的容量由切口集中每个边的容量之和定义。 (来源:Wiki)。给定两个顶点s和t,我们可以使用最大流量算法找到最小st割。
由于总共有O(n 2 )个可能的对,因此乍看之下似乎总有O(n 2 )个最小切入点总数。但是当我们使用Gomory-Hu树时,我们会看到总共有n-1个不同的剪切值[具有n个顶点的树具有n-1个边]
可以使用Gomory-Hu Tree来解决的流行图问题:
- 给定一个加权连接图,找到所有顶点对的最小st割。或诸如找到所有可能的最小st切口中的最小值的问题。
- 最小K切问题:找到边缘的最小权重集,将其移除会将图形划分为k个相连的分量。这是一个NP-Hard问题,Gomory-Hu树提供了该问题的近似解决方案。
什么是果树-胡树?
为具有边容量函数c的流程图定义了Gomory-Hu树。该树具有与输入图相同的顶点集,并具有n-1(n是顶点数)条边。使用以下属性定义边缘容量函数c’:
等效流树:对于任何一对顶点s和t,图中的最小st割等于Tree中s和t之间路径上的边的最小容量。
剪切属性:Tree中的最小st剪切也是Graph.G中的最小剪切
例如,考虑下面的图和对应的Gomory-Hu树。
由于在具有n个节点的树中有n-1个边,因此我们可以得出结论,在具有n个顶点的流网络中最多存在n-1个不同的流值。
我们将在下一篇文章中讨论Tree的构造。
如何使用Gomory-Hu树构造解决以上问题?
树中的最小重量边是所有st切口中的最小边。
我们可以使用以下步骤解决k-cut问题。
1)构建果树-胡树。
2)从树上去除k-1个最小重量(或最轻)的边缘。
3)返回通过上述边缘去除获得的组件的并集。
下图说明了上述算法。
请注意,上述解决方案可能并不总是产生最佳结果,但是可以保证产生(2-2 / k)范围内的结果。
参考:
https://www.corelab.ntua.gr/seminar/material/2008-2009/2008.10.20.Gomory-Hu%20trees%20and%20applications.slides.pdf
https://courses.engr.illinois.edu/cs598csc/sp2009/lectures/lecture_7.pdf
https://cseweb.ucsd.edu/classes/fa06/cse202/Gomory-Hu%20Tree.pdf