¿Cómo funciona este algoritmo para encontrar los bordes del corte mínimo de un gráfico?

Gracias por el A2A.
Primero establezca el peso de los bordes del gráfico [math] G [/ math] en 1, use ford-fulkerson o algomondm de edmond-karps para calcular el flujo máximo. Ambos algoritmos funcionan para agregar flujo a lo largo de rutas de aumento. Entonces, cuando alcanza el flujo máximo, seguramente no hay más camino de aumento a lo largo del cual puede agregar más flujo. Ahora haga un dfs desde la fuente para obtener todos los vértices en el mismo corte que la fuente (digamos [math] X [/ math]) y [math] V (G) \ setminus X [/ math] le dará el otro parte del corte.
El único problema con estos algoritmos es que son lentos, incluso el algoritmo edmond-karp tiene un tiempo de ejecución de [math] O (VE ^ 2) [/ math].

Entonces, una forma más rápida de obtener un corte mínimo es usar el siguiente algoritmo aleatorio.
Deje [math] G [/ math] ser el gráfico en [math] n [/ math] vértices y un mincut de tamaño [math] k [/ math].
1. Elija una arista al azar (diga [math] (v_1, v_2) [/ math]) y combine los dos puntos finales en un supervertex (diga [math] v_ {12} [/ math]). La fusión implica la eliminación del borde [math] (v_1, v_2) [/ math], formando el supervertex [math] v_ {12} [/ math]), agregando el resto de los bordes inicialmente conectados a [math] v_1 [ / math] o [math] v_2 [/ math] a [math] v_ {12} [/ math].
Continúa este proceso hasta que te queden solo dos vértices. Deje que el corte entre ellos sea del tamaño [math] k_1 [/ math].
Repita el procedimiento anterior [matemática] \ frac {n ^ 2} {2} [/ matemática] veces para obtener cortes de diferentes tamaños. Devuelve el mínimo de ellos como mincut.
Con alta probabilidad, este procedimiento devuelve un corte mínimo.

Para el análisis completo, consulte el libro de texto Motwani-Raghwan.
Algoritmos aleatorizados.

More Interesting

¿Cómo se puede hacer un sistema como Google AdWords y AdSense?

¿Por qué es imposible tener un tipo de comparación mejor que el tiempo O (nlogn)?

Cómo determinar la complejidad de esta recurrencia T (n) = 16 * T (n / 4) + n! usando el teorema maestro

¿Cuál es la razón por la cual las compañías gigantes (por ejemplo, Google o Microsoft) hacen preguntas típicas como el árbol de búsqueda binario o el algoritmo tradicional o preguntas como la complejidad del algoritmo? ¿Cuál es el propósito? La mayoría de ellos no se usan en la vida real.

¿Qué se puede lograr de los algoritmos de aprendizaje? ¿Conducirá a un individuo a ser un mejor programador?

¿Debo tomar un curso de estructura de datos y algoritmos antes de aprender cualquier lenguaje de programación? ¿Es importante entender la programación?

¿Cómo podemos revertir una pila usando solo las operaciones push () y pop () sin usar ningún DS secundario?

¿Por qué el método Arrays.sort en Java implementa timsort en lugar de contar?

¿Qué algoritmos debo saber para poder resolver la pregunta de Aprendizaje automático / Ciencia de datos de CodeSprint 5 en HackerRank?

¿Qué es el retroceso en un diseño de algoritmo?

Cómo contar el número de enteros palindrómicos dentro de un rango [A, B] donde A y B pueden ser de hasta 10 ^ 17

¿Cuáles son las aplicaciones del mundo real de algunas estructuras de datos avanzadas, y cuándo elegiría una estructura de datos sobre otra, en el caso de estructuras de datos similares?

¿Cuál es el mejor instituto para estructuras de datos y algoritmos en Hyderabad?

¿Cómo resuelvo los problemas de codechef y topcoder?

Supongamos que tenemos una matriz 8 * 8. Cada celda tiene 0 o 1. Se le dará una ubicación y deberá encontrar todas las que se encuentran en la misma isla. ¿Los puntos se encuentran en la misma isla si un punto está en alguna de las celdas adyacentes?