Algoritmo de Karger | |
---|---|
| |
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.
La tarea principal es encontrar cuellos de botella en varias redes. Ejemplos:
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.
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:
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:
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 .