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 .
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á:
- Establecer
- Dejar ser un vértice de grado máximo en el gráfico
- Añadir a
- Eliminar todos los bordes adyacentes a
- Si regresa a 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).
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értice "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?
Respuestas:
Mi anterior reclamo de2c+6 no tuvo en cuenta el corte de tamañon2/4 ya 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 )n Kn Kn S S S |S¯|=k k(n−k) .
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 kKxin xi ki S i S ki S k=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=k−1 ki S en una ronda, lo hará para cada ronda a partir de ese momento.
Sea el número de gráficos completos. Sea 0 < x i ≤ 1 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 xc 0<xi≤1 0≤i≤c−1 i x0=1 c′ k S . El número total de aristas es | E | = ∑ c - 1 i = 0 x i n ( x i n - 1 )∑c′−1i=0k(xin−k)=kn∑c′−1i=0(xi)−c′k2 .|E|=∑c−1i=0xin(xin−1)2≈n22∑c−1i=0x2i
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 = nkn∑c′−1i=0xi−c′k2 k c=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=nn24 x1 x1=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=n2 k=3/8n−ε′ x2=3/8n−ε′′ ε,ε′,ε′′ ε x1=1/2 , pero esto no afectará los resultados finales sinx1n=n2−1 n is large enough.
We wish to find the local maxima of our cuts. We differentiatekn∑c′−1i=0(xi)−c′k2 to k , yielding n∑c′−1i=0(xi)−2c′k . Equating to 0 gives k=n2c′∑c′−1i=0xi , which gives a cut of size n24c′(∑c′−1i=0xi)2 .
Letki 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 inxin<ki , we get the recurrence xi=12c′∑c′−1i=0xi (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′(∑c′−1i=0xi)2 n24c′(2c′(2c′c′)4c′)2=n2c′((2c′c′)4c′)2 . Using properties of this central binomial coefficient, we have limc′→∞c′((2c′c′)4c′)2=1π (also see my question on math.stackexchange.com).
The number of edges is approximatelyn22∑c−1i=0x2i=n22∑c−1i=0((2ii)4i)2 . By known properties we have 14i√≤(2ii)4i . Filing in gives at least n22∑c−1i=0(14i√)2=n28∑c−1i=01i 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| .
fuente
After a while of thinking and asking around, here's a counter-example, courtesy of Ami Paz:
Letn 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 takenk vertices from the clique, the cut is of size k⋅(n−k) . 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 thann2+2 .
fuente