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 1: Línea 1:
{{Back|Algoritmos y Estructuras de Datos III}}
==Propiedades==
==Propiedades==
(Para todo G: grafo)  
(Para todo G: grafo)  
Línea 16: Línea 14:
* (DEF) M es un '''matching maximo''' <=> no existe un camino alternado entre pares de nodos no saturados
* (DEF) M es un '''matching maximo''' <=> no existe un camino alternado entre pares de nodos no saturados
* (TEO) Si M es un matching máximo y Rn un recubrimiento mínimo de los vertices de G -> |M|+|Rn|=n
* (TEO) Si M es un matching máximo y Rn un recubrimiento mínimo de los vertices de G -> |M|+|Rn|=n
* (TEO) Si I es un conjunto independiente máximo y Re un recubrimiento mínimo de los ejes de G -> | I | + |Re| = n
* (TEO) Si S es un conjunto independiente maximo y Re un recubrimiento mínimo de los ejes de G -> |I|+|Re|=n
 
* (DEF) Una '''red''' N es un grafo orientado conexo que tiene dos nodos distinguidos una fuente s con grado de salida positivo y un sumidero t con grado de entrada positivo.
* (DEF) Una '''red''' N es un grafo orientado conexo que tiene dos nodos distinguidos una fuente s con grado de salida positivo y un sumidero t con grado de entrada positivo.
* (DEF) Una '''función de capacidades''' en la red es una función c(e)>=0 definida para todo e en EN
* (DEF) Una '''función de capacidades''' en la red es una función c(e)>=0 definida para todo e en EN
Línea 45: Línea 44:


==Ejercicio 10.01:==
==Ejercicio 10.01:==
a)
<br>a)
<br>b)
<br>b)
<br>c)
<br>c)
Línea 51: Línea 50:


==Ejercicio 10.02:==
==Ejercicio 10.02:==
<br>a) V
<br>a) F (Un grafo sin ejes no tiene)
aca uno cree que un grafo sin ejes lo hace falso, pero este si es un matching, es un conj vacio. si revisan la definición, con el conj vacio vale. Un conj de ejes G contenido en E, el vacio, tal que para todo vertice es G, v incide hasta en un eje de M, la defición la cumple. el truco es ver el a lo sumo.
<br>b) F (Idem a)
 
 
<br>b) F El grafo sin ejes no posee un recubrimiento de vertices, ya que en un recubrimiento los vertices deben ser adyacentes a al menos un eje.
<br>c) V (En todo grafo, un solo vertice es conj. indep)
<br>c) V (En todo grafo, un solo vertice es conj. indep)
<br>d) V (En todo grafo, todos los vertices forman un recub. de ejes)
<br>d) V (En todo grafo, todos los vertices forman un recub. de ejes)
<br>e) V El matching maximo en peor caso tiene n/2 ejes (seria uno con todos los pares de vertices, salvo n impar, entonces queda uno aislado), que a su vez es el minimo de ejes de un recub. de vertices, por la misma razon -> |M| <= |Rv|
<br>e) V El matching maximo en peor caso tiene n/2 ejes (seria uno con todos los pares de vertices, salvo n impar, entonces queda uno aislado), que a su vez es el minimo de ejes de un recub. de vertices, por la misma razon -> |M| <= |Rv|
<br>f) Falso. Si el grafo no tiene ejes, el vertex cover es vacio y el independent set puede ser todo el grafo.
<br>f) V El conjunto indep. maximo en peor tiene tiene n vertices, entonces cada uno estaria en un clique distinto, y entonces el recub. de ejes tiene como minimo n vertices en total -> |I| <= |Re| (mmm.. revisar)
<br>g) F (Por ejemplo el primero grafo del 10.1)
<br>g) F (Por ejemplo el primero grafo del 10.1)


