Max-Cut算法不起作用,不清楚原因


21

好的,从某种意义上讲,这似乎是一个作业问题。作为本科算法课的一项家庭作业,我讲了以下经典著作:

给定一个无向图,给出一种算法,该算法可以找到一个切口使得,其中是穿过切口的边数。时间复杂度必须为。G=(V,E)(S,S¯)δ(S,S¯)|E|/2δ(S,S¯)O(V+E)

由于某种原因,我得到了很多以下解决方案。现在,它确实花费了太多时间,所以这不是分级的问题,但是我感到很好奇。它“似乎”不正确,但是我所有的反例尝试都失败了。这里是:

  1. 设置S
  2. 设为图中的最大度顶点v
  3. 将加到vS
  4. 删除与相邻的所有边v
  5. 如果返回2δ(S,S¯)<|E|/2

请注意,步骤5 中的是指原始图形。还要注意,如果我们跳过了步骤4,这显然是错误的(例如,一个三角形的两个独立边的并集)。E

现在,任何简单的证明都有以下​​问题-可能是,当我们添加新的顶点,实际上删除了在添加新边(其中指删除边的图形同时,从切割中切入边。问题是,如果这不利于我们的原因,则意味着“用于” 该顶点程度更高,因此“应该”被更早地选择。v|S|d(v)d(v)v

这是众所周知的算法吗?是否有一些简单的反例?


2
它看起来类似于顶点覆盖的2近似值。我认为正确的贪心算法会选择一部分中具有更多邻居的顶点,即在另一部分中将其移动直到没有此类顶点,并且不难证明此时的答案至少为。但是该算法的正确性取决于以下事实:我们正在查看切割两侧的顶点的邻居数之差,而不仅仅是最大度数。另外,正确的算法移动顶点在两个方向,不只是从到。ˉ 小号小号|E|/2S¯S
卡夫(Kaveh),2013年

3
@Kaveh我认为OP知道您所描述的算法(他将其分配为作业)。他的问题是他描述的算法是否达到了任何近似值。
Sasho Nikolov

2
@ MohammadAl-Turkistany看到Nikolov的评论。
vb le

1
另外,请注意16/17近似值是NP难的,而不是1/2。GW在其开创性论文中使用SDP给出了约0.878的近似值。
Yonatan

Answers:


13

我先前对并未考虑图形中已经存在的大小为的剪切。以下构造似乎导致了分数凭经验-我在math.stackexchange.com上创建了一个问题,以进行严格证明)。 Ñ2/4ø12c+6n2/4O(1logc)

该算法在几个断开连接,大小不同的完整图的并集上表现不佳。我们将个顶点上的完整图表示为。考虑算法在上的行为:它反复向中添加尚未存在的任意顶点-所有这些顶点都是相同的,因此顺序无关紧要。通过算法设置尚未添加到的顶点数,切割的大小为。ķ ñ ķ ñ小号小号小号| ˉ 小号 | = k k n k nKnKnSSS|S¯|=kk(nk)

考虑一下,如果我们在常数介于0和1之间的几个断开的图上运行该算法,会发生什么情况。如果是第个完整图中中尚未存在的元素数,则该算法将反复添加一个从具有最高的完整图到顶点,任意打破联系。这将导致对基于“舍入”的顶点加法:该算法从具有最高所有完整图添加顶点,然后从具有所有完整图添加顶点(具有 x i k i S i S k i S k = k i k i = k 1 k i SKxinxikiSiSkiSk=kiki=k1ki在上一轮之后更新),依此类推。完整图形在一个回合中将顶点添加到后,此后将在每个回合中这样做。S

令为完整图的数量。令与为第个完整图形的大小修饰符。我们将这些大小修饰符从大到小排序,并设置。现在我们得到的结论是,如果存在图,其中恰好还有元素尚未添加到,那么当时的切口大小为。边的总数为。0 < X 1 0 Ç - 1 X 0 = 1 c ^ ' ķ 小号Σ Ç ' - 1 = 0 ķ X ñ - ķ = ķ Ñ Σ Ç ' - 1 = 0X - c ^ ' ķ 2 | Ëc0<xi10ic1ix0=1ckSi=0c1k(xink)=kni=0c1(xi)ck2|E|=i=0c1xin(xin1)2n22i=0c1xi2

