2010-11-17 10 views
5

Tengo una red que podría tener este aspecto:
Network
Básicamente, quiero saber el número mínimo de círculos verdes que puede desconectar la fuente y el drenaje si es eliminado/desactivado. (en este caso 1)
Ya he implementado con éxito el algroritmo Edmonds-Karp, pero no sé cómo modelar la red con los bordes dirigidos, por lo que obtengo el resultado deseado.
Si simplemente reemplazo cada conexión entre los nodos con dos bordes dirigidos opuestos con capacidad 1, obtengo un flujo máximo de 2 con EdmondsKarp, pero solo necesito eliminar 1 círculo verde para romper la red.
¿Cómo puedo modelar mi red como nodos y dirigir mi borde?red de modelado como grafo dirigido

Respuesta

4

Puede reducir este problema al problema de corte s-t estándar en los gráficos dirigidos, que luego puede resolverse, p. por el algoritmo Edmonds-Karp. Para cada vértice v, cree dos vértices v_in y v_out y un borde dirigido (v_in, v_out), y para cada borde {v, w}, agregue dos bordes dirigidos (v_out, w_in) y (w_out, v_in). Entonces no es difícil ver que un flujo máximo de s_in a t_out corresponde a un corte de vértice mínimo entre s y t.

0

Ha determinado correctamente el flujo máximo: es 2 para su red.

De definición de flow network

Un flujo debe satisfacer la restricción que la cantidad de flujo en un nodo es igual a la cantidad de flujo de fuera de él, excepto cuando se trata de una fuente, que tiene un mayor flujo de salida, o en el fregadero, que tiene un mayor flujo entrante

Así que para su nodo intermedio que tienen 2 como máximo flujo (que entra y que sale). Entonces, saber solo el flujo máximo no le dará la respuesta para un corte mínimo.

El teorema

max-flujo min-cortó teorema que en una red de flujo, la cantidad máxima de flujo que pasa desde la fuente hasta el disipador de es igual a la capacidad mínima que cuando eliminado de una manera específica de la red hace que la situación que no hay flujo puede pasar de la fuente al fregadero

así, sí, usted sabe la cantidad de flujo que necesita eliminar, pero no sabe de qué manera eliminarlo. Creo que esto no es tan trivial y que tendrá que buscar específicamente min-cut.

+0

Después de un poco de Google sin frutas, supongo que primero voy a intentar la "fuerza bruta": encontrar el flujo máximo. Retire el nodo con mayor flujo a través de él. Repite esos 2 pasos hasta que el flujo máximo sea cero. El número de nodos eliminados debe ser el mínimo, así que solo cuento eso. – Svante

+0

@Svante, esto no daría la respuesta correcta. Imagine un caso en el que el mismo flujo máximo, valor 7, pase por 2 conjuntos de nodos, desde el frist hasta el 4,2,1 y luego hasta el 3,2,2. Eliminar 4 y 3 no lo pondría en cero y llegaría al flujo cero solo después de eliminar los 2 últimos en el segundo conjunto. De esta forma, contarías demasiados nodos. Pero, creo (no pasó por el algoritmo) que Edmonds-Karp examina el escenario de corte mínimo, pero no lo retiene.Buscaría una forma de modificar el algoritmo de flujo máximo de una manera que devuelva los nodos a través de los cuales fluye el flujo máximo. – Unreason

+0

Sí, acabo de implementarlo, y no funcionó. El flujo máximo y mínimo de corte es siempre el mismo. Pero el corte mínimo es solo la suma mínima del flujo en los bordes que se cortará para separar la fuente y drenar. Por lo tanto, realmente no me dice más, ni nada, sobre qué bordes o nodos son los más importantes. – Svante

Cuestiones relacionadas