Algoritmo de corte máximo que no debería funcionar, no está claro por qué

21

OK, esto puede parecer una pregunta de tarea y, en cierto sentido, lo es. Como tarea en una clase de algoritmos de pregrado, di el siguiente clásico:

Dado un gráfico no dirigido , proporcione un algoritmo que encuentre un corte tal que , donde es el número de bordes que cruzan el corte. La complejidad del tiempo debe ser .G=(V,E)(S,S¯)δ(S,S¯)|E|/2δ(S,S¯)O(V+E)

Por alguna razón, obtuve muchas de las siguientes soluciones. Ahora, consume demasiado tiempo, así que no es cuestión de calificación, pero me dio curiosidad. No parece "correcto", pero todos mis intentos de contraejemplos han fallado. Aquí está:

  1. EstablecerS
  2. Dejarv ser un vértice de grado máximo en el gráfico
  3. Añadir avS
  4. Eliminar todos los bordes adyacentes av
  5. Si regresa a 2δ(S,S¯)<|E|/2

Tenga en cuenta que en el paso 5 se refiere al gráfico original. También tenga en cuenta que si hubiéramos omitido el paso 4, esto obviamente sería incorrecto (por ejemplo, la unión de un triángulo con dos bordes aislados).E

Ahora, cualquier prueba simple tiene el siguiente problema: puede ser que cuando agreguemos un nuevo vértice realmente eliminemosbordes del corte al agregar nuevos bordes (donde refiere al gráfico con bordes eliminados). La cuestión es que si esto es perjudicial para nuestra causa, significa que este vérticev|S|d(v)d(v)v "solía" tener un grado cada vez mayor, por lo que "debería haber sido" seleccionado antes.

¿Es este un algoritmo bien conocido? ¿Hay algún contraejemplo simple para ello?

Yonatan
fuente
2
Se parece a la aproximación 2 para la cubierta de vértice. El algoritmo codicioso correcto creo que elegiría el vértice con más vecinos en la parte que es en la otra parte y lo movería hasta que no haya tal vértice y no es difícil mostrar que en ese punto la respuesta es al menos |E|/2 . Pero la exactitud de ese algoritmo depende del hecho de que: estamos viendo la diferencia entre el número de vecinos para el vértice en los dos lados del corte y no solo el grado máximo. También el algoritmo correcto mueve vértices en ambas direcciones, no sólo de S¯ a S .
Kaveh
3
@Kaveh Creo que OP conoce el algoritmo que usted describe (lo asignó como tarea). Su pregunta es si el algoritmo que describe logra alguna aproximación.
Sasho Nikolov
2
@ MohammadAl-Turkistany ve el comentario de Nikolov.
vb le
1
Además, tenga en cuenta que la aproximación 16/17 es NP-hard, no 1/2. GW da una aproximación de ~ 0.878 usando SDP en su artículo seminal.
Yonatan
1
@Yonatan Vea esta pregunta cstheory.stackexchange.com/questions/3846/…
Mohammad Al-Turkistany

Respuestas:

13

Mi anterior reclamo de 2c+6 no tuvo en cuenta el corte de tamañon2/4ya presente en el gráfico. La siguiente construcción parece resultar (emperically: he creado una pregunta en math.stackexchange.com para una prueba rigurosa) en unaO(1logc)fracción.

El algoritmo funciona mal en uniones de varios gráficos completos desconectados y de diferentes tamaños. Denotamos el gráfico completo en vértices como K n . Considere el comportamiento del algoritmo en K n : agrega repetidamente un vértice arbitrario que aún no está en S a S : todos esos vértices son idénticos y, por lo tanto, el orden no importa. Establecer el número de vértices aún no agregados a S por el algoritmo | ˉ S | = k , el tamaño del corte en ese momento es k ( n - k )nKnKnSSS|S¯|=kk(nk) .

Considere lo que sucede si ejecutamos el algoritmo en varios gráficos desconectados con constantes x i entre 0 y 1. Si k i es el número de elementos que aún no están en S en el i ésimo gráfico completo, entonces el algoritmo agregará repetidamente un vértice a S desde el gráfico completo con la mayor k i , rompiendo lazos arbitrariamente. Esto inducirá adiciones de vértices basadas en 'redondeos' a S : el algoritmo agrega un vértice de todos los gráficos completos con la mayor k = k i , luego de todos los gráficos completos con kKxinxikiSiSkiSk=ki (con k i actualizado después de la ronda anterior), y así sucesivamente. Una vez que un gráfico completo tiene un vértice agregado a Ski=k1kiS en una ronda, lo hará para cada ronda a partir de ese momento.