需要注意的是是在二次函数并因此具有最大。因此,我们将有几个局部最大切割。例如,如果我们的最大切点为,大小为。我们将选择以使,这意味着第二个完整图将不会更改时该局部最大割的大小。然后我们在处获得一个新的局部最大割,因此我们选择(带有 ķ c ^ = 1 ķ = Ñkni=0c1xick2kc=1 n2k=n2 X1X1=1/2-εķ=Ñn24x1x1=1/2ε ķ=3/8ñ-ε'X2=3/8Ñ-εεε'εεX1=1/2X1Ñ=Ñk=n2k=3/8nεx2=3/8nεε,ε,ε小常数)。我们将忽略 S为时刻,只是假设,我们可以挑选 -我们应该确保,但这不会影响最终的结果,如果是足够大。εx1=1/2nx1n=n21n

我们希望找到我们削减的局部最大值。我们将为,得到。等于得出,其大小为。 ķ Ñ Σ Ç ' - 1 = 0X - 2 ç ' ķ 0 ķ = Ñkni=0c1(xi)ck2kni=0c1(xi)2ck0Ñ2k=n2ci=0c1xin24c(i=0c1xi)2

如果则令为上一段中确定的。我们将通过要求来确保公式成立- 然后,具有所有完整图均小于该局部最大割的,因此不会增加割的大小。这意味着我们在这些处有切口,大于该算法找到的所有其他切口。 ķ Ç ' = X Ñ < ķ ' ' > ķ Ç ķ kikc=ixin<kiii>ikicki

填充,我们得到的递归(加上一些小)。解决这个问题得到:请参阅我在math.stackexchange.com上提问的@Daniel Fisher的推导。将其插入并利用我们对递归的了解,我们可以削减尺寸。利用这个中心二项式系数的性质,我们有x i = 1xin<kiεX0=1xi=12ci=0c1xiεx0=1xi=(2ii)4in24c(i=0c1xi)2n24c(2c(2cc)4c)2=n2c((2cc)4c)2limcc((2cc)4c)2=1π(另请参阅我在math.stackexchange.com上的问题)。

边的数量大约为。通过已知属性,我们具有。提交至少得出是渐近作为前进到无限。n22i=0c1xi2=n22i=0c1((2ii)4i)214i(2ii)4in22i=0c1(14i)2=n28i=0c11in28logcc

因此随着趋于无穷大,我们有渐近等于,这表明算法可以任意低的收益削减 。δ(S,S¯)|E|8πlogcc|E|


3
稍加修改,您的构造将为。修复并选择一个足够大的。令。用边连接每两个顶点;然后另外连接每两个顶点 wp。边的总数约为。该算法找到了一个剪切点,该剪切点剪切了大约边(直到低阶项)。1/4εNV={1,,N}{1,,εN}Vε2(εn)2/2+ε2(n2/2)=ε2n2ε2n2/4ε
尤里(Yury)2013年

我想我会重写我的答案,以便尽快包括最终结果(更详细),因为现在有点混乱。
亚历克斯十布林克

1
关于总和,因为每个项都是,所以总和是一个谐波序列,总和为,总和为。n22i=0c1((2ii)4i)2Θ(1/(i+1))Θ(logc)Θ(n2logc)
Yuval Filmus 2013年

12

经过一段时间的思考和询问,下面是一个反例,由Ami Paz提供

令为偶数,为图,它是与个顶点的匹配(即与边的匹配)的并集。nGKnn+2n/2+1

该算法如何在该图上运行?它只是以任意顺序从团部获取顶点。从集团提取个顶点后,切割的大小为。对于,这是最大的,它给出的大小为,而图中的边数为。kk(nk)k=n/2n24n22+1

所规定的算法将继续从集团中添加顶点,减少穿过切割的边的数量,直到集团中剩下的只是一条边。在这一点上,它无法获得比更好的东西。n2+2


1
不错的反例。
卡夫(Kaveh),2013年

但是,它仍然非常接近。很高兴看到该算法的效果更差的示例|E|/2
Sasho Nikolov 2013年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.