Línea 69: Línea 65:
<br>c)Si no fuera minimal. entonces siempre se podrian sacar ejes del recub. y nunca seria minimal -> ABS
<br>c)Si no fuera minimal. entonces siempre se podrian sacar ejes del recub. y nunca seria minimal -> ABS
<br>d)Si un recub. de vertices contiene ciclos -> hay vertices cubiertos por mas de 1 eje -> no es minimal -> ABS. Si un recub. de ejes contiene ciclos -> hay ejes cubiertos por mas de 1 vertices -> no es minimal -> ABS
<br>d)Si un recub. de vertices contiene ciclos -> hay vertices cubiertos por mas de 1 eje -> no es minimal -> ABS. Si un recub. de ejes contiene ciclos -> hay ejes cubiertos por mas de 1 vertices -> no es minimal -> ABS
<br>e)n-1. Si hubiera más, habría un ciclo, y luego se podría sacar un eje. Será minimal ya que si sacamos algun eje, luego es posible que haya un vertice que quede sin cubrir.
<br>e)n-1. Si habría más, habría un ciclo, y luego se podría sacar un eje. Será minimal ya que si sacamos algun eje, luego es posible que haya un vertice que quede sin cubrir.
<br>f)Si existe un camino con long >= 3, por ej. a-b-c-d, entonces hay vertices cubiertos por 2 ejes (cuando se podria haber evitado elegir el eje b-c) -> no es minimal. La vuelta se hace suponiendo que no es minimal.
<br>f)Si existe un camino con long >= 3, por ej. a-b-c-d, entonces hay vertices cubiertos por 2 ejes (cuando se podria haber evitado elegir el eje b-c) -> no es minimal


==Ejercicio 10.04:==
==Ejercicio 10.04:==
La propiedad vale para cualquier conjunto independiente y cualquier recubrimiento, no es necesario que sean máximo y mínimo respectivamente.
Si G tiene un conjunto independiente de n nodos, entonces cada uno esta en un clique distinto, y el cubrimiento minimo tiene por lo menos n cliques -> |I|<=|Rn|
 
Sean I y Rn un conjunto independiente y un recubrimiento de nodos. Para cada nodo de I hay al menos un eje en Rn que incide sobre él. Como I es independiente, a cada uno de sus elementos lo tocan ejes distintos. Entonces como máximo hay tantos nodos en I como ejes en Rn.


==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.
Posted by Alejandro
 
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.
 
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.


==Ejercicio 10.06:==
==Ejercicio 10.06:==
4.1,4.4
Ehh.. otro dia con mas tiempo lo analizo


==Ejercicio 10.07:==
==Ejercicio 10.07:==
Línea 96: Línea 88:


==Ejercicio 10.08:==
==Ejercicio 10.08:==
<br>a)El algoritmo asigna a cada conj. indep. maximo un color, por lo tanto no habra vertices adyacentes con el mismo color.  No da el numero cromatico
<br>a)El algoritmo asigna a cada conj. indep. maximo un color, por lo tanto no habra vertices adyacentes con el mismo color
 
<br>b)Y..como es NP-Completo debe ser fea :P
<br>b)Y..como es NP-Completo debe ser fea :P
<br>c) no, dado que no da el numero cromatico
<br>c)Creo que si
<br>d)MM.. puede ser
<br>d)MM.. puede ser


Línea 109: Línea 100:


==Ejercicio 10.10:==
==Ejercicio 10.10:==
<br>a)s-c-a-b-t , s-c-b-t y s-c-t
<br>a)s-b-t y s-c-b-t
<br>b)F=4
<br>b)F=4
<br>c)No es lo mismo que b)?
<br>c)No es lo mismo que b)?


==Ejercicio 10.11:==
==Ejercicio 10.11:==
F=12
Cuentas cuentas..


==Ejercicio 10.12:==
==Ejercicio 10.12:==
Línea 144: Línea 135:
<br>... Y podemos disminuir el flujo del camino en min(f(ei)-c(ei))
<br>... Y podemos disminuir el flujo del camino en min(f(ei)-c(ei))