Sea el número de gráficos completos. Sea 0 < x i1 con 0 i c - 1 el modificador de tamaño para el i -ésimo gráfico completo. Ordenamos estos modificadores de tamaño de grande a pequeño y establecemos x 0 = 1 . Ahora tenemos que si hay gráficos de c ' con exactamente k elementos aún no agregados a S , entonces el tamaño del corte en ese momento es c - 1 i = 0 k xc0<xi10ic1ix0=1ckS . El número total de aristas es | E | = c - 1 i = 0 x i n ( x i n - 1 )i=0c1k(xink)=kni=0c1(xi)ck2 .|E|=i=0c1xin(xin1)2n22i=0c1xi2

Tenga en cuenta que es una función cuadrática en k y, por lo tanto, tiene un máximo. Por lo tanto, tendremos varios cortes máximos locales. Por ejemplo, si c = 1 nuestro corte máximo está en k = nkni=0c1xick2kc=1 de tamañon2k=n2 . Vamos a recogerx1de modo quex1=1/2-ε, que significa que el segundo gráfico completo no va a cambiar el tamaño de este corte localmente máxima ak=nn24x1x1=1/2ε . A continuación, obtener un nuevo corte localmente máxima ak=3/8N-ε'y así recogemosx2=3/8N-ε"(conε,ε',ε"pequeñas constantes). Vamos a pasar por alto elεs por el momento y simplemente asumir que podemos recogerx1=1/2- debemos garantizarx1n=nk=n2k=3/8nεx2=3/8nεε,ε,εεx1=1/2, pero esto no afectará los resultados finales sinx1n=n21n is large enough.

We wish to find the local maxima of our cuts. We differentiate kni=0c1(xi)ck2 to k, yielding ni=0c1(xi)2ck. Equating to 0 gives k=n2ci=0c1xi, which gives a cut of size n24c(i=0c1xi)2.

Let ki be the k determined in the previous paragraph if c=i. We will ensure that the formula holds by demanding that xin<ki - all complete graphs i with i>i are then smaller than the ki of this locally maximal cut and hence do not increase the size of the cut. This means we have c cuts at these ki that are larger than all other cuts found by the algorithm.

Filling in xin<ki, we get the recurrence xi=12ci=0c1xi (plus some small ε) with x0=1. Solving this yields xi=(2ii)4i: see my question on math.stackexchange.com for the derivation by @Daniel Fisher. Plugging this into n24c(i=0c1xi)2n24c(2c(2cc)4c)2=n2c((2cc)4c)2. Using properties of this central binomial coefficient, we have limcc((2cc)4c)2=1π (also see my question on math.stackexchange.com).

The number of edges is approximately n22i=0c1xi2=n22i=0c1((2ii)4i)2. By known properties we have 14i(2ii)4i. Filing in gives at least n22i=0c1(14i)2=n28i=0c11i which is asymptotically n28logc as c goes to infinity.

We therefore have δ(S,S¯)|E| is asymptotically equal to 8πlogc as c goes to infinity, showing that the algorithm can return cuts that are arbitrarily low fractions of |E|.

Alex ten Brink
fuente
3
With a slight modification, your construction gives 1/4. Fix ε and chose a sufficiently large N. Let V={1,,N}. Connect every two vertices in {1,,εN} with an edge; then additionally connect every two vertices in V w.p. ε2. The total number of edges is approximately (εn)2/2+ε2(n2/2)=ε2n2. The algorithm finds a cut that cuts approximately ε2n2/4 edges (up to lower order terms in ε).
Yury
I think I'll rewrite my answer to just include the final results (with more detail) soon, as it's a bit of a mess right now.
Alex ten Brink
1
Regarding the sum n22i=0c1((2ii)4i)2, since each term is Θ(1/(i+1)), the sum is a harmonic series which sums to Θ(logc), and in total we get Θ(n2logc).
Yuval Filmus
12

After a while of thinking and asking around, here's a counter-example, courtesy of Ami Paz:

Let n be even and G be a graph which is the union of Kn with a matching of n+2 vertices (that is, a matching with n/2+1 edges).

How does the algorithm run on this graph? It just takes vertices from the clique part in arbitrary order. After having taken k vertices from the clique, the cut is of size k(nk). This is maximal for k=n/2, which gives a cut of size n24, while the number of edges in the graph is n22+1.

The algorithm as prescribed will continue adding vertices from the clique, reducing the number of edges crossing the cut, until what remains from the clique is just a single edge. At this point it cannot obtain anything better than n2+2.

Yonatan
fuente
1
Nice counterexample.
Kaveh
this still gets very close to |E|/2 though. it would be nice to see an example where the algorithm does worse
Sasho Nikolov