【发布时间】:2016-05-01 02:46:53
【问题描述】:
给定一个加权有向图,我们希望找到全局最小割 - 即,如果删除一组边,将图分成两半,并且与任何其他此类割相比,它们的总权重最小。
现在,虽然以下似乎可行,但有人告诉我推理是错误的。但坦率地说,我不知道他是怎么确定的,我不确定他有多确定:
考虑由全局最小割(即 s-t-cut,其中s in U, t in V)分隔的节点集U,V。注意:我们不关心从V 到U 的边缘。
对于任何u in U, v in Vm,u-v-cut 不能小于s-t-cut,否则,s-t-cut 不会(全局)最小。出于同样的原因,u 中的两个顶点或V 中的两个顶点之间的没有切割可以更小。
另一方面,uv-cut 也不能更大,否则,它需要包括一些边缘U->V 不是 st-cut 的一部分,这意味着 st-cut 根本没有切割。
因此,任意修复s 并遍历所有其他顶点x 就足够了。 s 在U 中,那么如果x 在V 中,则sx-cut 对应于全局最小值,或者如果s 在V 中并且x 中,则xs-cut 对应于全局最小值在U。如果它们都是同一集合的一部分,则切割将至少与全局最小值一样大(但可能更大)。
因此,我们最终将通过计算两者来找到全局最小值,并跟踪目前遇到的最小割。
这对我来说似乎很有意义。我错了吗?如果是这样,为什么?
【问题讨论】:
-
假设您假设
s在U中,而x在V中。为什么s-x割对应全局最小值?全局最小切割必须将s同时 与V中的所有顶点分开,并且可能与最小s-x切割无关。 -
抱歉,我还是没看到。你能举一个不是这种情况的例子吗?
-
不确定这是否是您所要求的,但是是的,通过固定一个顶点 s 并计算所有顶点 t 的所有 st 和 ts 最小割,您最终会找到一个全局最小割.但是,运行时间将是 Ω(n * (计算最小 s-t 割的时间)),这不是很好
-
嗯。这可以作为一个例子吗?边 = {(s, a, 2), (s, b, 1), (a, b, 1), (b, a, 1), (a, c, 1), (b, c, 2) }。有多个权重为 3 的全局最小割,但从
s到其他顶点的最小割的权重为 1 或 2。 -
@TedHopp 好的,不要介意我之前的评论。因此,在您的示例中,全局最小切割将是 ({c}, {a,b,s}) 的权重 0(因为从 c 到任何其他顶点都没有边)。但是那个割也是权重为 0 的 c-s 割,所以不矛盾