En informática y teoría de gráficos , el algoritmo de Karger es un algoritmo aleatorio para calcular un corte mínimo de un gráficoconectado . Fue inventado por David Karger y publicado por primera vez en 1993. [1]
La idea del algoritmo se basa en el concepto de contracción de un borde. en un grafo no dirigido . Hablando de manera informal, la contracción de un borde fusiona los nodos. y en uno, reduciendo el número total de nodos del gráfico en uno. Todos los otros bordes que conectan o se "vuelven a unir" al nodo combinado, produciendo efectivamente un multigraph . El algoritmo básico de Karger contrae iterativamente bordes elegidos al azar hasta que solo quedan dos nodos; Esos nodos representan un corte en la gráfica original. Al iterar este algoritmo básico un número suficiente de veces, se puede encontrar un corte mínimo con alta probabilidad.
El problema de corte mínimo global [ editar ]
Un corte en un grafo no dirigido Es una partición de los vértices. en dos conjuntos no vacíos, desunidos . El cutset de un corte consiste en los bordes.entre las dos partes. El tamaño (o peso ) de un corte en un gráfico no ponderado es la cardinalidad del cutset, es decir, el número de bordes entre las dos partes,
Existen Formas de elegir para cada vértice si pertenece a o para , pero dos de estas elecciones hacen o Vacíos y no dan lugar a cortes. Entre las opciones restantes, intercambiar los roles de y no cambia el corte, por lo que cada corte se cuenta dos veces; por lo tanto, haydistintos cortes. El problema de corte mínimo es encontrar un corte de tamaño más pequeño entre estos cortes.
Para gráficos ponderados con ponderaciones de borde positivas. El peso del corte es la suma de los pesos de los bordes entre vértices en cada parte.
que concuerda con la definición no ponderada de .
Un corte a veces se denomina "corte global" para distinguirlo de un "corte global".- cortar ”para un par de vértices dado, que tiene el requisito adicional de que y . Cada corte global es un- cortar para algunos . Por lo tanto, el problema de corte mínimo se puede resolver en tiempo polinomial mediante la iteración de todas las opciones de y resolviendo el mínimo resultante. -problema de corte usando el teorema de corte mínimo de flujo máximo y un algoritmo de tiempo polinomial para el flujo máximo , como el algoritmo push-reetiquetado , aunque este enfoque no es óptimo. Los mejores algoritmos deterministas para el problema de corte mínimo global incluyen el algoritmo Stoer-Wagner , que tiene un tiempo de ejecución de. [2]
Algoritmo de contracción [ editar ]
La operación fundamental del algoritmo de Karger es una forma de contracción del borde . El resultado de contraer el borde. es nuevo nodo . Cada borde o para a los puntos finales del borde contratado se sustituye por un borde al nuevo nodo. Finalmente, los nodos contratados. y Con todos sus bordes incidentes se eliminan. En particular, el gráfico resultante no contiene auto-bucles. El resultado de la contratación de ventaja. se denota .
El algoritmo de contracción contrata repetidamente bordes aleatorios en el gráfico, hasta que solo quedan dos nodos, momento en el que solo hay un corte único.
Cuando el gráfico se representa mediante listas de adyacencia o una matriz de adyacencia , se puede implementar una única operación de contracción de borde con un número lineal de actualizaciones a la estructura de datos, para un tiempo total de ejecución de. Alternativamente, el procedimiento se puede ver como una ejecución del algoritmo de Kruskal para construir el árbol de expansión mínimo en un gráfico donde los bordes tienen pesos de acuerdo con una permutación aleatoria . Eliminar el borde más pesado de este árbol da como resultado dos componentes que describen un corte. De esta manera, el procedimiento de contracción se puede implementar como el algoritmo de Kruskal en el tiempo..
El mejor uso de implementaciones conocidas. tiempo y espacio, o tiempo y espacio, respectivamente. [1]
Probabilidad de éxito del algoritmo de contracción [ editar ]
En una grafica con vértices, el algoritmo de contracción devuelve un corte mínimo con una probabilidad polinomialmente pequeña . Cada grafica tienecortes, [3] entre los cuales a lo sumoPueden ser cortes mínimos. Por lo tanto, la probabilidad de éxito de este algoritmo es mucho mejor que la probabilidad de elegir un corte al azar, que es como máximo
Por ejemplo, el gráfico del ciclo en vértices tiene exactamente Cortes mínimos, dados por cada elección de 2 aristas. El procedimiento de contracción encuentra cada uno de estos con la misma probabilidad.
Para establecer el límite de la probabilidad de éxito en general, vamos a denota los bordes de un corte mínimo específico de tamaño . El algoritmo de contracción devuelve si ninguno de los bordes al azar pertenece al cutset de . En particular, la primera contracción del borde evita, lo que pasa con probabilidad . El grado mínimo de Por lo menos (De lo contrario, un vértice de grado mínimo induciría un corte más pequeño), por lo que . Por lo tanto, la probabilidad de que el algoritmo de contracción elija un borde de es
La probabilidad que el algoritmo de contracción en una El gráfico de vértices evita satisface la recurrencia , con , que se puede ampliar como
Repitiendo el algoritmo de contracción [ editar ]
Repitiendo el algoritmo de contracción. veces con opciones aleatorias independientes y devolviendo el corte más pequeño, la probabilidad de no encontrar un corte mínimo es
El tiempo total de ejecución para repeticiones para una gráfica con vértices y bordes es .
Algoritmo de Karger-Stein [ editar ]
Una extensión del algoritmo de Karger debido a David Karger y Clifford Stein logra una mejora de un orden de magnitud. [4]
La idea básica es realizar el procedimiento de contracción hasta que el gráfico alcance vértices.
La probabilidad Que este procedimiento de contracción evita un corte específico. en una -vertex gráfico es
Esta expresión es de aproximadamente y se vuelve menos que alrededor . En particular, la probabilidad de que un borde deSe contrae crece hacia el final. Esto motiva la idea de cambiar a un algoritmo más lento después de un cierto número de pasos de contracción.
Análisis [ editar ]
La probabilidad El algoritmo encuentra un cutset específico. Está dada por la relación de recurrencia.
con solucion . El tiempo de ejecución de fastmincut satisface
con solucion . Para lograr la probabilidad de error, el algoritmo se puede repetir tiempos, para un tiempo total de ejecución de . Esto es una mejora de un orden de magnitud sobre el algoritmo original de Karger.
Encontrando todos los min-cortes [ editar ]
Teorema: con alta probabilidad podemos encontrar todos los cortes mínimos en el tiempo de ejecución de.
Prueba: sabemos quePor lo tanto, después de ejecutar este algoritmo. veces la probabilidad de perder un corte mínimo específico es
-
-
-
- .
-
-
Y hay a lo sumo Los cortes mínimos, por lo tanto, la probabilidad de perder cualquier corte mínimo es
La probabilidad de fallos es considerablemente pequeña cuando n es lo suficientemente grande.
Límite de mejora [ editar ]
Para determinar un corte mínimo, uno tiene que tocar todos los bordes del gráfico al menos una vez, lo cual es Tiempo en una gráfica densa . El algoritmo de corte mínimo de Karger-Stein toma el tiempo de ejecución de, que está muy cerca de eso.
algoritmo push-reetiquetado (alternativamente, el algoritmo preflow-push ) es un algoritmo para calcular flujos máximos . El nombre "push-reetiquetado" proviene de las dos operaciones básicas utilizadas en el algoritmo. A lo largo de su ejecución, el algoritmo mantiene un "preflujo" y lo convierte gradualmente en un flujo máximo moviendo el flujo localmente entre nodos vecinos utilizando operaciones de empuje bajo la guía de una red admisible mantenida por operaciones de etiquetado . En comparación, el algoritmo Ford-Fulkerson realiza aumentos globales que envían flujos siguiendo las rutas desde la fuente hasta el sumidero. [1]
El algoritmo push-reetiqueta se considera uno de los algoritmos de flujo máximo más eficientes. El algoritmo genérico tiene una complejidad de tiempo O ( V 2 E ) fuertemente polinómica , que es asintóticamente más eficiente que el algoritmo Edmonds-Karp O ( VE 2 ) . [2] Las variantes específicas de los algoritmos logran complejidades de tiempo aún más bajas. La variante basada en la regla de selección de nodo de etiqueta más alta tiene una complejidad de tiempo O ( V 2 √ E ) y generalmente se considera como el punto de referencia para los algoritmos de flujo máximo. [3] [4] La complejidad del tiempo de la subcubic O ( registro de VE ( V 2 / E )) se puede lograr utilizando árboles dinámicos , aunque en la práctica es menos eficiente. [2]
El algoritmo push-reetiquetado se ha ampliado para calcular los flujos de costos mínimos . [5] La idea de las etiquetas de distancia ha llevado a un algoritmo de ruta de aumento más eficiente, que a su vez puede incorporarse nuevamente al algoritmo push-reetiquetado para crear una variante con un rendimiento empírico aún mayor.
Historia [ editar ]
El concepto de preflujo fue diseñado originalmente por Alexander V. Karzanov y se publicó en 1974 en Soviet Mathematical Dokladi 15. Este algoritmo de flujo previo también usaba una operación de empuje; sin embargo, usó distancias en la red auxiliar para determinar dónde empujar el flujo en lugar de un sistema de etiquetado. [2] [7]
El algoritmo push-relabel fue diseñado por Andrew V. Goldberg y Robert Tarjan . El algoritmo se presentó inicialmente en noviembre de 1986 en STOC '86: Actas del decimoctavo simposio anual de la ACM sobre Teoría de la computación, y luego oficialmente en octubre de 1988 como un artículo en el Journal of the ACM. Ambos documentos detallan una forma genérica del algoritmo que termina en O ( V 2 E ) junto con una implementación secuencial O ( V 3 ) , una O ( registro de VE ( V 2 / E ))Implementación utilizando árboles dinámicos, e implementación paralela / distribuida. [2] [8] . Una explicación en [9] Goldberg-Tarjan introdujo las etiquetas de distancia incorporándolas en el algoritmo de flujo máximo paralelo de Yossi Shiloach y Uzi Vishkin [10] .
Conceptos [ editar ]
Definiciones y notaciones [ editar ]
Dejar:
- G = ( V , E ) sea una red con función de capacidad c : V × V → ℝ ∞ ,
- F = ( G , c , s , t ) una red de flujo , donde s ∈ V y t ∈ V son losvértices fuente y sumideroelegidosrespectivamente,
- f : V × V → ℝ denota un flujo previo en F ,
- x f : V → ℝ denota lafunción de exceso con respecto al flujo f , definido porx f ( u ) = ∑ v ∈ V f ( v , u ) - ∑ v ∈ V f ( u , v ) ,
- c f : V × V → ℝ ∞ denota la función de capacidad residual con respecto al flujo f , definido porc f ( e ) = c ( e ) - f ( e ) ,
y
- G f ( V , E f ) denota la red residual de G con respecto al flujo f .
El algoritmo push-reetiquetado utiliza una función de etiquetado válido de entero no negativo que utiliza etiquetas de distancia , o alturas , en nodos para determinar qué arcos deben seleccionarse para la operación push. Esta función de etiquetado se denota por 𝓁: V → ℕ . Esta función debe cumplir las siguientes condiciones para ser considerada válida:
- Etiquetado válido :
- 𝓁 ( u ) ≤ 𝓁 ( v ) + 1 para todos ( u , v ) ∈ E f
- Condición de la fuente :
- 𝓁 ( s ) = | V |
- Conservación del sumidero :
- 𝓁 ( t ) = 0
En el algoritmo, los valores de etiqueta de s y t son fijos. 𝓁 ( u ) es un límite inferior de la distancia no ponderada de u a t en G f si t es accesible desde u . Si u ha sido desconectado de t , entonces 𝓁 ( u ) - | V | es un límite inferior de la distancia no ponderada de u a s . Como resultado, si existe una función de etiquetado válida, no hay rutas s - t en Gf porque no hay caminos que puedan ser más largos que| V | - 1.
Un arco ( u , v ) ∈ E f se llama admisible si 𝓁 ( u ) = 𝓁 ( v ) + 1 . La red admisible G f ( V , E f ) se compone del conjunto de arcos e ∈ E f que son admisibles. La red admisible es acíclica.
Operaciones [ editar ]
Inicialización [ editar ]
El algoritmo comienza creando un gráfico residual, inicializando los valores de preflujo a cero y realizando un conjunto de operaciones de saturación de empuje en arcos residuales que salen de la fuente, ( s , v ) donde v ∈ V \ { s } . De manera similar, las etiquetas se inicializan de tal manera que la etiqueta en la fuente es el número de nodos en el gráfico, 𝓁 ( s ) = | V | , y todos los demás nodos reciben una etiqueta de cero. Una vez que se completa la inicialización, el algoritmo realiza repetidamente las operaciones de inserción o de reetiquetado contra los nodos activos hasta que no se pueda realizar ninguna operación aplicable.
Pulse [ editar ]
La operación de inserción se aplica en un arco de salida admisible ( u , v ) de un nodo activo u en G f . Mueve las unidades de flujo mín { x f ( u ), c f ( u , v )} de u a v .
Una operación de empuje que hace que f ( u , v ) alcance a c ( u , v ) se denomina empuje de saturación, ya que consume toda la capacidad disponible del arco residual. De lo contrario, todo el exceso en el nodo se empuja a través del arco residual. Esto se llama un empuje insaturante o no saturante .
Reetiquetar [ editar ]
La operación de reetiquetado se aplica en un nodo activo u sin ningún tipo de arcos admisibles en G f . Modifica 𝓁 ( u ) para que sea el valor mínimo, de manera que se cree un arco exterior admisible. Tenga en cuenta que esto siempre aumenta 𝓁 ( u ) y nunca crea un arco pronunciado, que es un arco ( u , v ) tal que c f ( u , v )> 0 , y 𝓁 ( u )> 𝓁 ( v ) + 1 .
Efectos de empuje y reetiquetar [ editar ]
Después de una operación de empujar o volver a etiquetar, 𝓁 sigue siendo una función de etiquetado válida con respecto a f .
Para una operación de empuje en un arco admisible ( u , v ) , puede agregar un arco ( v , u ) a E f , donde 𝓁 ( v ) = 𝓁 ( u ) - 1 ≤ 𝓁 ( u ) + 1 ; también puede eliminar el arco ( u , v ) de E f , donde elimina efectivamente la restricción 𝓁 ( u ) ≤ 𝓁 ( v ) + 1 .
Para ver que una operación de reetiquetado en el nodo u conserva la validez de 𝓁 ( u ) , observe que esto está garantizado trivialmente por definición para los arcos de salida de u en G f . Para los in-arcos de u en G f , el aumento de 𝓁 ( u ) solo puede satisfacer las restricciones con menos fuerza, no violarlas.
El algoritmo genérico push-reetiquetar [ editar ]
El algoritmo genérico push-reetiquetado se usa solo como prueba de concepto y no contiene detalles de implementación sobre cómo seleccionar un nodo activo para las operaciones push y reetiquetado. Esta versión genérica del algoritmo terminará en O ( V 2 E ) .
Desde 𝓁 ( s ) = | V | , 𝓁 ( t ) = 0 , y no hay rutas más largas que | V | - 1 en G f , con el fin de 𝓁 ( s ) para satisfacer la condición válida etiquetado s debe estar desconectado de t . En la inicialización, el algoritmo cumple este requisito al crear un flujo previo f que satura todos los arcos de salida de s , después de lo cual 𝓁 ( v ) = 0es trivialmente válido para todos v ∈ V \ { s, t } . Después de la inicialización, el algoritmo ejecuta repetidamente una operación de inserción o reetiquetado aplicable hasta que no se apliquen tales operaciones, momento en el que el flujo previo se ha convertido en un flujo máximo.
Corrección [ editar ]
El algoritmo mantiene la condición de que 𝓁 es un etiquetado válido durante su ejecución. Esto puede comprobarse si se examinan los efectos de las operaciones de inserción y etiquetado en la función de etiqueta . La operación de reetiquetado aumenta el valor de la etiqueta en el mínimo asociado más uno que siempre cumplirá con la restricción 𝓁 ( u ) ≤ 𝓁 ( v ) + 1 . La operación de empuje puede enviar el flujo de u a v si ( u ) = 𝓁 ( v ) + 1 . Esto puede agregar ( v , u ) a G f y puede eliminar (u , v ) de G f . La adición de ( v , u ) aG f no afectará el etiquetado válido ya que 𝓁 ( v ) = 𝓁 ( u ) - 1 . La eliminación de ( u , v ) de G f elimina la restricción correspondiente, ya que la propiedad de etiquetado válida 𝓁 ( u ) ≤ 𝓁 ( v ) + 1 solo se aplica a los arcos residuales en G f . [8]
Si existe un preflujo fy un etiquetado válido 𝓁 para f , entonces no hay un camino de aumento de s a t en el gráfico residual G f . Esto puede comprobarse mediante una contradicción basada en las desigualdades que surgen en la función de etiquetado cuando se supone que existe un camino de aumento. Si el algoritmo termina, entonces todos los nodos en V \ { s , t } no están activos. Esto significa que todos los v ∈ V \ { s , t } no tienen exceso de flujo, y sin exceso el preflujo fobedece a la restricción de conservación del flujo y puede considerarse un flujo normal. Este flujo es el flujo máximo de acuerdo con el teorema de corte mínimo de flujo máximo, ya que no hay una ruta de aumento desde s hasta t . [8]
Por lo tanto, el algoritmo devolverá el flujo máximo al terminar.
Complejidad temporal [ editar ]
Para limitar la complejidad del tiempo del algoritmo, debemos analizar el número de operaciones de inserción y de reetiquetado que ocurren dentro del bucle principal. Los números de reetiquetado, saturación de empuje y no saturación de las operaciones de empuje se analizan por separado.
En el algoritmo, la operación de reetiquetado se puede realizar a lo sumo (2 | V | - 1) (| V | - 2) <2 font="" nbsp="">2>V | 2veces Esto se debe a que el valor de etiquetado 𝓁 ( u ) para cualquier nodo u nunca puede disminuir, y el valor máximo de la etiqueta es a lo sumo 2 | V | - 1 para todos los nodos. Esto significa que la operación de reetiquetado podría realizarse potencialmente 2 | V | - 1 vez para todos los nodos V \ { s , t } (es decir, | V | - 2). Esto resulta en un límite deO ( V 2 ) para la operación de reetiquetado.
Cada pulsación de saturación en un arco admisible ( u , v ) elimina el arco de G f . Para que el arco se vuelva a insertar en G f para otro empuje de saturación, v primero debe volver a etiquetarse, seguido de un empuje en el arco ( v , u ) , y luego se debe volver a etiquetar u . En el proceso, 𝓁 ( u ) aumenta en al menos dos. Por lo tanto, hay pulsaciones de saturación de O ( V ) en ( u , v ), y el número total de empujes de saturación es como máximo 2 | V || E | . Esto da como resultado un límite de tiempo de O ( VE ) para las operaciones de empuje de saturación.
El límite del número de empujes no saturantes se puede lograr a través de un argumento potencial . Utilizamos la función potencial Φ = ∑ [ u ∈ V ∧ x f ( u )> 0] 𝓁 ( u ) (es decir, Φ es la suma de las etiquetas de todos los nodos activos). Es obvio que Φ es 0 inicialmente y permanece no negativo durante la ejecución del algoritmo. Ambos etiqueta de nuevo y empuja saturando pueden aumentar Φ . Sin embargo, el valor de Φdebe ser igual a 0 en la terminación ya que no puede haber ningún nodo activo al final de la ejecución del algoritmo. Esto significa que durante la ejecución del algoritmo, los empujes no saturantes deben compensar la diferencia de las operaciones de etiquetado y saturación para que Φ termine con un valor de 0.
La operación de reetiquetado puede aumentar Φ como máximo (2 | V | - 1) (| V | - 2) . Una pulsación de saturación en ( u , v ) activa v si estaba inactiva antes de la pulsación, aumentando Φ como máximo 2 | V | - 1 . Por lo tanto, la contribución total de todas las operaciones de saturación de empuje a Φ es como máximo (2 | V | - 1) (2 | V || E |) . Un impulso no saturante ( u , v ) siempre se desactiva.u , pero también puede activar v como en un impulso de saturación. Como resultado, disminuye Φ al menos 𝓁 ( u ) - 𝓁 ( v ) = 1 . Desde etiqueta de nuevo y empuja saturando aumentan Φ , el número total de pulsaciones nonsaturating debe compensar la diferencia de (2 | V | - 1) (| V | - 2) + (2 | V | - 1) (2 | V || E |) ≤ 4 | V | 2 | E | . Esto resulta en un límite de tiempo de O ( V 2 E ) Para las operaciones de empuje no saturantes.
En resumen, el algoritmo ejecuta las reclasificaciones O ( V 2 ) , las pulsaciones de saturación O ( VE ) y las pulsaciones no saturantes O ( V 2 E ) . Las estructuras de datos se pueden diseñar para seleccionar y ejecutar una operación aplicable en O (1) tiempo. Por lo tanto, la complejidad del tiempo del algoritmo es O ( V 2 E ) . [1] [8]
Ejemplo [ editar ]
La siguiente es una ejecución de muestra del algoritmo genérico de cambio de marca, como se definió anteriormente, en el siguiente diagrama de flujo de red simple.
En el ejemplo, los valores h y e denotan la etiqueta 𝓁 y el exceso x f , respectivamente, del nodo durante la ejecución del algoritmo. Cada gráfico residual en el ejemplo solo contiene los arcos residuales con una capacidad mayor que cero. Cada gráfico residual puede contener múltiples iteraciones del bucle de operación de ejecución .
No hay comentarios:
Publicar un comentario