Algoritmo de Karger

La versión actual de la página aún no ha sido revisada por colaboradores experimentados y puede diferir significativamente de la versión revisada el 28 de mayo de 2022; las comprobaciones requieren 3 ediciones .
Algoritmo de Karger

El gráfico y sus dos cortes. El corte rojo cruza tres aristas y el verde corta dos. Este último es uno de los cortes mínimos de este gráfico.
Lleva el nombre de David Karger [d]
objetivo encontrar el corte más pequeño de un gráfico
Estructura de datos grafico
Tiempo promedio
costo de memoria -

El algoritmo de Karger , en informática y teoría de grafos, es un algoritmo probabilístico  que le permite encontrar el corte mínimo de un gráfico conectado . Algoritmo inventado por David Karger y publicado en 1993 [1] .

La idea del algoritmo se basa en la contracción de aristas en un grafo no dirigido. Durante la contracción del borde, dos vértices se fusionan en uno, lo que reduce el número de vértices del gráfico en uno. Todos los bordes de los vértices contraídos están conectados al vértice recién formado, generando un multigrafo . El algoritmo de Karger selecciona iterativamente bordes aleatorios y realiza la operación hasta que quedan dos vértices, que son un corte del gráfico original. Si el algoritmo se repite suficientes veces, entonces el corte mínimo se puede encontrar con alta probabilidad.

Descripción

Ejemplos

La tarea principal es encontrar cuellos de botella en varias redes. Ejemplos:

Algoritmo

La operación básica del algoritmo de Karger es una forma de contracción de borde . Para realizar esta operación en un borde arbitrario , los vértices del gráfico y se fusionan en uno . Si se elimina un vértice , cada borde de vista se reemplaza por un borde de vista . Los bucles se eliminan y, después de esta operación, el gráfico no contiene bucles. La función de costo se redefine de la siguiente manera: .

El algoritmo es una elección equiprobable de una arista aleatoria disponible y una unión de vértices según la operación descrita. El resultado del algoritmo es un par de vértices, el conjunto de aristas entre los cuales es una sección del gráfico. Este corte puede no ser mínimo, pero la probabilidad de que este corte sea mínimo es significativamente mayor que para un corte seleccionado al azar.

Pseudocódigo

El algoritmo de Karger repite n − 2 veces selecciona aleatoriamente la arista e reduce la arista e resulta el número de aristas entre los dos últimos vértices

Evidencia

Lema 1. .

Prueba. Tenga en cuenta que cada corte corresponde a un corte en . Sea , y . Entonces son válidas las siguientes diferencias: , (siempre que ) y . Por lo tanto

Lema 2. La probabilidad de que el resultado del algoritmo sea el corte más pequeño es mayor o igual a .

Prueba. Sea el -ésimo borde contraído siempre que . Además, sean y las gráficas después de la -ésima contracción, y cualquier corte más pequeño de la gráfica . Entonces lo siguiente es cierto:

Algoritmo de Karger-Stein

Tenga en cuenta que la probabilidad de no encontrar el corte más pequeño con repeticiones es . Por lo tanto, es posible reducir arbitrariamente la probabilidad de error, pero esto aumentará el tiempo de ejecución del algoritmo. Para la constante de probabilidad de error, basta con ejecutar el algoritmo una vez y el tiempo de ejecución aumentará a . Una vez que se alcanza la probabilidad de error constante, disminuirá exponencialmente en función de . Hasta ahora, el algoritmo ha generado los cortes más pequeños posibles de forma independiente en cada llamada, pero los resultados de las fusiones del primer borde se pueden usar para muchas ejecuciones. La idea del algoritmo de Karger-Stein es identificar dos candidatos de contracción en cada iteración y continuar recursivamente el algoritmo de Karger para cada uno de ellos:

  1. Dana y .
  2. Si , encuentre el corte más pequeño y envíelo, termine el trabajo.
  3. instalar _
  4. instalar _
  5. Tire de las costillas hacia adentro .
  6. Tire de las costillas hacia adentro .
  7. Calcular recursivamente los cortes más pequeños y .
  8. Da salida al corte más pequeño o .

Teorema. El algoritmo de Karger-Stein tiene complejidad temporal .

Prueba. La siguiente ecuación recursiva simplificada describe el tiempo de ejecución del algoritmo: for y for . La profundidad de recurrencia es , ya que el tamaño de los datos de entrada se reduce un número constante de veces. Sea al nivel de recursividad . Tenga en cuenta que en el nivel de recursividad, es necesario ejecutar el algoritmo una vez y el tamaño del gráfico de entrada para cada llamada recursiva es . Por lo tanto, el tiempo de ejecución de cada llamada recursiva es , y el tiempo de ejecución requerido dentro de la profundidad de recursión es . El tiempo total de ejecución es .

Lema. .

Prueba.

Teorema. El algoritmo calcula el corte más pequeño con probabilidad .

Prueba. Sea el corte más pequeño en el gráfico y . Entonces la probabilidad de que se conserve después de las contracciones es igual al mínimo:

La probabilidad de que o tenga el mismo corte más pequeño que y sea al menos . El algoritmo de Karger-Stein solo tendrá éxito en dos casos: si o contiene un corte de tamaño mínimo y la llamada recursiva del algoritmo tiene éxito. Sea la probabilidad de que el algoritmo sea exitoso para el gráfico . Entonces la probabilidad de que el algoritmo se complete con éxito es . Sea la probabilidad de que el algoritmo tenga éxito en el nivel de recursión . Entonces de hecho si y . De ello se deduce que , donde es la profundidad de recursión.

Después de reiniciar el algoritmo una vez, obtenemos el tiempo de ejecución y la probabilidad de error .

Véase también

Notas

  1. Karger, David R. Global Min-cuts in RNC, and Other Ramifications of a Simple Min-Cut Algorithm  // SODA  :  journal. - 1993. - vol. 93 . - P. 21-30 . - ISBN 0-89871-313-7 .
  2. ^ Detección de comunidad mejorada de conjunto de terminales en redes sociales . Consultado el 24 de agosto de 2016. Archivado desde el original el 9 de julio de 2016.
  3. Problema de corte mínimo . Consultado el 24 de agosto de 2016. Archivado desde el original el 28 de agosto de 2016.
  4. Algoritmos aleatorios, tercera parte . Consultado el 24 de agosto de 2016. Archivado desde el original el 28 de mayo de 2016.

Enlaces