<br>
Posted By Alejandro
No pense lo que pusieron arriba, pero lo saque de un libro y decia que se hacia en dos pasos. el primero es ver si el flujo es factible. el segundo paso es convertir el problema haciendo que todos las cotas inferiores sean cero. esto se logra haciendo que en la red residual rij = (uij-xij)+(xij-lij) donde uij es la cota de capacidad del arco y lij la cota inferior del flujo. (por las dudas ver , Network Flows,Ravindra K. Ahuja,Thomas L. Magnanti,James B. Orlin pag 192)


==Ejercicio 10.16:==
==Ejercicio 10.16:==
==Ejercicio 10.17:==
==Ejercicio 10.17:==
 
Despues lo dibujo
Yo lo que hice fue , por cada ciudad un nodo. Y cada eje entre ciudades existe si algun turista puede viajar. La cantidad de lugares entre ciudades es la capacidad.
El flujo maximo es lo que decide si los 10 turistas pueden viajar. A mi me dio Flujo Max=11, asi que los 10 turistas puede llegar a Viena.
 
Aca faltaria algo mas formal para decir que esto esta bien.


==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
Línea 172: Línea 149:


==Ejercicio 10.21:==
==Ejercicio 10.21:==
<br>a) =>) Como exiten k caminos que no tienen aristas en comun,cualquier corte por aristas debera cortar todos los caminos,por lo tanto debera tener al menos k arcos, cada uno de los k caminos.
<br>a) (Revisar) =>) Facil <=) Sup. no fueran disjuntos. Existe un corte de menos de k arcos ABS
<br> <=) (Hago observacion que esto lo consulte en clase, porque no tenia ni la minima idea de como hacerlo)
<br> El grafo no es dirigido, para solucionar este problema se lo convierte en uno dirigido duplicando las aristas con capacidad 1. Se pone a como fuente "s" y a b como sumidero "t". Si todo corte tiene al menos k arcos en el grafo original, en el nuevo grafo dirigido tendra k arcos que salen.
En todos los cortes de la red,la capacidad sera almenos k (por esos arcos que salen).
El flujo maximo es al menos k, ya que todos los cortes tienen almenos esa capacidad. Se calcula el flujo, y se consideran los ejes con flujo 1. Por conservacion del flujo se puede llegar de "a" a "b" por un camino.
Ahora se eliminan estas aristas del grafo y el nuevo flujo sera de almenos k-1.
 
<br>b)
<br>b)


==Ejercicio 10.22:==
==Ejercicio 10.22:==
<br>a)Cambios los ejes por ejes direccionados en ambas vias con capacidad 1, y busco el flujo maximo.
<br>a)Con DFS sacando ejes usados
<br>b)
<br>b)Con DFS sacando vertices usados


==Ejercicio 10.23:==
==Ejercicio 10.23:==
Línea 197: Línea 168:
<br>a)
<br>a)
<br>b)
<br>b)
<br>c) En un corte la capacidad esta dada por :
<br>c)
<br> <math>  \sum_{e \in SS^c} c_{ij} - \sum_{e \in S^cS} b_{ij} </math>
<br> Observacion : Comparar esto con el corte cuando no hay limite inferior, aca estamos obligados a mandar flujo encontra.
<br> Supongamos <math> v </math> el valor de un flujo valido y  el flujo que pasa por cada arista  <math> x_{ij} </math>. Entonces
<br> <math>  v = \sum_{e \in SS^c} x_{ij} - \sum_{e \in S^cS} x_{ij} </math>
En particular vale que <math> x_{ij} \leq c_{ij} </math> y <math> x_{ij} \geq b_{ij} </math>. Usando esto vale que :
<br>  <math> v \leq  \sum_{e \in SS^c} c_{ij} - \sum_{e \in S^cS} b_{ij} </math>
<br>d)
<br>d)
<br>e)
<br>e)
<br>f)
<br>f)
==Ejercicio 10.27:==
==Ejercicio 10.27:==
<br>a)
<br>a)
Línea 213: Línea 177:
<br>c)
<br>c)
==Ejercicio 10.28:==
==Ejercicio 10.28:==
[[Category: Prácticas]]
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: