Edición de «Práctica 10: Matching - Flujo Máximo (Algoritmos III)»

De Cuba-Wiki
Advertencia: no has iniciado sesión. Tu dirección IP se hará pública si haces cualquier edición. Si inicias sesión o creas una cuenta, tus ediciones se atribuirán a tu nombre de usuario, además de otros beneficios.

Puedes deshacer la edición. Antes de deshacer la edición, comprueba la siguiente comparación para verificar que realmente es lo que quieres hacer, y entonces publica los cambios para así efectuar la reversión.

Revisión actual Tu texto
Línea 79: Línea 79:
==Ejercicio 10.05:==
==Ejercicio 10.05:==
Probar que si G es bipartito, m <= <math>\alpha * \beta </math>, donde <math>\alpha</math>=#(conj. indep. maximo) y <math>\beta</math>=#(Recubrimiento minimo de aristas)
Probar que si G es bipartito, m <= <math>\alpha * \beta </math>, donde <math>\alpha</math>=#(conj. indep. maximo) y <math>\beta</math>=#(Recubrimiento minimo de aristas)
<br>Sea: <math>v \in \real</math>, y V1,V2 las particiones de G
<br><math>m \leq 2*m = \sum d(v) \leq max(|V1|,|V2|)* \beta \leq  \alpha * \beta </math>


Sean V1, V2 las particiones de G.
Me parece que eso no esta bien.. que alguien chequee.. porque si tengo un bipartito K_33, tengo que alfa = 3 y beta = 3, entonces 2*9 <= 3*3 no es verdadero....


Uno se convence de que <math>\alpha \geq max(|V1|,|V2|)</math>. Multiplicando por <math>\beta</math> de los dos lados queda <math>\alpha.\beta \geq max(|V1|,|V2|).\beta</math>. Ahora hay que ver por qué eso es mayor a m.
Otra solución es:
<br> P1 = conj nodos de 1era particion.
<br> P1 = conj nodos de 2da particion.
<br> Ca = conj de nodos aislados.


Como G es bipartito vale que <math>gr(v) \leq max(|V1|,|V2|)</math> para todo nodo. Sumando sobre los nodos del recubrimiento de aristas, Re, queda que <math>\sum gr(v) \leq max(|V1|,|V2|).\beta</math>. Como Re es un recubrimiento de aristas, sus nodos tocan todos los ejes, con lo cual <math>\sum gr(v) \geq m</math>, y listo.
<br> m<=|P1||P2|
<br> alfa = max(|P1|,|P2|)+|Ca|
<br> beta = min(|P1|,|P2|)
 
<br> alfa*beta = |P1|*|P2|+min(|P1|,|P2|)*|Ca|
<br> por lo tanto:
<br> |P1|*|P2| = alfa*beta - min(|P1|,|P2|)*|Ca|
<br> m <= alfa*beta - min(|P1|,|P2|)*|Ca| <= alfa*beta.
 
 
Creo que esto tampoco esta del todo bien, no es cierto que <br> beta = min(|P1|,|P2|)
 
Si tenes el grafo bipartito P1 = (1,2,3,4) , p2 = (5,6,7,8) con los ejes
<br> {(2,6),(3,6),(4,5),(4,7),(4,8)},
el recrubrimiento minimo se alcanza con los nodos 4 y 6, entonces beta = 2 != min(|P1|,|P2|) = 3 (el nodo 1 esta aislado). Igual no se me ocurre bien como hacerlo...
 
otra forma
 
<math>\alpha</math>=#(conj. indep. maximo) y <math>\beta</math>=#(Recubrimiento minimo de aristas)
<br><math>m \leq  \sum d(v) \leq \sum I =  \alpha * \beta </math>
 
la <math>\sum d(v) </math>, es de 1 hasta el cardinal del recubrimiento minimo de aristas.
 
'''Otra forma simple y en criollo:'''
 
En un bipartito '''sin nodos aislados''' entonces alfa y beta son iguales al maximo entre |P1| y |P2| dado que el maximo conjunto independiente va a ser el tamaño de la partición más grande, y el minimo numero de aristas que se necesitan para cubrir a todos los nodos también, porque sino va a haber nodos en la particion grande que van a quedar sin cubrir.
 
Ademas, m <= |P1|*|P2| porque a lo sumo se tiene tantas aristas como en el completo que "le corresponde".
 
En contreto, sea M el maximo entre |P1| y |P2|, por lo anterior
alfa = beta = M
 
Entonces:
m <= |P1|*|P2| <= M*M = alfa*beta
 
Y si '''se tiene k nodos aislados''' entonces aglutinamos todos
los nodos aislados en la particion mas grande.
 
Ahora ellos no contribuyen aristas, con lo cual, si llamamos n' y m' al numero de nodos y aristas del grafo que resulta de eliminar los k nodos aislados, se tiene que:
m' = m y n' = n - k <= n
y ademas
alfa' = alfa - k
donde alfa' es el conjunto independiente maximo del grafo sin los nodos aislados.
 
Ahora, por lo anterior tenemos que beta' = beta (porque no cambiamos las aristas) y que:
m' <= alfa' * beta' = (alfa - k) beta <= alfa * beta


==Ejercicio 10.06:==
==Ejercicio 10.06:==
Línea 156: Línea 206:


==Ejercicio 10.18:==
==Ejercicio 10.18:==
Matching maximo en grafo bipartito (V1 son las comisiones, V2 son las personas).
Para resolver esto con flujo maximo, se agrega una fuente artificial f y un sumidero artificial.
Se transforman los ejes en arcos de V1 a V2, se agregan arcos de s a todo v en V1, y arcos de todo v en V2 a t.
A cada arco se le asigna una capacidad de 1.
El flujo maximo es la cardinalidad del matching maximo, y los arcos entre V1 y V2 que tiene flujo = 1 son los correspondientes al matching en el grafo orginal.
Para mas detalle, ver [Cormen, Introduction to Algorithms, Cap 26 (Maximun Flow)]
==Ejercicio 10.19:==
==Ejercicio 10.19:==
Agregar s conectado a x1, x2, x3, con capacidad 5, 10, 5 respectivamente, y agregar t conectado a y1, y2, y3 con flujo entre [5..inf],[10..inf],[5..inf] respectivamente
Agregar s conectado a x1, x2, x3, con capacidad 5, 10, 5 respectivamente, y agregar t conectado a y1, y2, y3 con flujo entre [5..inf],[10..inf],[5..inf] respectivamente
Ten en cuenta que todas las contribuciones a Cuba-Wiki pueden ser editadas, modificadas o eliminadas por otros colaboradores. Si no deseas que las modifiquen sin limitaciones, no las publiques aquí.
Al mismo tiempo, asumimos que eres el autor de lo que escribiste, o lo copiaste de una fuente en el dominio público o con licencia libre (véase Cuba-Wiki:Derechos de autor para más detalles). ¡No uses textos con copyright sin permiso!

Para editar esta página, responde la pregunta que aparece abajo (más información):

Cancelar Ayuda de edición (se abre en una ventana nueva)

Plantilla usada en esta página: