You are on page 1of 111

Resumen de Discreta II

Maximiliano Illbele 16 de agosto de 2012

ndice
1. Coloreo y repaso de grafos 1.0.1. BFS-DFS . . . . . . . . 1.1. Coloreo . . . . . . . . . . . . . 1.1.1. Nmero Cromtico . . . 1.1.2. Algoritmo Greedy para 1.1.3. Propiedades de Greedy . 1.1.4. Heursticas . . . . . . . . . . . . . . . . . . . . . . . coloreo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 . 5 . 6 . 6 . 7 . 8 . 10 12 14 14 15 15 16 20 21 23 24 27 28 29 30 32 33 35 36 36 38 39

2. Flujos en networks 2.1. Algoritmo de Greedy para hallar Flujo . . . 2.1.1. Ejemplos de Greedy . . . . . . . . . 2.1.2. Complejidad de Greedy . . . . . . . . 2.2. Algoritmo de Ford y Fulkerson . . . . . . . . 2.2.1. Lema del Camino Aumentante . . . . 2.3. Teorema: Max-Flow Min-Cut . . . . . . . . 2.3.1. Complejidad de Ford Fulkerson . . . 2.4. Algoritmo de Edmonds Karp . . . . . . . . . 2.4.1. Complejidad de Edmonds-Karp . . . 2.4.2. Ejemplo de Edmonds Karp . . . . . . 2.4.3. Pseudo-Cdigo de Edmonds Karp . . 2.5. Algoritmos Tipo Dinic . . . . . . . . . . . . 2.5.1. Esquema general Tipo Dinic . . . . . 2.5.2. Ejemplo de Dinic . . . . . . . . . . . 2.5.3. Pseudo Cdigo algoritmos Tipo Dinic 2.5.4. Complejidad de Dinic . . . . . . . . . 2.6. Algoritmo Wave de Tarjan . . . . . . . . . . 2.6.1. Pseudo Cdigo de Wave . . . . . . . 2.6.2. Complejidad de Wave . . . . . . . . . 2.6.3. Ejemplos de Wave . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . .

3. MST 3.1. Kruskal . . . . . . . . . . . . . . . . . . . 3.1.1. Pseudo Cdigo de Kruskal . . . . . 3.1.2. Teorema: Kruskal devuelve un MST 3.1.3. Complejidad de Kruskal . . . . . . 3.1.4. Kruskal Delete . . . . . . . . . . . 3.1.5. Complejidad Kruskal Delete . . . . 3.1.6. Ejemplo de Kruskal . . . . . . . . . 3.2. PRIM . . . . . . . . . . . . . . . . . . . . 3.2.1. Pseudo Cdigo de Prim . . . . . . 3.2.2. Correctitud de Prim . . . . . . . . 3.2.3. Ejemplo de Prim . . . . . . . . . . 3.3. Implementaciones de Union Find . . . . . 3.3.1. Union Find con listas enlazadas . . 3.3.2. Union Find con Representantes . . 3.3.3. Union Find con ranking . . . . . .

. . . . . . . . . . . . . . .

. . . . . . . . . . . . . . .

. . . . . . . . . . . . . . .

. . . . . . . . . . . . . . .

. . . . . . . . . . . . . . .

. . . . . . . . . . . . . . .

. . . . . . . . . . . . . . .

. . . . . . . . . . . . . . .

. . . . . . . . . . . . . . .

. . . . . . . . . . . . . . .

. . . . . . . . . . . . . . .

. . . . . . . . . . . . . . .

. . . . . . . . . . . . . . .

. . . . . . . . . . . . . . .

. . . . . . . . . . . . . . .

. . . . . . . . . . . . . . .

. . . . . . . . . . . . . . .

. . . . . . . . . . . . . . .

41 42 43 43 44 44 44 45 46 46 46 47 48 48 48 49 51 51 53 53 53 54 55 60 61 62 62 63 63 65 67 68 71 74 75 80 80 87 90 90 90 91 91

4. Matchings 4.1. Transformacin del problema de Matching a uno de ujo maximal 4.2. Teorema de Hall . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.3. Complejidad del Algoritmo de Matching . . . . . . . . . . . . . . 4.4. Grafos con Peso . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.4.1. Algoritmo de Gross . . . . . . . . . . . . . . . . . . . . . 4.4.2. Ejemplo del algoritmo de Gross . . . . . . . . . . . . . . 4.5. Prueba del teorema de HALL . . . . . . . . . . . . . . . . . . . . 4.6. Teorema del Matrimonio . . . . . . . . . . . . . . . . . . . . . . . 4.7. Minimizar la Suma . . . . . . . . . . . . . . . . . . . . . . . . . . 4.7.1. Ejemplo de Matching que minimiza la Suma (A ojo) . . . 4.7.2. Algoritmo Hngaro . . . . . . . . . . . . . . . . . . . . . . 4.7.3. Ejemplo del algoritmo Hngaro . . . . . . . . . . . . . . . 4.7.4. Complejidad de algoritmo Hungaro . . . . . . . . . . . . . 4.7.5. EJEMPLO DEL MEJORADO (FALTA) . . . . . . . . . . 5. Cdigos de correcin de errores 5.1. Cota de Hamming . . . . . . . . . 5.2. Matriz generadora . . . . . . . . . 5.3. Matriz de chequeo . . . . . . . . . 5.4. Cota Singleton . . . . . . . . . . 5.5. Cdigos Cclicos . . . . . . . . . . 5.5.1. Correcin de errores Error 6. P-NP 6.1. La clase P . 6.2. La Clase NP 6.3. Co-NP . . . 6.4. SAT . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Trapping

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . . 2

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

6.4.1. Reduccin Polinomial . . . 6.4.2. k color P SAT . . . . 6.5. NP Completo . . . . . . . . . . . 6.5.1. 3-SAT es NP completo . . 6.5.2. 3-color es NP completo . . 6.5.3. Ejemplo 3-SAT P 3-color 6.5.4. 2-SAT P . . . . . . . . . 6.5.5. HORN-SAT . . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

92 92 94 94 96 97 100 101 102 102 102 102 102 103 103 104 104 104 104 105 105 107 107 108 109 110 110 111

7. Introduccin a la Inteligencia Articial 7.1. Hill Climbing . . . . . . . . . . . . . . . . . . . . 7.2. Simulated Annealing . . . . . . . . . . . . . . . . 7.3. Algoritmos Evolutivos . . . . . . . . . . . . . . . 7.4. Algoritmos Genticos . . . . . . . . . . . . . . . . 7.4.1. Seleccin . . . . . . . . . . . . . . . . . . . 7.5. Ejemplo de un AG . . . . . . . . . . . . . . . . . 7.5.1. Codicacin del ejemplo . . . . . . . . . . 7.5.2. Fitness del ejemplo . . . . . . . . . . . . . 7.5.3. Entrecruzamiento del ejemplo . . . . . . . 7.5.4. Mutacin del ejemplo . . . . . . . . . . . . 7.5.5. Seleccin del ejemplo . . . . . . . . . . . . 7.5.6. Operadores de Seleccin . . . . . . . . . . 7.5.7. Remainde Methods (Mtodos del Resto) 7.5.8. Otros mtodos Fitness Proportional . . . . 7.5.9. Sigma Scaling . . . . . . . . . . . . . . . . 7.5.10. Crossover . . . . . . . . . . . . . . . . . . 7.5.11. Mutacin . . . . . . . . . . . . . . . . . . 7.5.12. Mutaciones con Permutaciones . . . . . . . 7.6. No Free Lunch . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . .

1.

Coloreo y repaso de grafos

Recordemos que un grafo G es un par (V, E ) donde E {A V : |A| = 2}. Donde V es el conjunto de vrtices o nodos y E es el conjunto de lados1 o aristas. Ejemplo: sea G = {1, 2, 3}, {1, 2}, {1, 3} Grco(G) :

1`

`` `` `` `

2 Notacin usual {x, y } xy

Vecinos de un nodo x: (x) = {y V : xy E } Grado2 o Valencia de un vrtice: d(x) = (x) Menor valencia de G: = m n{d(x) : x V } Mayor valencia de G: = m ax{d(x) : x V } Deniciones Un grafo es regular si = , a veces llamados k-regular. Un camino es una sucesin de vrtices x1 , x2 , . . . , xt todos distintos tales que xi xi+1 E . Un grafo es conexo si par de vrtices un camino entre ellos. Conexo

Disconexo
5

1 aa

2 En general denimos x y camino entre x e y .

4 aa aa aa 3

1 aa

aa aa aa 3

4 aa

aa aa aa

Ejercicio: demostrar que es una relacin de equivalencia. 1. Reexividad: x x 2. Simetra: x y y x 3. Transitividad:


1 2

xy yz

xz

Edges. Degree.

Una componente conexa de G es una clase de equivalencia de la relacin . Notacin La cantidad de vrtices: n = |V |. La cantidad de lados: m = |E |. Observacin m n 2 =
n(n1) 2

Si G es conexo n 1 m 1.0.1. BFS-DFS DFS(x)-Depth First Search3 Su funcionamiento consiste en ir expandiendo todos y cada uno de los nodos que va localizando, de forma recurrente, en un camino concreto. Cuando ya no quedan ms nodos que visitar en dicho camino, sube en el rbol, de modo que repite el mismo proceso con cada uno de los hermanos del nodo ya procesado. Ejemplo DFS

A z ccc zz cc z cc zz z 1 c zz D C B y dddmmm yy mmmmm d y dd yymmmm dd 1 1 yyy m m m m E G


1

DF S (A)

A
1

N ivel 0 N ivel 1 N ivel 2 N ivel 3 N ivel 4 N ivel 5

B
1

C
1

Dd
1

dd dd dd d

G
1

DFS: Bsqueda en profundidad.

BFS(x) - Breadth First Search4 Intuitivamente, se comienza en la raz x y se exploran todos sus vecinos. A continuacin para cada uno de los vecinos se exploran sus respectivos vecinos adyacentes, y as hasta que se recorra todo el Grafo. Ejemplo BFS BF S (A)

Ac cc zz z cc z z cc zz 1 c z z D B C y dddmmm yy mmmmm dd y dd yymmmm 1 yyy d 1 m m mm E G


1

B
1

A ss ccc s s cc ss cc sss s 1 c s ss C
1

N ivel 0 N ivel 1 N ivel 2 N ivel 3

G
1

1.1.

Coloreo

Un coloreo (propio) de G = (V, E ) con k colores es una funcin C : V {1, 2, . . . , k } tal que si: xy E C (x) = C (y ) Ejemplo de coloreo A(1)

pp x pp xx pp x pp xx x 1 p x x D (2) C (3) B (2) pp kkkk x pp xx kkkkk pp x x kkk pp 1 x k k 1 xxx p k kkk

E (1)

G(1)
1

F (2) 1.1.1. Nmero Cromtico

En general deseamos calcular el nmero cromtico de G : (G). Donde (G) = m n{k : un coloreo propio de G con k colores }. Propiedad: 1 (G) n
4

BFS: bsqueda en anchura.

1.1.2.

Algoritmo Greedy para coloreo

Requiere un orden de los vrtices: x1 , . . . , xn . Inicio: C (x1 ) = 1 Para j > 1 C (xj ) = El menor color que no crea conicto con los vrtices ya coloreados. C (xj ) = m n k : C (xi ) = k i < j : xi (xj ) Invariante: en todo momento el coloreo es propio, por lo tanto al terminar da un coloreo propio. Ejemplo:
D dd ~B ddd C ~ ~ dd ~ ~  d ~ ~ dd  dd ~ ~ ~  ~ dd d  d ~~ ~~  d ~  d ~  ~~dd E Ad dd  ~~~ ddd ~~  dd ~ dd ~ dd  ~~~ dd ~~~ d ~~ ~

Orden alfabtico Vrtices A B C D E Color 1 2 1 2 1

F 3

G 4

Orden alternativo G C D F B A 1 2 3 2 1 2

E 1

Complejidad de coloreo con Greedy O d(x1 ) + d(x2 ) + . . . + d(xn ) = O(2m) = O(m) Teorema: sea G = C2r+1 (G) = 3 Prueba: Supongamos que (G) = 2 Sea A el color del primer vrtice. Sea B el color del segundo vrtice. x1 x2 E A = B Como estamos suponiendo (G) = 2 estos son los nicos colores que podemos usar. Como x2 x3 E C (x3 ) = B C (x3 ) = A Como5 x3 x4 E C (x4 ) = B Por induccin: C (xi ) = A cuando i es Impar B cuando i es Par

Pero entonces el lado x1 x2r+1 tiene los 2 vrtices del mismo color Absurdo.
A
5

Este paso es slo ilustrativo no forma parte de una demostracin formal ya que no sabemos si n > 3 n = 3.

(G) 3 Y est claro que con 3 colores alcanza denimos: A cuando i es Impar < 2r + 1 B cuando i es Par C (xi ) = C cuando i = 2r + 1 Corolario: si C2r+1 G (G) 3 Denicin: un grafo G es bipartito si: (G) = 2 Teorema: G es bipartito C2r+1 G Ms an existe un algoritmo de complejidad polinomial para determinar si G es bipartito o no. Prueba: el algoritmo que daremos da un coloreo (propio) con dos colores, si (G) = 2, y si el algoritmo colorea con ms de 2 colores entonces veremos que existe C2r+1 G (G) 3 En realidad esto lo haremos para cada componente conexa de G. Vamos a suponer G conexo. Sea x V , y corramos BF S (x) y tomemos el siguiente coloreo que puede no ser propio: 0 Nivel BF S (x), z es Par C (z ) = 1 Nivel BF S (x), z es Impar Si ese coloreo es propio ya est. Supongamos que no v, w : vw E : C (v ) = C (w) Como vw E y estamos usando BFS, Si v fue puesto antes que w en el rbol entonces debe ser: nivel(w) = nivel(v + 1) Absurdo pues nivel(v ) nivel(w) (2) O bien nivel(v ) = nivel(w) Hay un ciclo impar (G) 3 1.1.3. Propiedades de Greedy

Analizando a Greedy, podemos decir que en ciertos casos puede andar muy mal Ejemplo: Sea G : V = {1, . . . , 2r} y con E = ij i es Impar j es P ar y j =i+1

Para simplicar veamos el grafo correspondiente a r = 4 x1 f x f iii x i mm |x3 f m | 5 | 7 i m mm ff f f i m m | | | i f f m m i |ii m i m m f| f f| | i | m m i f f| f| m | | m m i f ff f m m i | | |m i m m f f i m m | | | i i f f f m | | iii mm mm | i x2 x4 x6 x8 8

Luego Greedy corriendo en orden x1 , . . . , x2r = x8 va a necesitar r = 4 colores: Color Vrtice 1 x1 x2 2 x3 x4 3 x5 x6 4 x7 x8

Pero si denimos C (xi ) =

1 i es impar nos queda que (G) = 2 2 i es par

Conclusin: Greedy (G) devuelve un coloreo que usa r colores, pero vimos que (G) = 2. Sin embargo . . . Propiedad: G un ordenamiento {x1 , . . . , xn } de los vrtices de G en el cual Greedy() obtiene: (G) Prueba: sea t = (G) Sean V1 los vrtices de color 1 Sean V2 los vrtices de color 2 en algn coloreo (propio) con t colores. . . . Sean V los vrtices de color t
t

Induccin en t: Si t = 1 obvio. Supongamos que vale para t 1 Orden de los vrtices: Los de V1 < los de V2 < . . . < los de Vt , en Vi los ordeno como quiero. Por hiptesis inductiva hasta Vt1 lo coloreamos con t 1 colores. Los de Vt no estn unidos entre si Greedy en cada uno de sus vrtices usar uno de los primeros t 1 colores o el color t, nunca hay conicto entre ellos que demande un color t + 1. Propiedad: (G) + 1 Prueba: usar Greedy en cualquier orden. Cuando vayamos a colorear xi lo peor que puede pasar es que todos los vecinos ya estn coloreados y con colores distintos, esto forzara a Greedy() a usar un color distinto a esos d(xi ) de esos colores. Pero d(xi ) Greedy con + 1 colores se las arregla.

Ms an, si G es conexo o todas sus componentes conexas sean no regulares, tenemos que: = (G) Prueba: sea x V : d(x) = Corramos BF S (x)6 y sea x1 , . . . , xn el orden inverso al de BFS(x) xn = x En BF S (x)7 todo vrtice, salvo x es incorporado al rbol por medio de un vecino que ya est en el rbol. En el orden inverso todo vrtice distinto de x tiene un vecino posterior en el orden ( x1 , . . . , x n ) . Cuando Greedy va a colorear xi : i < n, como xi tiene por lo menos un vecino posterior entonces xi tiene d(xi ) 1 vecinos anteriores. Hay a lo sumo d(xi ) 1 1 posibles conictos. Greedy puede colorear con alguno de los colores. Ahora queda colorear xn = x Greedy necesita usar d(x) + 1 colores: d(x) = < + 1 Ejemplos donde (G) = + 1 1. Los ciclos impares: (C2r+1 ) = 3 = 2 + 1 = + 1 2. Los grafos completos: (Kn ) = n = (n 1) + 1 = + 1 El teorema de Brooks dice que si G es conexo esos son los nicos ejemplos. 1.1.4. Heursticas

1. Welsh-Powell Greedy en el orden: d(x1 ) d(x2 ) . . . d(xn ) 2. Matul-Marble-Isaacson xn : d(xn ) = Sea Gn1 = Gn xn Tomo xn1 : Gn1 (xn1 ) = (Gn1 ) y as seguimos . . . 1 b q www q q q 3 YYq 5 q q q bb w q w Y q q ww q Y q q b q w q Y q b www q q YY q b q q q b w q q w q b w Y q q q w q q q 2 4 6
q q 3 q q q q q q q q q q q q q q qq q q q q q q q q q q q q q q q q 5 3 bbb q q q q q q q b q b q q q q b qq q q bb q q q q q q q q q q q q p p p p 5 3 p p p p p p p p p p p pp p p p p p p p p p p p p p p p

2
6 7

3 2

O lo mismo DF S (x). O DF S (x).

10

Luego corro Greedy con: x6 = 1 x5 = 6 x4 = 4 x3 = 5 x2 = 3 x1 = 2 Es decir en el orden: 2, 3, 5, 4, 6, 1 Y nos da (G) = 2 3. RLF: Recursive Largest First
1 RLF( ) 2 { 3 color = 1; 4 R = V; // Vrtices no C o l o r e a d o s 5 while ( R = ) { 6 L = R; 7 while ( L = ) { 8 Tomar v de L : V t e n g a l a mayor c a n t i d a d de v e c i n o s en R 9 Color ( v ) = c o l o r ; 10 Remover ( v ) de R; 11 Remover ( v ) y ( v ) de L ; 12 } 13 C o l o r ++; 14 } 15 }

4. D-Satur d5 (x) = #de colores de los vecinos coloreados de x . Corre Greedy con un orden dinmico eligiendo como prximo vrtice el que tenga d5 ms grande.

11

2.

Flujos en networks

Un network (dirigido) es un grafo dirigido, es decir un par (V, E ) : E V V con pesos en los lados, es decir con una funcin C : E R. En este contexto siempre pediremos C : E R0 y los C (x, y ) se llaman capacidades. Notacin: (x,y) xy (si se sobreentiende por el contexto tambin xy ). + (x) = {y V : xy E }. (x) = {y V : yx E }. (x) = + (x) (x). Denicin: dado un network N = (V, E, C ) y vrtices distinguidos s, t V , un ujo en N , de s a t es una funcin f : E R tal que: 1. Feasability8 : 0 f (xy ) C (xy ) xy E 2. Conservacin:
y + (x)

f (xy ) =
y (x)

f (yx) x = s, t

3. s Productor:
y + (s)

f (sy )
y (s)

f (ys)

Como s produce se llama la fuente9 y t se llamar resumidero10 . En algunos textos se pide directamente que: f (ys) = 0
y (s)

O ms an: C (ys) = 0 y (s) Notacin: f (xy ) = Outf (x)


y + (x)

f (yx) = Inf (x)


y (x)

Denicin: el valor del ujo es V (f ) = Outf (s) Inf (s)

Viabilidad. Source. 10 Sink.


9

12

Propiedad: V (f ) = Inf (t) Outf (t) Prueba: Sea D = Inf (t) Outf (t) Outf (x) Inf (x) = 0 x = s, t V (f ) x = s D x = t

xV

Outf (x) Inf (x) = V (f ) D f (xy ) xA yB xy E Outf (x) =


xV xV y + (x)

Notacin: Si A, B V entonces f (A, B ) =

f (xy ) f (xy ) x, y V xy E

(1)

= f (V, V ) ( 1) Por denicin de Outf (x). ( 2) Notacin. Similarmente: Inf (x) =


x V xV y (x)

(2)

f (yx) f (yx) x, y V yx E

(3)

= f (V, V ) ( 3) Por denicin de Inf (x). Nos queda: f (V, V ) f (V, V ) = V (f ) D


=0

V (f ) = D

13

Problema a resolver: dado un network N hallar f que maximice V (f ). Esto se conoce como el problema del ujo maximal11 . Notacin: Sea s = x0 , x1 , . . . , xr = t : xi xi+1 E , la notacin: s, x1 , . . . , xr1 , t : Signica que se mandan unidades de ujo a travs de ese camino, es decir, si G era un ujo existente denimos: f (xy ) =

G(xi xi+1 ) + G( xy )

Si xy = xi xi+1 Si no

2.1.

Algoritmo de Greedy para hallar Flujo

Hasta que no se pueda ms buscar caminos de s a t y mandar ujo por ellos. 2.1.1. Ejemplos de Greedy

Todas las capacidades son 10, excepto C (EF ) = 15.


?A sb bb bb bb b /

Cd d

dd dd d /

E ~> ~ ~ ~~ ~~

> G bb bb ~~ ~ bb ~ ~ bb ~~  ?t dd dd dd d

Corremos Greedy en orden alfabtico 1. Primer camino: s, A, C, E, F, G, t: 10 2. Segundo camino: s, B, D, E, F, H, t: 5 3. No hay ms caminos posibles. Para este ejemplo podemos demostrar que no slo es ujo sino tambin que es

maximal, ya que, en pocas palabras C (EF ) = 15 y es un cuello de botella, y nos

da: f (EF ) = 15

Ejemplo: todas las capacidades son 1000 excepto: C (CD) = 1 y C (CB ) = 900
/B A G bb ? HH bb  HH   bb    H  bb  HH    H  sc  HH ?t cc  H  cc HH cc  H c  /D C

Corremos Greedy con el orden alfabtico


11

Por ahora no est claro que f exista.

14

1. Primer camino: s, A, B, t: 1000 2. Segundo camino: s, C, D, t: 1 3. Terminamos porque no hay ms posibles caminos. En este caso el ujo obtenido (1001) no es maximal, el ujo maximal correspondiente es: (1901) Eligiendo caminos obtenemos el ujo maximal correspondiente :1901 1. Primer camino: s, A, D, t: 999 2. Segundo camino: s, A, B, t: 1 3. Tercer camino: s, C, B, t: 900 4. Cuarto camino: s, C, D, t: 1 2.1.2. Complejidad de Greedy Greedy Buscar camino dirigido: O(m) Aumentar en ese camino: O(n) Total por aumento: O(m) + O(n) = O(m) Cuntos aumentos de ujo hay? En Greedy una vez que un lado se satura, es decir f (xy ) = C (xy ), no se vuelve a usar, ya que no se devuelve ujo. Adems sabemos que por cada aumento se satura al menos un lado. Hay a lo sumo m aumentos. Complejidad(Greedy ) = m O(m) = O(m2 )

2.2.

Algoritmo de Ford y Fulkerson

Denicin: un camino aumentante12 de s a t es una sucesin de vrtices: s = x0 , x1 , . . . , xr = t : i r 1 O bien: xi xi+1 E : f (xi xi+1 ) < C xi xi+1 estos son los lados Forward. O bien: xi+1 xi E : f (xi+1 xi ) > 0 i.e. que haya mandado ujo, lados Backward. Hasta que no se pueda ms buscar caminos aumentantes y mandar ujo por ellos.
12

Augmenting path.

15

2.2.1.

Lema del Camino Aumentante

Si f es un ujo y se aumenta a lo largo de un camino aumentante el resultado tambin es ujo. Ms an si se manda por el camino aumentante, el valor del nuevo ujo es V (f ) + . Prueba: Sea s = x0 , x1 , . . . , xr = t un camino aumentante. Sea
i

C (xi xi+1 ) f (xi xi+1 ) f (xi+1 xi )

para los lados forward para los lados backward

Elijo = m n{ i } Aumentar f es tomar f (xi xi+1 ) + f (xy ) = f (xi+1 xi ) f (xy ) Si xy = xi xi+1 forward Si xy = xi+1 xi backward en caso contrario

Queremos ver que f es ujo y que V (f ) = V (f ) + Feasability: Obvio por denicin de


i

, .

Conservacin: x = s, t x = xi : 0 < i < r. Hay que analizar 4 casos: 1. F-F: xi1 xi xi+1 Outf (xi ) = Outf (xi ) + // xi xi+1 Inf (xi ) = Inf (xi ) + // xi1 xi Outf (xi ) Inf (xi ) = Outf (xi ) Inf (xi ) + = 0 porque f es ujo. 2. F-B: xi1 xi xi+1 Outf (xi ) = Outf (xi ) Inf (xi ) = Inf (xi ) + Luego: Outf (xi ) Inf (xi ) = 0 3. B-F: xi1 xi xi+1 Inf (xi ) = Inf (xi ) Outf (xi ) = Outf (xi ) + Luego: Outf (xi ) Inf (xi ) = 0
+ + + +

16

4. B-B: xi1 xi xi+1 Inf (xi ) = Inf (xi ) Outf (xi ) = Outf (xi ) Luego: Outf (xi ) Inf (xi ) = 0 En el caso de s: 1. s x1 Outf (s) = Outf (s) + Inf (s) = Inf (s) V (f ) = V (f ) + 2. s x1 Outf (s) = Outf (s) Inf (s) = Inf (s) V (f ) = V (f ) ( ) = V (f ) +
+

Denicin: dado N = (V, E, C ) con vrtices s = fuente, t = resumidero. Un corte es un subconjunto S V : s S, t S Ejemplos de cortes: S = {s}. S = V {t}. Cuntos cortes hay? 2n2 La capacidad de un corte S es: Cap(S ) = C (S, S ) : S = V S = xS yS xy E C (xy )

17

Lema: sea N network, f ujo y S corte entonces: 1. V (f ) = f (S, S ) f (S, S ) 2. V (f ) Cap(S ) 3. Si V (f ) = Cap(S ) entonces f es Maximal, y S es Minimal i.e. el corte de menor capacidad. Prueba: 1. Observemos que: f (A B, C ) = f (A, C ) + f (B, C ) : A, B disjuntos. f (A, B C ) = f (A, B ) + f (A, C ) : B, C disjuntos. Adems: Outf (x) = f {x}, V Inf (x) = f V, {x} Adems si x S : Outf (x) Inf (x) = V (f ) Si x = s 0 Si x = s pues t S

Outf (x) Inf (x) = 0 + . . . + 0 + V (f )


x S

= V (f ) V (f ) =
x S

Outf (x)
xS

Inf (x)
x S

=
x S

f { x} , V

f V, {x}

(4)

= f (S, V ) f (V, S ) = f (S, S S ) f (S S, S )


$ $ $ $ $ $ =$ f( S, S ) + f (S, S ) f (S, S ) $ f( S, S )

(5) (6)

= f (S, S ) f (S, S ) ( 4) Por la observacin. ( 5) V = S S . ( 6) Disjuntos.

18

2. V (f ) = f (S, S ) f (S, S )
0 <0

V (f ) f (S, S ) C (S, S ) = Cap(S ) 3. Sea g un ujo cualquiera: V (g ) Cap(S ) = V (f ) f es maximal Similarmente, si T es corte tenemos que: Cap(T ) V (g ) g En particular elijo como ujo a f y me queda: Cap(T ) V (f ) = Cap(S ) S es minimal
2 Hip 2 2 Hip(3)

19

2.3.

Teorema: Max-Flow Min-Cut

En todo network el valor de todo ujo maximal es igual a la capacidad de todo corte minimal, es decir si f es maximal S corte : V (f ) = Cap(S ). Demostracin: dado f maximal13 construyamos S recursivamente as: s S por denicin. Si x S, y + (x) : f (xy ) < C (xy ) entonces agregamos y a S . Si x S, y (x) : f (yx) > 0 entonces agregamos y a S . Es decir S es el conjunto de vrtices que revisamos tratando de obtener un camino aumentante de s a t. Si t estuviera en S habra un camino aumentante de s a t. Por el lema del camino aumentante podramos construir un ujo g tal que: V (g ) = V (f ) + para algn > 0 V (g ) > V (f ) Absurdo pues f es maximal. t S i.e. S es corte. Slo resta ver que: V (f ) = Cap(S ) Por el lema anterior: V (f ) = f (S, S ) f (S, S ) x S f (xy ) = C (xy ) porque sino hubieramos agregado a y en algn momento. Si y S Def xy E f (S, S ) = C (S, S ) = Cap(S ) xS f (yx) = 0 f S, S = 0 Si y S yx E

V (f ) = f (S, S ) f (S, S ) = Cap(S ) 0 = Cap(S )

Corolario14 : Ford-Fulkerson es correcto i.e. si el output es un ujo f , entonces f es maximal. Prueba: el algoritmo aumenta a partir del ujo 0 usando caminos aumentantes hasta que no encuentra ms caminos. Sea f el ujo obtenido all.
13 14

Todava no demostramos que exista. De la demostracin.

20

Cuando < F F >15 intent aumentar f no pudo, entonces camino aumentante para f entre s y t. Los vrtices que se buscaron formaron un corte S . Por la prueba del teorema16 , tenemos que V (f ) = Cap(S ) entonces f es maximal por el lema previo al teorema. 2.3.1. Complejidad de Ford Fulkerson

Los lados se pueden des-saturar por lo tanto el anlisis de Greedy no vale. De todas maneras existen ejemplos en que < F F > no termina, por lo que no podemos hablar de su complejidad. Ejemplo en que < F F > no termina x1 ~? ~ ~~ ~~ ~  ~ / x2 sd dd dd dd d 

x3

/ y1 j cc cc cc cc   / y2 /2 t ?        / y3

Capacidades: todas 2 salvo: st : 1000 x1 y1 : 1 x2 y2 : r x3 y3 : r2 1+ 5 Donde: r = 2 es raz de: P (r) = r2 + r 1 Observacin: 1 r = r2 r r2 = r3 Satisface: 1 > r > r2 > . . . > rk > rk+1 Corramos < F F > 1. s, x1 , y1 , t : 1 2. s, x3 , y3 , y1 , x1 , x2 , y2 , t : r2 3. s, x2 , y2 , y3 , x3 , x1 , y1 , t : r3 4. s, x1 , y1 , y2 , x2 , x3 , y3 , t : r4 Luego < F F > repite (2) (3) (4) con r5 r6 r7 . . .
15 16

Denotaremos as al algoritmo de Ford-Fulkerson. Max Flow Min Cut.

21

< F F > no termina, ms an si fi son los ujos intermedios:


i

l m V (fi ) = 1 + r + r2 + r3 + . . .

=
i=0

ri r

1 r 1r 1 r(1 r) = =2 1r = Pero el ujo maximal es: 1002, mandando st = 1000. Observacin: si las capacidades son enteras entonces como el primer valor del ujo es 0 Z, y aumenta por: C f = m n{ i } : i = Z f Entonces ser un entero y los ujos intermedios tambin. Si les llamamos f1 , f2 , . . . V (fi+1 ) V (fi ) + 1. Como hay cota superior, como por ejemplo: Cap({s}), en algn momento debemos parar. Es decir si las capacidades son enteras < F F > siempre termina, inclusive cuando termina sabemos que el ujo que devuelve es entero, sumado al hecho de que < F F > termin, sabemos que ese ujo es maximal. Y llegamos a demostrar el Teorema de la integralidad: si las capacidades son enteras entonces existe un ujo maximal entero. Ejemplo ?Ab
bb  bb  bb   b   sc ?t cc cc cc c 

Capacidades: AB : 1, las dems: 106 Corremos < F F >: 1. s, A, B, t : 1

2. s, B, A, t : 1 Luego repetimos los pasos: (1 2) 2 106 veces, pero vamos a terminar en algn momento. Anexo: recordemos la notacin (u, v ) que referencia la longitud del menor camino entre u y v .

22

Lema: sea G un grafo conexo, dirigido o no, sea T = BF S (x) para algn x V , entonces: z V (z, x) = N ivelT (z ) Prueba: Como T G G (z, x) T (z, x) = N ivelT (z ) Para demostrar que vale el = lo vamos a hacer por induccin en (z, x). Caso base: (z, x) = 0 z = x N ivelT (z ) = 0 = (z, x) Paso inductivo: Supongamos que vale para (z, x) = k y tomemos un z con (z, x) = k +1. Por lo que vimos al comienzo de la prueba: k + 1 = G (z, x) N ivelT (z ) Si es igual ya est. Entonces supongamos que N ivelT (z ) = j > k + 1 Luego (z, x) = k + 1 un camino de longitud mnima entre x y z de la forma: x = x0 , x1 , . . . , xk , xk+1 = z Entonces x = x0 , x1 , . . . , xk es de longitud mnima entre x y xk (x, xk ) = k N ivelT (xk ) = k xk z E T =BF S (x) N ivelT (z ) = j |j k | 1 N ivelT (xk ) = k Ya que como son vecinos la diferencia de nivel es 0 1. P ero |j k | 1 j >k+1 Absurdo.
H.Ind ?

2.4.

Algoritmo de Edmonds Karp

En 1970 Edmonds y Karp dieron 2 heursticas, que de ahora en adelante llamaremos < E K >. Consiste en correr < F F > usando caminos aumentantes de longitud mnima: < E K > = < F F > +BF S

23

2.4.1.

Complejidad de Edmonds-Karp

Teorema: la complejidad17 de < E K > es O(nm2 ). Prueba: Supongamos que < E K > crea ujos intermedios: O = f0 , f1 , . . . El paso k es el paso que crea fk Deno: dk (x) = distancia entre s y x en el paso k . bk (x) = distancia entre x y t en el paso k . Distancia: longitud del menor camino aumentante entre dos vrtices. Lema interno dk (x) dk+1 (x) bk (x) bk+1 (x) Prueba: lo haremos para d ya que para b es similar. Sea A = z V : dk+1 (z ) < dk (z ) Queremos ver que A = , supongamos que no y lleguemos a un absurdo. Si A = tomamos q A tal que dk+1 (q ) dk+1 (z ) z A (1) Como q A dk+1 (q ) < dk (q ) (2) Observacin: q = s pues dk+1 (s) = dk (s) = 0 Sea s = x0 , x1 , . . . , xr1 , xr = q Un camino aumentante de longitud mnima r = dk+1 (q ) entre s y q . (El camino existe pues (2) dk+1 (q ) < ). Sea x = xr1 Tenemos: dk+1 (x) = r 1 = dk+1 (q ) 1 < dk+1 (q ) dk+1 (x) < dk+1 (q ) (3) dk+1 (x) < dk+1 (q ) x A por (1) (En otras palabras, como x est antes que q , no puede estar en A) Luego como x A dk (x) dk+1 (x) (4)

17

Recordando que: n = |V | y m = |E |.

24

Diremos que un lado (u, v ) est disponible en un paso j si: Es Forward con fj 1 (uv ) < C (uv ) Es Backward con fj 1 (vu) > 0 i.e. vu E Est disponible (x, q ) en el paso k ? Supongamos que s entonces: dk (q ) dk (x) + 1
(4)

dk+1 (x) + 1
(3)

= dk+1 (q ) Contradice (2) Absurdo!

Por lo tanto xq no est disponible en el paso k , pero s lo est en el paso k + 1. Entonces lo usamos para el otro lado en el paso k , i.e. (q, x) se us en el paso k . Como estamos usando < E K > los caminos aumentantes son de longitud mnima. dk (x) = dk (q ) + 1 (5) Entonces: dk+1 (q ) = dk+1 (x) + 1
(4) (3)

dk (x) + 1
(5)

= dk (q ) + 1 + 1 = dk (q ) + 2
(2)

> dk+1 (q ) + 2 0 > 2 Absurdo! Fin Lema Interno Continuando con el teorema, llamemos crtico a un lado disponible en un paso y no en el siguiente. Supongamos que xz se vuelve crtico en el paso k , antes de poder ser crtico otra vez debe ser usado en la otra direccin, sea L > k el paso donde se usa la prxima vez para el otro lado. dk (z ) = dk (x) + 1 Pues estoy en < E K > entonces d (x) = d (z ) + 1 L L dL (t) = dL (x) + bL (x) = dL (z ) + 1 + bL (x) dk (z ) + 1 + bk (x) = dk (x) + 1 + 1 + bk (x) = dk (t) + 2 25

(7) (8) (9)

dL (t) dk (t) + 2 ( 7) Por ( 8) Por el Lema Interno ( 9) Por Por lo tanto cuando un lado se vuelve crtico recin puede volver a usarse cuando la distancia a t haya aumentado en por lo menos 2. # Veces que un lado puede volverse crtico = O(n)
1 Exactamente sera: n 2 Complejidad de cada bsqueda BF S + Aumento = O(m) + O(n) = O(m) En cada aumento al menos un lado se vuelve crtico. Hay m lados y cada uno se vuelve crtico O(n) veces.

Complejidad(< E K >) = O(m) O(m) O(n) = O(nm2 )

Corolario de la complejidad de < E K > Siempre existe un ujo maximal.

26

2.4.2.

Ejemplo de Edmonds Karp Caminos Primer Camino: s, A, B, t : 10 A C B E F I D K s s A A A A C C 20 20 20 3 10 3 10 10 Segundo B E A A 10 3 Camino: s, A, I, t : 3 F I D K J A A C C B 10 3 10 10 10

Capacidades sA:20 s sC:20

t B 10

AB:20 s AE:3 A s 10 C s 20

G E 3

H E 3

t I 3

AF:10 s AI:3 A C s s 7 10

Tercer Camino: s, C, D, t : 10 B E F D K I J G A A A C C B B E 7 3 7 10 10 7 7 3 Camino: s, A, B, I, t : 7 E F K I J G A A C B B E 3 7 10 7 7 3

H t E D 3 10

Bt:10 s BI:10 BJ:10 CD:10 s CK:10 Dt:22

Cuarto A C B s s A 7 10 7

H t E I 3 7

Quinto Camino: s, C, K, I, B, D, t : 2 C K I A B E F J G H t s C K I I A A B E E J 10 10 10 3 7 3 3 7 3 3 2

EG:10 s EH:10 FG:10

Sexto C K s C 8 8

Camino: s, C, K, I, A, E, G, D, t : 3 I A B E F J G H D K I I A A B E E G 8 3 5 3 3 5 3 3 3

t D 3

GD:3 HD:10 It:10 Jt:2

Sptimo Camino: s, C, K, I, B , A, F, G, E, H, D, t : 3 s C K I B J A F G E H D t s C K I B B A F G E H D 5 5 5 5 5 5 5 5 3 3 3 3 Octavo C K s C 2 2 Camino?: No llega I B J A K I B B 2 2 2 2 at F G A F 2 2

s KI:10

27

Obtengo el Corte: S = {s,c,k,i,b,j,a,f,g} Capacidad del corte S Cap(S ) =10 + 10 + 10 + 2 + 3 + 3 = 38 cd + it + bt + dt + ae + gd


=0

V (f ) = Outf (s) Inf (s) = f ( sa ) + f ( sc ) = 20 + 18 = 38 2.4.3.


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39

Pseudo-Cdigo de Edmonds Karp

EK( Network N) { F = 0 ; // F l u j o v = 0 ; // Valor d e l F l u j o S = V; // Corte while ( t S ) { // m i e n t r a s e l v e r t i c e t e s t e en e l c o r t e // b u s c a r camino y aumentar Q = new_queue ( S ) ; // Crear c o l a E [ x ] = x V ; S = { s } ; // c o r t e while ( head ( q ) = t ) { x = head ( q ) ; Forward_search ( x ) ; Backward_search ( x ) ; dequeue ( q ) ; // s a c o x de l a c o l a } i f (t S ) { Aumentar_flujo ( ) ; } } return (F , v , S ) // f l u j o , v a l o r , c o r t e } Forward_search ( v e r t i c e x ) { f o r ( q + (x) && q S ) { i f ( f ( xq ) < C( xq ) ) { enqueue (Q, q ) ; // Agregar q a Q S = S {q } ; A[ q ] = x ; // An c e s t r o E [ q ] = min{E( x ) ,C( xq ) F( xq ) } ; b [ q ] = 1 ; // f o r w a r d } } }

28

40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68

Backward_search ( v e r t i c e x ) { f o r ( q (x) && ( q S ) ) { i f ( f ( qx ) >0) { enqueue (Q, q ) ; // Agregar q a Q S = S {q } ; A[ q ] = x ; // An c e s t r o b [ q ] = 1; // Backward E [ q ] = min{E( x ) ,F( qx ) } ; } } } Aumentar_Flujo ( ) { p = t ; // p i v o t e = E( t ) ; v = v + ; while ( p = s ) { q = a[p]; i f ( b [ p ] == 1 ) { //FORWARD f ( qp ) = f ( qp ) + ; } else { f ( pq ) = f ( pq ) ; } p = q; } }

2.5.

Algoritmos Tipo Dinic

Idea: usar un network auxiliar que se construye de la siguiente manera: corremos BFS de caminos aumentantes, como en < E K >, agregando los vrtices y lados correspondientes excepto que en < E K > cuando p encuentra un q que ya est, no lo agrega, mientras que ac a veces s, i.e. supongamos que estamos revisando p y hallamos q + (p) con f (pq ) < C (pq ) q (p) : f (qp) > 0, pero que q ya est en el network auxiliar, entonces agregamos un lado pq al network auxiliar si el N ivel(q ) = N ivel(p) + 1. Denicin: un ujo G se dice bloqueante o saturante si para todo camino: s = x0 , x1 , . . . , xr = t con (xi xi+1 ) E i : G(xi xi+1 ) = C (xi xi+1 ) Dado f ujo en N y g ujo en un network auxiliar denotemos por: (f g )(x, y ) = f (x, y ) + g (x, y ) Forward f (x, y ) g (y, x) Backward

29

2.5.1.

Esquema general Tipo Dinic

1 Dinic () 2 { 3 f = 0; 4 Stop = NO; 5 while ( Stop == NO) { 6 NA = New_Na( f ) ; // c o n s t r u i r Network a u x i l i a r a p a r t i r de f 7 i f ( t NA) { 8 g = H a l l a r _ b l o q u e a n t e (NA) ; // b u s c o un f l u j o b l o q u e a n t e en NA 9 f = f g; 10 } else { 11 Stop = S ; 12 } 13 } 14 return f ; 15 }

Teorema La distancia en NA18 sucesivos aumenta, por lo tanto hay a lo sumo n, NAs. Demostracin: Sea A un NA y A el siguiente NA, denotamos con la distancia en A y la distancia en A . Como A y A se construyen con BFS Queremos ver que vale el <. Sea s = x0 , x1 , . . . , xr = t un camino en A . Caso 1: i {1, . . . , r 1} : xi A (t) (xi ) ( xi ) = i < r = (t) ( 10) Sino lo hubiera agregado. ( 11) Por < E K > (t) < (t) Caso 2: xi A i Como antes de pasar a A debemos saturar todos los caminos de A, se sigue que ningn camino de A es un camino de A . Luego: s, x1 , . . . , xr1 , t no es camino en A, como xi A i i : xi xi+1 A Y tomemos el primer tal i.
18

(10) (11)

NA: networks auxiliares.

30

Caso 2-a: (xi+1 ) < i + 1 Como i + 1 = (xi+1 ) (xi+1 ) < (xi+1 ) Luego: (t) = (xi+1 ) + b(xi+1 ) < (xi+1 ) + b(xi+1 ) (xi+1 ) + b (xi+1 ) = (t) ( 12) Por ( 13) Por < E K > Caso 2-b: (xi+1 ) = i + 1 Observacin: es por < E K > no hace falta ver >. Como i es el primero con xi xi+1 A xj 1 xj A j i s = x0 , x1 , . . . , xi A (xi ) = i (xi+1 ) = i + 1 = (xi ) + 1 Como los niveles son los correctos la nica razn por la cual xi xi+1 A es porque no est disponible en N , i.e. es Forward saturado o Backward vaco. Pero xi xi+1 A entonces se us para el otro lado en A, es decir: xi+1 xi A Absurdo pues N ivel(xi+1 ) = i + 1, y N ivel(xi ) = i. Corolario: si un algoritmo tiene complejidad O(b) para hallar ujo bloqueante en el NA, entonces la complejidad del algoritmo completo es O(n b). Dinic = Algoritmo tipo Dinic + Greedy DFS para hallar ujo bloqueante. A simple vista sera: Complejidad(Dinic) = O(nm2 ) = Complejidad(< E K >) Parecera que no ganamos nada. Pero veremos que en realidad Complejidad(Greedy en NA) = O(nm). Tendremos Complejidad(Dinic) = O(n2 m)

(12) (13)

31

2.5.2.

Ejemplo de Dinic

Ejemplo: Aplicar Dinic al siguiente Network.


Inicial sA:8 sC:7 sD:10 sE:12 AF:4 AG:3 AI:8 BI:2 BJ:2 CG:2 CH:3 CJ:5 DF:4 DG:2 EF:3 EG:5 EH:4 Ft:7 Gt:5 GB:4 Ht:4 It:9 Jt:15 Primera Modicacin sA:0 sC:0 sD:7 sE:11 AF:0 AG:0 AI:7 BI:2 BJ:2 CG:0 CH:0 CJ:3 DF:1 DG:2 EF:3 EG:5 EH:3 Ft:0 Gt:0 GB:4 Ht:0 It:8 Jt:13 caminos (4) sAFt:4 sAGt:3 sAIt:1 sCGt:2 sCHt:3 sCJt:2 sDFt:3 sEHt:1 Segunda Modicacin (nal) sA:0 sC:0 sD:4 sE:1 AF:4 AG:3 AI:0 BI:1 BJ:2 CG:1 CH:2 CJ:0 DF:0 DG:0 EF:0 EG:0 EH:1 Ft:0 Gt:0 GB:1 Ht:0 It:0 Jt:8 Caminos (6)

sD F AIt : 1

sD GAIt : 2

sE F AIt : 3

sE GAIt : 1 sEGBIt : 1 SEGBJt : 2


SE GCJt : 1

sE HCJt : 2

Primer Network Auxiliar I }> G }} GGG } GG }} }} GG / G Ae G > G ? b I ee }} bb GGG   b  e}  bb GG   }}ee bbG  }}  e    /t /C  sGc F ?  HHee }> G GGcc G ee}}   HH GG ccc    } HH e e }}e GG cc }  H  GG H  GG D HHH > H  } GG H   } GG  }}} HHH  }  }   E J

Segundo Network auxiliar


/I / F () / A G ? D ee ? ~>    ~  e ( ) ee   ~~  e e  ~~    ~  ~    /B  > G e sc  c cc  e } ee() ccc  }} cc  e } cc cc  }} ee c } c () /J / / C E H aa aa aa aa  t @

sc

D cc cc cc c E
/

Tercer Network auxiliar

()

()

Obtengo el corte del conjunto de vrtices del NA que no llega a t, el ltimo. S = {s, d, e, h, c, g, b, i, a, f } Cap(S ) = 4+ 5+ 5+ 2 + 9+ 7 = 32 ht+ cj + gt+ bj + it+ f t 32

Se ve que Cap(S ) = 32 = Outf (s) Entonces tengo una garanta de la resolucin del ejercicio. Otra garanta es ver que los caminos obtenidos de un NA tengan el mismo tamao y que a medida que voy construyendo otros NAs sean ms largos, en este caso los primeros tenan 4 de largo y los caminos del segundo network auxiliar tenian un largo de 6. 2.5.3.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44

Pseudo Cdigo algoritmos Tipo Dinic

D i n i c ( Network Na) { // Pa rte B l o q u e a n t e , Version con Goto g = 0; 2 p = s ; // l a b e l 2 , p i v o t e 1 i f ( p = t ) { // l a b e l 1 i f ( + (p) = ) { avanzar ( ) ; goto 1 ; } else i f (p = s) { retroceder () ; goto 1 ; } e l s e return g ; } else { Incrementar_flujo () ; goto 2 ; } } D i n i c ( Network Na) { \\ Parte Bl o q ue a n te , V e r s i o n goto l e s s ; g = 0; E( s ) = ; continuar = 1; while ( c o n t i n u a r ) { p = s; while ( p = t && c o n t i n u a r ) { i f ( + (p) = ) { Avanzar ( ) ; } else i f (p = s ) { Retroceder () ; } else { continuar = 0; } } i f ( p == t ) { Incrementar_flujo () ; } } Return g }

33

45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73

// Pre p t i e n e v e c i n o Avanzar ( p i v o t e p ) { Tomar q + (p) A( q ) = p ; // a n c e s t r o de q e s p E( q ) = min{E( p ) ,C( pq )G( pq ) } ; p = q; } // Pre p t i e n e v e c i n o Retroceder ( pivote p) { B o r r a r p de + (A(p)) p = A( q ) ; } Incrementar_Flujo ( ) { = E( t ) ; q = t; while ( q = s ) { p = a(q) ; G( pq ) = G( pq ) + ; i f (G( pq ) == C ( pq ) ) { B o r r a r q de + (p) } } q = p; }

34

2.5.4.

Complejidad de Dinic

Teorema: la complejidad de Dinic es O(n2 m) Prueba: por el teorema general de los algoritmos tipo Dinic basta ver que la complejidad del paso bloqueante es O(n m). Sea: A = Avanzar() R = Retroceder() I = Incrementar_Flujo() + Inicializacin (O(1)) Una corrida de Dinic luce como: A . . . AIA . . . ARAIA . . . ARAI . . . RRRRA . . . AI Sea X = I R. Tomemos una sucesin de palabras de la forma: A . . . AX 1. Cuntas palabras hay? Si X = R: borramos un lado. Si X = I : borramos al menos un lado. Cada X borra al menos un lado hay m palabras de la forma A . . . AX 2. Cul es la complejidad mxima de cada palabra? Complejidad de R = O(1) Complejidad de I = O(n); hay n vrtices en el camino s, . . . , t. Complejidad(X ) = O(n) Complejidad de A = O(1) Complejidad(A . . . A X ) = O(r) + O(n)
r

Como cada Avanzar() mueve el pivote un nivel ms cerca de t entonces hay a lo sumo n Avanzar() antes de un R o un I r n. Complejidad(A . . . AX ) = O(n) + O(n) = O(n) (1) + (2) Complejidad(Paso Bloqueante de Dinic) = m O(n) = O(n m)

35

2.6.

Algoritmo Wave de Tarjan

Es un ejemplo de una clase de algoritmos en los cuales la invariante no es ms ser ujo. Denicin: un Preujo es como un ujo sin la condicin de balanceo. En el caso de Wave19 el desbalanceo slo podr ser por exceso de entrada, pero otros algoritmos permiten desbalanceo de los dos lados. Idea: una ola hacia adelante (Forward) que balancea si puede y marca (bloquea) si no. Una ola hacia atrs que balancea los bloqueados (Backward). 2.6.1.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38

Pseudo Cdigo de Wave

Wave ( ) { i n i c i a l i z a r () ; olaForward ( ) ; olaBackward ( ) ; while (N != 2 ) { olaForward ( ) ; olaBackward ( ) ; } return g ; } i n i c i a l i z a r () { g = 0; (x = s) { B( x ) = 0 ; //No b l o q u e a d o D( x ) = 0 // D e s b a l a n c e o A( x ) = // s u b c o n j u n t o de a q u e l l o s que l e mandaron f l u j o a x } D( s ) = 0 ; N = 1 ; // #V e r t i c e s b a l a n c e a d o s (x + (s)) { G( sx ) = C( sx ) ; D( s ) = D( s ) C( sx ) ; D( x ) = C( sx ) ; N++; A( x ) = { s } ; } } olaForward ( ) { f o r ( x = s +1; To ; t 1){ // Orden BFS( ) i f (D( x ) >0) ForwardBalance ( x ) ; } }
19

Wave: ingls, ola.

36

39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89

olaBackward ( ) { f o r ( x = t 1 DownTo s +1){ // Orden BFS( ) i f (D( x )>0 && B( x ) == 1 ) BackwardBalance ( x ) ; } } BackwardBalance ( v e r t i c e x ) { while (D( x ) >0){ Tomar y A( x ) ; m = min{D( x ) ,G( yx ) } ; g ( yx )= g ( yx ) m; D( x ) = D( x ) m; i f (D( y ) == 0 ) { N++; } D( y ) = D( y ) + m; i f (G( yx ) == 0 ) { A( x ) = A( x ) {y } ; } } N; }

ForwardBalance ( v e r t i c e x ) { while (D( x )>0 && (+ (x) = ) ) { Tomar y + (x) ; i f (B( y ) == 1 ) { + (x) = + (x) {y} } else { m = min{D( x ) ,C( xy ) G( xy ) } G( xy ) = G( xy ) + m ; D( x ) = D( x ) m; i f (D( y ) == 0 ) { N++; } D( y ) = D( y ) + m; A( y ) = A( y ) {x } ; i f (G( xy ) == C( xy ) ) { + (x) = + (x) {y} } } } i f (D( x ) >0) B( x ) = 1 ; // Bloqueamos x else N; }

37

2.6.2.

Complejidad de Wave

Teorema: la complejidad de Wave es O(n3 ) Prueba: como es Tipo Dinic slo basta ver que la complejidad del paso bloqueante es O(n2 ). Sea ()t partes del algoritmo en donde se satura totalmente un lado o se vaca totalmente un lado. Y sea ()p donde se manda o devuelve parcialmente ujo. Compl(W ave_bloqueante) = Compl(W ave_bloqueante)t + Compl(W ave_bloqueante)p Analicemos primero la Compl(W ave_bloqueante)p . Cada ola Forward, salvo quizs la ltima bloquea al menos un vrtice nuevo. Hay a lo sumo n ciclos: (ola forward,ola backward) En cada ola forward hay n 2, F orwardBalance(x) Entonces: Compl(olaF orward)p = n Compl(F orwardBalance(x))p = n Compl(F orwardBalance(x))p
O(1)

(14)

= O(n) ( 14) Pues en cada F B (x) a slo un lado le mandamos ujo parcial. Compl(ola F orward)p = O(n) (2) Luego: (2) y Compl(W ave_bloqueante)p = O(n2 )

Ahora analicemos Compl(W ave_bloqueante)t . Cada vez que un lado se satura completamente no puede volver a saturarse, pues si el lado es xy lo quisiera volver a saturar debera primero hacer que y le devuelva el ujo a x. Pero esto slo puede pasar si y est bloqueado y en ese caso x no le puede mandar ms ujo, en particular no lo puede volver a saturar. Similarmente, un lado xy slo se puede vaciar totalmente una vez porque slo puede hacerlo si y est bloqueado. #Saturamientos + #V aciamientos 2m Compl(W ave_bloqueante)t = O(m) 38

Compl(W ave_bloqueante) = Compl(W ave_bloqueante)t + Compl(W ave_bloqueante)p = O(m) + O(n2 ) = O(n2 )

2.6.3.

Ejemplos de Wave Aplicar Wave al siguiente Network Auxiliar

sA:8 0 sC:7 0 sD:10 7 sE:7 0 AF:4 0 AG:3 0 AI:8 7 CG:2 0 CH:3 0 CJ:5 3 DF:4 1 DG:2 2 EF:3 EG:5 EH:4 Ft:7 3 Gt:5 0 Ht:4 0 It:9 8 Jt:15 13

Nivel 0 s -32

A 8 4 1 0

C 7 5 2 0

Nivel 1 D & 10 & 6  4 

E 7 4 0

-25

 6   7 

4 7
 3 

Nivel 2 F G 4 3 8 5 & 11 7 &  & 4 11 &   6    1 2   0 0

I 1 0

H 3 0

J 2 0

Nivel 3 t 7 & 12 & & 13 & & 16 & & 18 &

-19

4  3  0

19

39

Aplicar Wave Respetando el orden alfabtico y observar que el ujo es distinto sA:8 sC:7 sD:10 sE:7 AF:4 AG:3 AI:8 CG:2 CH:3 CJ:5 DF:4 DG:2 EF:3 EG:5 EH:4 Ft:7 Gt:5 Ht:4 It:9 Jt:15 0 0 5 0 Nivel 0 s -32 Nivel 1 C D & 7 10 & 5 6  2 4  0 2 0
 5 

0 0 1 0 1 0 1 0 0 0 1 11

A 8 4 1 0 3 7 0

-27

Nivel 2 E F G 7 4 3 4 8 5 & 0 & 11 7  & 11 4 &   6   0 3   1  0

I 1 0

H 3 0

J 2 0

7 0

2 0

Nivel 3 t 7 & 12 & & 13 & & 16 & & 18 & & 25 & 27

Importante ver que termino porque Outf (s) = Inf (t)

40

3.

MST

MST: minimal spanning tree, rbol de expansin o generador minimal. Denicin: sea G un grafo, un rbol generador de G es un subgrafo de G que es rbol y generador. Es decir T es rbol generador de G si: 1. T subgrafo de G. 2. T rbol Conexo sin ciclos. 3. T generador V (T ) = V (G). Obviamente si G tiene rbol generador debe ser G conexo si lo es DFS o BFS dan un rbol generador. Repaso de rboles Propiedad: T rbol m = n 1 Demostracin: si T es rbol, entonces DF S (T ) = T . Si A(q ) denota el antecesor de q en DFS, todos los lados de DFS son de la forma: A(q )q para algn q = raz. Hay n 1 lados. (uno por cada vrtice = raz)

Propiedad: (1) T rbol T conexo y m = n 1 T no tiene ciclos y m = n 1 Prueba: (1) (2) y (3) ya est. (3) (1) : T no tiene ciclos y m = n 1 T rbol Slo tengo que ver que es conexo. Sean {x, y } T , supongamos que no hay un camino entre x e y . En particular xy E (T ) Sea T = T {xy } Como no hay caminos en T entre x e y en T no hay ciclos. Si C fuese ciclo Como T es acclico xy T Entonces C xy , es un camino en T entre x e y absurdo.
?

(2) (3)

41

Conclusin: si x, y no tiene un camino entre ellos, T {x, y } sigue siendo acclico. Continuando de esta forma terminamos con un T conexo y acclico. Es decir rbol tal que T {xy } T E T = V T 1 (15) (16)

= |V (T )| 1 = |E (T )| ( 15) T es rbol ( 16) Por HIP.(3) Absurdo pues T {x, y } T E T

|E (T )| + 1
?

(2) (1) : T conexo y m = n 1 T rbol Slo tengo que ver que no contenga ciclos. Supongamos que T tenga un ciclo, borrando el lado del ciclo, el grafo resultante sigue siendo conexo. Por lo tanto puedo ir borrando un lado de cada ciclo manteniendo continuidad. Eventualmente llegamos a un grafo H sin ciclos que sigue siendo conexo. H es rbol. E (H ) = V (H ) 1 = V (T ) 1 = E (T ) Absurdo porque por lo menos quit un lado. Denicin: dado un grafo G conexo con pesos en los lados, es decir W : E (G) R0 . Un MST20 para G es un spanning tree T tal que: W (xy )
xy E (T ) xy E (T )

W (xy ) spanning T ree T

Notacin W (xy ) = W (T ).
xy E (T )

Problema: dado G conexo, hallar un MST para G.

3.1.

Kruskal

Repetir hasta tener n 1 lados, agregar el lado de menor peso que no forme ciclo. Se necesita una estructura de datos de conjuntos disjuntos. 1. M akeset(x): construye un conjunto {x}. 2. F ind(x): devuelve el conjunto al cual pertenece x. 3. U nion(A, B ): devuelve la unin de A y B.
20

Minimal Spanning Tree.

42

3.1.1.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27

Pseudo Cdigo de Kruskal

Kruskal ( ) { // (x V ) { Makeset ( x ) ; } // Edges_Sort ( ) ; // Ordenar l o s l a d o s : W(E [ i ] ) W(E [ i +1]) m = 0 ; // c a n t i d a d de l a d o s i = 1 ; // i n d i c e // while (M < N 1){ A = find (x [ i ]) ; B = find (y [ i ]) ; i f (A = B) { t r e e . add ( e [ i ] ) ; // a g r e g a r a l a r b o l e [ i ] m++; Union (A, B) ; } i ++; }

3.1.2.

Teorema: Kruskal devuelve un MST

Demostracin: el invariante es ser acclico y termina con n 1 lados, entonces tenemos garantizado que termina con un spanning tree. Veamos ahora que es minimal. Prueba por induccin: sea Kj el grafo en el paso j Si j = 0 queda demostrado porque los vrtices desconectados siempre estn. Hiptesis inductiva: j un MST Tj : Kj Tj Supongamos que Kj Tj MST. Sea e : Kj +1 = Kj {e} Si e Tj ya est pues Kj +1 Tj Por lo tanto supongamos: e Tj En este caso, Tj {e} tiene: n 1 + 1 = n lados no es rbol. Como Tj es conexo Tj {e} es conexo. Como no es rbol Tj {e} tiene un ciclo C . Pero Tj no tiene ciclos e forma parte del ciclo C . 43

Sea f un lado de C que no est en Kj +1 (f Kj +1 es acclico). Tj +1 = (Tj f ) {e} = (Tj {e}) f Como C es un ciclo: y f C (Tj {e}) f sigue siendo conexo. Tj +1 es conexo y tiene: n 1 + 1 1 = n 1 lados Tj +1 es un rbol. Como Kj +1 Tj +1 basta ver que Tj +1 es minimal. Pero W (Tj +1 ) = W (Tj ) W (f ) + W (e) Pero f Kj +1 Si W (f ) < W (e) f se analiz antes de e. Como f Kj +1 entonces se rechaz. Entonces Kj {f } tiene un ciclo absurdo pues Kj {f } Tj rbol Ya que Kj Tj y f Tj (estoy diciendo que un subconjunto de un rbol tiene un ciclo, absurdo). W (f ) W (e) W (Tj +1 ) W (Tj ) Como Tj es MST 3.1.3. Tj +1 tambin.

Complejidad de Kruskal

Volviendo al pseudocdigo: = O(n) = O(m log(m)) = O(m log(n2 )) = O(2m log(n)) = O(m log(n)) = n (2 Compl(F ind) + Compl(U nion)) Como en general > Compl(Kruskal) = O(m log(n)) 3.1.4. Kruskal Delete

Repetir( ) hasta tener n 1 lados. ( ) Borrar el lado de mayor peso que no desconecte el grafo. 3.1.5. Complejidad Kruskal Delete

No demostraremos el orden pero diremos que la complejidad es: O m log(n) (log (log(n)))3

44

3.1.6.

Ejemplo de Kruskal A B C D E F A 5 3 1 3 B 5 1 4 C D E F 3 1 3 1 4 7 7 4 2 4 3 2 3 (3) A


1
1

(0)

A B A
1
1

C D C D B
1
1

E F B F D F

B
1
1 1

D
1
2

E (4) A
3

C
E D E D
4

F B
1
1

(1)

(2)

E A
1
1

F (5) A
3

2 1

C B ~~ ~ ~ 1 ~~ 1 ~~ C

F F ~ HHddd HH dd 3 HH2 dd ~~ ~ HH d ~ 1 HH E A HH H 4 5 HH 1 3 1 D Bd 4 dd ~ ~ dd ~~ d ~~ 7 1 dd ~ ~
3~ ~~

45

3.2.

PRIM

Prim(x) = agregar el lado de menor peso que conecte x con otro vrtice, creando una regin R luego ir agregando el lado de menor peso que conecte R con V R. Generalmente se implementa con un heap. 3.2.1. Pseudo Cdigo de Prim

1 Prim ( v e r t i c e x ) 2 { 3 (p V ) { 4 Costo [ p ] = ; 5 Vecino [ p ] = NULL; 6 } 7 8 Costo ( x ) = 0 ; 9 M = 0; 10 Aux = V; 11 12 //FALTA CASO BASE 13 14 while (m < n 1){ 15 // p r e : c o s t o ( p )< c o s t o ( q ) 16 (q (p)) { 17 i f ( c o s t o ( q )> V( pq ) ) { 18 c o s t o ( q ) = W( pq ) ; 19 vecino (q) = p ; 20 } 21 } 22 Add( p , v e c i n o ( p ) ) ; 23 m++; 24 } 25 26 27 }

q Aux

3.2.2.

Correctitud de Prim

Como el invariante es ser rbol cuanto termina es efectivamente spanning tree. Slo resta ver que es minimal y lo haremos por induccin. Si Pj es el rbol en el paso j , probaremos que M ST Tj : Pj Tj j = 0: Trivial. Supongamos que vale para j Si Pj +1 Tj ya est. De lo contrario existe e Pj +1 : e Tj (y de hecho, ser Pj +1 = Pj {e} ). e une Pj con V Pj Como Tj es Spanning Tree debe conectar Pj con V Pj . 46

Sea f un lado en Tj que conecte estas dos regiones. Como e es el menor lado que conecta esas dos regiones tenemos que: W (e) W (f ) Entonces: W (Tj {e} f ) W (Tj ) Tj {e} f es un MST que contiene a Pj +1 .

3.2.3.

Ejemplo de Prim A 5 3 1 3 B 5 1 4 C D E F 3 1 3 1 4 7 7 4 2 4 3 2 3

A B C D E F P rim(A), Mtodo Grco: (1) A


1

(2) A
3

(3) A
3

E F

1
1

D (4) A
3 1

D
E F C

E F

(5) A
3

1
4

D
1

1
4

D
1

B Prim(A), Mtodo Analtico; B (5, A) (5, A) (4,D)

1) 2) 4) 5)

C (, ) (, ) (7, D) (7, D) (1,B)

D (3, A) (3,A)

E (1,A)

F (3, A) (3, A) (2,D)

3) (4, D)

Complejidad(P rim) = O(n2 ) 47

3.3.

Implementaciones de Union Find

1. Linked lists. (listas enlazadas) 2. Representantes. 3. Union Find By Rank. 3.3.1. Union Find con listas enlazadas

Union es O(1) Find es O(n) Recordemos que Kruskal hace: 2m Finds() y n 1 Unions(). O(mn) + O(n) = O(nm) Como mn > m log(n) Ordenar los lados 3.3.2.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

no sirve.

Union Find con Representantes

Makeset ( x ) { //O( 1 ) R( x ) = x ; } Find ( x ) { // O( 1 ) return R( x ) ; } Union ( R1 , R2 ) { // O( n ) (x V ) { i f (R( x ) == R2 ) { R( x ) = R1 ; } } }

Compl(Kruskal) =

O(m log(n)) Ordenar los lados

+ O(m) + O(n2 ) m Finds n Unions

Compl(Kruskal) = O(m log(n) + n2 ) bastante bien si: m n2 Es decir no funciona tan bien si es un grafo ralo, i.e. con pocos lados.

48

3.3.3.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28

Union Find con ranking

Makeset ( v e r t i c e x ) { (x) = x ; Rk( x ) = 0 ; // Ranking } Find ( v e r t i c e x ) { // r e c u r s i v o a l a c o l a i f ( (x) == x ) return x ; e l s e return f i n d ( (x) ) } Find ( v e r t i c e x ) { // i t e r a t i v o y = x; while ( y = (y ) ) y = (y ) ; return y ; } / Pre : F1 = Find ( x [ 1 ] ) ; F2 = Find ( x [ 2 ] ) ; F1 = F2 / Union ( F1 , F2 ) { k1 = Rank ( F1 ) ; k2 = Rank ( F2 ) ; i f ( K1 > K2 ) { (F2 ) = F1 ; // c a b e z a d e l 2 do apunta a l primero } else { (F1 ) = F2 ; // c a b e z a d e l primero apunta a l segundo i f ( k1 == k2 ) { Rank ( F2 ) = k2 +1; } } }

Con esta implementacin: makeset(x) = (1) U nion = O(1); F ind(x) = O(rank (representante(x)) O(log(n)) Teorema Find es O(log(n)) Corolario: Compl(Kruskal) = O(m log(n)) Demostracin: Compl(Kruskal) = O(m log(n)) Ordenar los lados Demostracin del Teorema Lema interno 1: (Rank (x) < Rank ((x)) : x : x = (x)) Obvio pues Rank solo cambia con Union, y lo cambia slo a F2 cuando (F1 ) == F2 En ese caso incrementa el rango de F2 + O(m) + O(n2 ) = O(m log(n)) m Finds n Unions

49

Lema interno 2: Rank (x) = k 2k elementos por debajo de x, contando a x. Prueba por induccin. k = 0 obvio Supongo que vale para k Veamos para k + 1 Rank (x) = k + 1 alguna vez fue k y union lo subi a k + 1 y esto slo pasa si unimos 2 de rango k . Entonces la cantidad de elementos por debajo de x 2k + 2k = 2k+1 Lema interno 3: Hay
n 2k

elementos de rango k , est demostrado en los lemas.

Finalmente Rango(x) log(n) x Pues sea k el mayor rango por lo menos un elemento de rango k . 1
n 2k

2k n k log2 (n).

Qu pasa si los lados vienen ordenados o se pueden ordenar21 en O(m)? Se puede usar Path compresion Solo cambia Find
1 Find ( x ) { 2 i f ( (x) = x ) { 3 (x) = Find ( (x) ) ; 4 } 5 return (x) ; 6 }

El anlisis es ms complicado, cada F ind() puede ser O(log(n)) Se puede ver: Teorema: la complejidad de m Finds + n Unions, est acotado por O m log (n) Esencialmente: O(m) n razonable. O log (n) = # de veces que hay que aplicar log para llegar a algo 1 n log(n) 1 0 2 1 {3,4} 2 {5,. . . ,16} 3 {17,. . . ,216 } 4 {216 +1,. . . ,265536 } 5

21

Bucket sort.

50

4.

Matchings

Dado un grafo G, un matching en G es un subgrafo M tal que el grado en M de todos sus vrtices es 1. Un matching es perfecto si cubre a G, es decir: V (M ) = V (G). De ahora en ms supondremos que G es bipartito. Cuando escribamos G = (X Y, E ) asumimos que X e Y son las partes. Es decir: pq E p X, q Y Problema: hallar un matching perfecto en G, o en su defecto uno maximal (con la mayor cantidad de lados posibles).

4.1.

Transformacin del problema de Matching a uno de ujo maximal

Dado G = (X Y, E ) creamos el siguiente network. N = X Y {s, t}, E, C xX E = sx xy : y Y xX xy E

yt

y Y

La capacidad de todos los lados es : 1. Ejemplo X AY B C YY YY YY Y 1 1 Y 1 2 3


} eee ee }} } ee }} 1 e } } B Ad ~C dd ~~ dd ~ dd 1 ~~ 1 1 d ~~ 1 dd 2 3 1 dd ~~ dd ~~ ~ dd ~ d ~~~

Teorema Flujos maximales en N corresponden con matchings maximales en G y V (fmax ) = #lados. Dicho de otra manera: existe una correspondencia entre matchings maximales en G (bipartito) y ujos maximales enteros en N. Prueba: dado un ujo entero f construimos un matching Mf y dado un Matching M construimos un ujo entero fM . Vf = {x, y } xy Ef Dado f sea Mf = (Vf , Ef ) : Ef = {xy E : f ( xy ) = 1} Hay que ver que Mf es matching.

51

Observemos que por denicin de Vf tenemos que Mf (z ) 1 z Vf Si Mf no es matching z : Mf (z ) 2 Caso 1: z X como Mf (z ) 2 entonces y1 , y2 : Entonces f (zy1 ) = f (zy2 ) = 1 Outf (z ) 2 Absurdo. Pero Inf (z ) = f ( sz ) 1 Caso 2: z Y x1 , x2 :

y1 = y2 zy1 , zy2 Ef

x1 = x2 x1 z, x2 z Ef

Entonces f (x1 z ) = f (x2 z ) = 1 Inf (z ) 2 Absurdo

Pero Outf (z ) = f ( zt ) 1 Concluimos que Mf es matching. Dado ahora un Matching M sea fM denido as: fM ( xy ) =

1 Si xy E (M ) 0 Si no 1 Si x V (M ) X 0 Si no 1 Si y V (M ) Y 0 Si no

fM ( sx ) =

fM ( yt ) = Como M es matching, est claro que:

Mf (z ) = Outf (z ) =

1 Si z V (M ) 0 Si z V (M )

Adems est claro que: MfM = M y que: fMf = f

52

Veamos ahora que: V (f ) = |EMf |


=0

V (f ) = Outf (s) Inf (s) =


xX

f ( sx )

= #{x : f ( sx ) = 1} = #{x : Inf (x) = 1} = #{x : Outf (x) = 1} por ser f un ujo = |Vf X | = |EMf | Por lo tanto ujos maximales enteros corresponden a matchings maximales.

Denicin: Sea S V (S ) =
z S

(z ) = {w V : z S : wz E }

Denicin: Si G = (X Y, E ) es bipartito, un matching se dice completo de X a Y si cubre a X, i.e. X V (M ).

4.2.

Teorema de Hall

Sea G = (X Y, E ) bipartito entonces: un matching completo de X a Y : (S ) S S X

4.3.

Complejidad del Algoritmo de Matching

Asumiendo |X | = |Y | = n Matching inical: O(n2 ). Extender el matching en un lado: O(n2 ). Extenderlo O(n) veces. Nos queda: O(n3 )

4.4.

Grafos con Peso

Sea G = (X Y, E ) grafo bipartito, con |X | = |Y | = n y sea C una matriz de costos nn Cx,y = Costo de asignar el trabajo X al trabajador Y.22 Hay 2 (al menos) formas de minimizar: 1. Minimizar el mximo.
22

A veces pueden ser Ganancias.

53

2. Mimizar la suma. El problema 1 a veces es llamado el: bottleneck problem23 , se resuelve con el algoritmo de Gross y es bastante simple. 4.4.1. Algoritmo de Gross

Dado C : 1. Ordenar los Ci,j como : b1 < b2 < . . . < bk (k n2 ) 2. Tomar, para r= 1, . . . , k: (Ar )i,j = 1 Si Ci,j br 0 Si no (r es el umbral)

3. Hallar r: Ar tenga Matching perfecto y Ar1 no, eso da un matching M tal que: m ax{Ci,j : {i, j } E (M )} m ax{Ci,j : {i, j } E (M )} M

23

Problema de cuello de botella.

54

4.4.2.

Ejemplo del algoritmo de Gross Hallar un Matching I II III A 1 2 15 B e e2 C 9 2 1 D e2 1 2 E 10 9 7 F 1 2 3 G 8 2 9 que minimice el Mximo IV V VI VII 2 7 5 4 5 8 2 1 10 8 100 9 10 4 10 10 8 1 9 10 4 5 6 7 10 5 10 10

Ordeno los Ci,j : 1, 2, e, 3, , 4, 5, 6, 7, e2 , 8, 9, 10, 15, 1000 m ax{m n(f ilas); m n(columnas)} = m ax{1, 1, 1, 1, 1, 1, 2; 1, 1, 1, 2, 1, 2, 1} = 2 Umbral 7 Busco Matching A B C D E F G A B C D E F G I 1 1 0 0 0 1 0 I 1 1 0 0 0 1 0 II 1 1 1 1 0 1 1 II 1 1 1 1 0 1 1 G III 0 0 1 1 1 1 0 III 0 0 1 1 1 1 0 E IV 1 1 0 0 0 1 0 IV 1 1 0 0 0 1 0 V 1 0 0 1 1 1 1 V 1 0 0 1 1 1 1 E I 1 1 0 0 0 1 0 B VI 1 1 0 0 0 1 0 VI 1 1 0 0 0 1 0 VII 1 1 0 0 0 1 0 VII 1 1 0 0 0 1 0 A B C D E F G I 1 1 0 0 0 1 0 I 1 1 0 0 0 1 0 B Intento extenderlo II III IV V VI 1 0 1 1 1 1 0 1 0 1 1 1 0 0 0 1 1 0 1 0 0 1 0 1 0 1 1 1 1 1 1 0 0 1 0 G E E II III IV V VI 1 0 1 1 1 1 0 1 0 1 1 1 0 0 0 1 1 0 1 0 0 1 0 1 0 1 1 1 1 1 1 0 0 1 0 G E B E B VII 1 1 0 0 0 1 0

II III V

A B C D E F G

VII 1 & 1 II & 0 III 0 V 0 1 0 B

A B C D E F G

Extiendo el II III IV 1 0 1  0 1 1  1 1 0 1 1 0 0 1 0 1 1 1 1 0 0 G E B 55

Matching V VI 1 1 0 1 0 0 1 0 1 0 1 1 1 0 E B

VII 1 I & 1 II & 0 III 0 V 0 1 IV 0 B

A B C D E F G

I 1 1 0 0 0 1 0 B I 1 1 0 0 0 1 0 B

II 1  1  1 1 0 1 1 G II 1  1  1 1 0 1 1 G

III 0 0 1 1 1 1 0 E III 0 0 1 1 1 1 0 E E

IV 1 1 0 0 0 1 0 B IV 1 1 0 0 0 1 0 B

V 1 0 0 1 1 1 1 E V 1 0 0 1 1 1 1 E E

VI 1 1 0 0 0 1 0 B VI 1 1 0 0 0 1 0 B

VII 1 1 0 0 0 1 0 B VII 1 1 0 0 0 1 0 B

I & II & III V IV

A B C D E F G

I 1 1 0 0 0 1 0 B I 1 1 0 0 0 1 0 B

II 1  1  1 1 0 1 1 G II 1  1  1 1 0 1 1 G C

A B C D E F G

I & II & III V IV

III V

A B C D E F G

III IV 0 1 0 1 1 0 1 0 1 0 1 1 0 0 E B E III IV 0 1 0 1 1 0 1 0 1 0 1 1 0 0 E B E

V VI VII I 1 1 1 & II 0 1 1 & 0 0 0 III 1 0 0 V 1 0 0 1 1 1 IV 1 0 0 E B B E V VI VII 1 1 1 I & II 0 1 1 & 0 0 0 III III 1 0 0 V V 1 0 0 IV 1 1 1 1 0 0 E B B E

A B C D E F G

I 1 1 0 0 0 1 0 B

II 1  1  1 1 0 1 1 G C

III 0 0 1 1 1 1 0 E E

IV 1 1 0 0 0 1 0 B

V 1 0 0 1 1 1 1 E E

VI 1 1 0 0 0 1 0 B

VII 1 I  & 1 II & 0 III III 0 V V 0 1 IV 0 II B

Obtengo: S = {C, D, E, G} = Filas etiqueteadas. (S ) = {II, III, V } = Columnas etiqueteadas. Luego |(S )| = 3 < 4 = |S | Matching Perfecto. Entonces tengo que subir el umbral.

56

Umbral 9 I II 1 1 1 1 1 1 1 1 0 1 1 1 1 1 III 0 1 1 1 1 1 1 IV 1 1 0 0 1 1 0 V 1 1 1 1 1 1 1 VI 1 1 0 0 1 1 0 VII 1 1 1 0 0 1 0

A B C D E F G

Busco Matching A B C D E F G A B C D E F G I 1 1 1 1 0 1 1 I 1 1 1 1 0 1 1 G II 1 1 1 1 1 1 1 II 1 1 1 1 1 1 1 G III 0 1 1 1 1 1 1 III 0 1 1 1 1 1 1 G IV 1 1 0 0 1 1 0 IV 1 1 0 0 1 1 0 V 1 1 1 1 1 1 1 V 1 1 1 1 1 1 1 G VI 1 1 0 0 1 1 0 VI 1 1 0 0 1 1 0 VII 1 1 1 0 0 1 0 VII 1 1 1 0 0 1 0 I II III V A B C D E F G I II III IV V VI VII 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 0 1 1 1 1 0 1 0 0 0 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 0 1 0 0 G G G G I II III IV V VI VII 1 1 0 1 1 1 1 I & 1 1 1 1 1 1 1 II & 1 1 1 0 1 0 1 III V 1 1 1 0 1 0 0 0 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 0 1 0 0 G G G A G A A

A B C D E F G

Extiendo el Matching A B C D E F G I  1  1 1 1 0 1 1 G II 1 1 1 1 1 1 1 G III 0 1 1 1 1 1 1 G IV 1 1 0 0 1 1 0 A V 1 1 1 1 1 1 1 G VI 1 1 0 0 1 1 0 A VII 1 I  & 1 II & 1 III 0 V 0 1 0 A

Existe Matching hay que bajar el umbral: M = { A-VII:4 ; B-II:e ; C-III:1 ; D-V:4 ; E-IV:8 ; F-VI:6 ; G-I:8 } Tengo un Matching de 8, entonces no hago el umbral de 8, slo basta ver si hay Matching de 1 s con umbral e2 . 57

Umbral de e2 I II 1 1 1 1 0 1 1 1 0 0 1 1 0 1 III IV 0 1 1 1 1 0 1 0 1 0 1 1 0 0 V 1 0 0 1 1 1 1 VI VII 1 1 1 1 0 0 0 0 0 0 1 1 0 0

A B C D E F G

Busco Matching A B C D E F G A B C D E F G I 1 1 0 1 0 1 0 I 1 1 0 1 0 1 0 II 1 1 1 1 0 1 1 II 1 1 1 1 0 1 1 G III 0 1 1 1 1 1 0 III 0 1 1 1 1 1 0 E IV 1 1 0 0 0 1 0 IV 1 1 0 0 0 1 0 V 1 0 0 1 1 1 1 V 1 0 0 1 1 1 1 E VI 1 1 0 0 0 1 0 VI 1 1 0 0 0 1 0 VII 1 1 0 0 0 1 0 VII 1 1 0 0 0 1 0 A B C D E F G I 1 1 0 1 0 1 0 I 1 1 0 1 0 1 0 B II III IV V VI VII 1 0 1 1 1 1 1 1 1 0 1 1 1 1 0 0 0 0 1 1 0 1 0 0 0 1 0 1 0 0 1 1 1 1 1 1 1 0 0 1 0 0 G E E II III IV V VI VII 1 0 1 1 1 1 & 1 1 1 0 1 1 II & 1 1 0 0 0 0 III 1 1 0 1 0 0 V 0 1 0 1 0 0 1 1 1 1 1 1 1 0 0 1 0 0 G E B E B B

II III V

A B C D E F G

A B C D E F G

I 1 1 0 1 0 1 0 B

Extiendo el II III IV 1 0 1  1 1 1  1 1 0 1 1 0 0 1 0 1 1 1 1 0 0 G E B

Matching V VI 1 1 0 1 0 0 1 0 1 0 1 1 1 0 E B

VII 1 I & 1 II & 0 III V 0 0 1 0 B

58

A B C D E F G

I 1 1 0 1 0 1 0 B & I 1 1 0 1 0 1 0 B & D &

II 1 1   1 1 0 1 1 G & II 1 1   1 1 0 1 1 G & C &

III 0 1 1 1 1 1 0 E & E & III 0 1 1 1 1 1 0 E & E &

IV 1 1 0 0 0 1 0 B & IV 1 1 0 0 0 1 0 B &

V 1 0 0 1 1 1 1 E & E & V 1 0 0 1 1 1 1 E & E &

VI 1 1 0 0 0 1 0 B & VI 1 1 0 0 0 1 0 B &

VII 1 1 0 0 0 1 0 B VII 1 1 0 0 0 1 0 B

I II & III V & III V

A B C D E F G

I 1 1 0 1 0 1 0 B & D I 1 1 0 1 0 1 0 B & D &

II 1 1   1 1 0 1 1 G & C II 1 1 1 0 1 1 G & C &

III 0 1 1 1 1 1 0 E & E & III 0 1 1 1 1 1 0 E & E &

IV 1 1 0 0 0 1 0 B & IV 1 1 0 0 0 1 0 B & A

V 1 0 0 1 1 1 1 E & E & V 1 0 0 1 1 1 1 E & E &

VI 1 1 0 0 0 1 0 B & VI 1 1 0 0 0 1 0 B & A

VII 1 1 0 0 0 1 0 B VII 1 1 0 0 0 1 0 B A

I II & III III V V & &

A B C D E F G

A B C D E F G

II & III III V V & &

1  

I I II & III III V V & &

II

II &

A B C D E F G

I  1  1 0 1 0 1 0 B D

II 1  1  1 1 0 1 1 G C

Extiendo III IV 0 1 1 1 1 0 1 0 1 0 1 1 0 0 E B E A

el Matching V VI VII I 1 1 1 I  & II 0 1 1 & III 0 0 0 III  V V 0 0 1  1 0 0 1 1 1 & 1 0 0 II & E B B E A A

Hall un Matching que minimiza el mximo: (e2 ) M = A V II : 4; B V I : 2; C III : 1; D I : e2 ; E V : 1; F IV : 4; G II : 2

59

4.5.

Prueba del teorema de HALL


Sea G = (X Y, E ) grafo bipartito entonces: existe matching completo de X a Y |S | |(S )| S X

Prueba: Obvio pues el matching induce una funcion : 1 1 de X en Y y la imagen de S por esa funcin est incluida en (S ) |S | = | (S )| |(S )| Es equivalente a ver que: Si un matching completo S X : |S | > |(S )|
11

Corramos el algoritmo de hallar matching (Filas X , Columnas Y ) Cuando termine habr las sin Matchear24 . Sea S0 = Filas sin Matchear. Sea T1 = (S0 ) son las columnas etiqueteadas por las las de S0 S1 = Filas etiqueteadas por las columas de T1 T2 = columnas etiqueteadas por las las de S1 . No necesariamente T2 = (S1 ). Pero si tenemos que T1 T2 = (S0 S1 ) Y as seguimos: Nos queda denido: Sj = Filas etiqueteadas por las columnas de Tj Tj +1 = las columnas etiqueteadas por las las de Sj Sj = las Matcheadas con Tj . Si Tj = Sj tambin. El algoritmo se detiene sin extender el matching (por hiptesis). Por lo tanto se detiene en un k con Tk+1 = Observacin: 1. |Sj | = |Tj | j Pues Sj son las las Matcheadas con Tj 2. (S0 . . . Sj ) = T1 T2 . . . Tj +1 Sea S = S0 S1 . . . Sk |(S )| = |(S0 . . . Sk )| = |T1 . . . Tk Tk+1 | = |T1 . . . Tk | = |T1 | + . . . + |Tk | = |S1 | + . . . + |Sk | = |S | |S0 | < |S |
24

(17) (18) (19) (20)

Las marcadas con .

60

( ( ( (

17) 18) 19) 20)

Por las observacin 2. Tk+1 = Unin Disjunta. Por las observacin 1.

4.6.

Teorema del Matrimonio


Todo grafo bipartito regular (con lados) tiene un matching perfecto.

Prueba: sea G = (X Y, E ) : E = , regular. Dado W V con W X W Y Denimos: Ew = Lados con un extremo en w = {xy E : x W y W } Supongamos W X |Ew | = {xy E : x w} =
x w

{y : xy E } d(x)
xw

(21)

= |w | ( 21) Por ser G regular. Similar prueba si: W Y Observemos que por ser G bipartito: Ex = E = Ey |Ex | = |Ey | |X | = |Y | Como = 0 |X | = |Y | Por lo tanto para ver si existe un matching perfecto en G, basta ver que existe un matching completo de X a Y . Por el teorema de Hall basta entonces con ver: |S | |(S )| S X Sea entonces S X Sea e Es y (x) (S ) e = x y E(s) Hemos probado que: Es E(S ) |Es | |E(S ) | |S | |(S )| |S | |(S )| xS : e = xy yY

61

4.7.

Minimizar la Suma
n

Problema: dada una matriz de costos C, hallar el menor M, Matching. Simblicamente buscamos M: M = m n i=1 j : ij M La solucin a este problema usa una idea sencilla: sea C una matriz de costos que se obtiene de C restndole o sumndole una constante a una la o columna. Entonces sea Mm n (C ) un Matching que minimiza la suma. Ci,j Si i = i Si a la la i le resto una constante k , i.e. Ci,j Ci,j k Si i = i
n n

Ci,j

Est claro que: i=1 j : ij M

Ci,j = i=1 j : ij M

Ci,j k , similar para las columnas.

Mm n (C ) tambin minimiza C Segunda Observacin: si Ci,j 0. Entonces si M es un matching de 0 s es decir Ci,j = 0 i, j M M minimiza la suma. Idea bsica: restar o sumar la inteligentemente hasta hallar un matching de ceros. Ese matching automticamente minimiza la matriz original. 4.7.1. Ejemplo de Matching que minimiza la Suma (A ojo) A B C D Restamos a I A 0 B 4 C 0 D 9 cada la II III 3 5 5 0 5 6 0 3 III 5 0 1 3 su mnimo IV 5 6 9 3 IV 2 3 1 0 I 2 9 1 10 II III 5 7 10 5 6 7 1 4 IV 7 11 10 4

Restamos a cada columna su mnimo I II III IV A 0 3 5 2 Matching de 0 s. B 4 5 0 3 C 0 5 6 6 D 9 0 3 0

Restamos 5 a la tercer la. A B C D I II 0 3 4 5 -5 0 9 0 Existe Matching Pero tengo un nmero Negativo.

62

Sumamos I A 5 B 9 C 0 D 14

5a II 3 5 0 0

la columna I III IV 5 2 0 3 1 1 3 0

Restamos el I A 3 B 9 C 0 D 14

mnimo a cada la. II III IV 1 3 0 5 0 3 0 1 1 0 3 0

Hall un I A 3 B 9 C 0 D 14

Matching II III 1 3 5 0 0 1 0 3

de 0 s. IV 0 3 1 0

M = AIV : 7; BIII : 5; CI : 1; DII : 1 Hall un matching que minimiza la suma(14). 4.7.2. Algoritmo Hngaro

Algoritmo de Khun-Munkres, conocido como algoritmo hngaro. 1. Restar el mnimo de cada la a cada la. 2. Restar el mnimo de cada columna a cada columna. 3. Buscar Matchings de 0 s Si existe hall un matching que minimiza la suma. Sino tomar S : |S | > |(S )|, y restarle un cierto m a las las de S y sumarle m a las columnas de (S ) Cul m? m = m n S (S ) Equivalentemente: restar m a S (S ) y sumar m a S (S ) 4.7.3. Ejemplo del algoritmo Hngaro I II III A 2 5 7 B 9 10 5 C 1 6 7 D 10 1 4 1. Restamos a cada la su mnino: I II A 0 3 B 4 5 C0 5 D 9 0 III 5 0 6 3 IV 5 6 9 3 IV 7 11 10 4

63

2. Restamos a cada columna su mnimo: I II A 0 3 B 4 5 C0 5 D 9 0 3. Buscamos Matching de 0 s A B C D I 0 4 0 9 II 3 5 5 0 III 5 0 6 3 IV 2 3 6 0 A B C D I 0 4 0 9 C II 3 5 5 0 III 5 0 6 3 IV 2 3 6 0 A B C D I 0 4 0 9 C II 3 5 5 0 III 5 0 6 3 IV 2 3 6 0 I III 5 0 6 3 IV 2 3 6 0

4. No hay matching perfecto A B C D I 0 4 0 9 C II 3 5 5 0 III 5 0 6 3 IV 2 3 6 0 I

Tengo S = {A, C } , las las etiqueteadas. (S ) = I , las columas etiqueteadas. Con |S | > |(S )| 5. Calculo: m = m n S (S ) I 0 4 0 9 C II 3 5 5 0 III 5 0 6 3 IV 2 3 6 0 I II I A 0 1 m=2 B 6 5 C 0 3 D 11 0 Referencias: S (s) S (s) S (S ) S (S ) No lo modico Sumo m No lo modico Resto m III 3 0 4 3 IV 0 3 4 0

A B C D

64

6. Busco Matching de 0 S I A 0 B 6 a ) No encuentro: C 0 D 11 b ) Intento extenderlo: A B C D I 0 6 0 11 C I 0 6 0 11 C II 1 5 3 0 III 3 0 4 3 IV 0 3 4 0 A B C D I 0 6 0 11 C I  0  6 0 11 C II 1 5 3 0 III 3 0 4 3 IV 0 3 4 0 I * II 1 5 3 0 III 3 0 4 3 IV 0 3 4 0

A B C D

II 1 5 3 0

III 3 0 4 3

IV 0 3 4 0 A

I * Extiendo el matching

A B C D

II 1 5 3 0

III 3 0 4 3

IV 0 3 4 0 A

I *

I A 0 B 6 7. Llegu al Matching de 0 s: C 0 D 11 A mano

II 1 5 3 0

III 3 0 4 3

IV 0 3 4 0

1. Tachar las de S , y las columnas de (S ). 2. De lo no tachado, calcular el mnimo m. 3. Restar de lo no tachado m. 4. Sumar, a lo tachado dos veces, m. 4.7.4. Complejidad de algoritmo Hungaro

Restar el mnimo en cada la: O(n2 ). Restar el mnimo en cada columna: O(n2 ). Buscar Matching inicial: O(n2 ) Extender matching en un lado: Paso hay O(n) pasos.

65

Complejidad de cada Paso Buscar m, restarlo y sumarlo: O(n2 ). Buscar Matching en la nueva matriz O(n3 ). Cuntas veces buscamos m en un paso? No sabemos Compl(Hungaro) = O(n) O(n3 ) (No sabemos) Llammosle cambio de matriz a buscar el m, restarlo y sumarlo. Lema: luego de un cambio de matriz el matching parcial que se tena no se pierde. Prueba: la idea est en jarse dnde est el matching. S S

A A B C

(S ) (S ) Referencias A: puede haber ceros. B: No hay ceros, no hay matching. C: Ceros del Matching. S (S ) y S (S ) no cambian. Por lo tanto cualquier 0 de matching ah permanece. En S (S ) no hay ceros, por lo tanto no hay matching. Slo queda por ver: S (S ), donde puede haber ceros, pero ninguno del matching, pues supongamos que hubiera uno en la columna j , la i. i S, j (s). Cuando revisamos la columna j buscamos el elemento del matching, hubieramos agregado la la i a S, absurdo. Corolario: luego de un cambio de matriz, aumenta el matching, (i.e. se termina el paso) o bien aumenta S. Prueba: En S (S ) habr un nuevo cero, digamos en la columna j, al revisar la j si est libre extendemos el matching. Sino hay una la i con {i, j } M :matching, por lo tanto agregamos la la i a S. Entonces S crece. Observacin: i no formaba parte de S , pues por el lema anterior i debe estar en S . Corolario: hay a lo sumo n cambios de matriz en cada paso, pues S slo puede crecer n veces. 66

Por lo tanto: Compl(Hungaro) = n Compl(paso) Compl(paso) = n Compl(cambiar la matriz) + O(n2 ) cambio de matriz Compl(cambiar la matriz) = O(n2 ) Compl(paso) = O(n3 ) Compl(Hungaro) = O(n4 ) Sin embargo, siendo truquero se puede reducir la complejidad a O(n3 ). Compl(Hungaro) = O(n3 ) 1. Cmo restar m de S y sumar m a (S ) en tiempo O(n)? Agregamos etiquetas: cada la y cada columna tiene una etiqueta que indica cunto se le suma o resta. Cambiar las etiquetas es: O(n). Costo: en vez de chequear if(Ci,j == 0) hay que revisar: (Ci,j ETi + ETj == 0) Ac suponemos que el costo de sumar y restar es O(1). 2. Cmo calcular m n{S (S )} en tiempo O(n)? Tendremos una etiqueta que por cada columna guardar el mnimo, de la interseccin de esa columna con S. Vericar el mnimo de {S (S )} es simplemente calcular: m n{ (y ) : (y ) = 0} = O(n) ya que (y ) == 0 y (S ) Y los (y ) los vamos actualizando a medida que examinamos las las de S. 4.7.5. EJEMPLO DEL MEJORADO (FALTA)

67

5.

Cdigos de correcin de errores

En general un cdigo, sobre un alfabeto A, de longitud n es un subconjunto de An . En general usaremos: A = {0, 1}. Llamaremos Cdigo, a un cdigo binario de bloque25 . Denicin: dados x, y {0, 1}n la distancia de Hamming entre x e y es: dH (x, y ) = d(x, y ) = #{i : xi = yi } El peso de Hamming de x {0, 1}n es: W (x) = |x| = #{i : xi = 0} = d(x, 0n ) Claramente: d(x, y ) = d(x y, 0) = |x y | (x y )i = xi yi i.e. = suma en Zn 2 Con xor denido de la siguiente manera: 00=0 01=1 10=1 11=0 es decir la suma mdulo 2. Propiedad d es una distancia. Prueba: 1. d(x, x) = 0 2. d(x, y ) = 0 x = y 3. d(x, y ) = d(y, x) 4. Desigualdad triangular: d(x, y ) d(x, z ) + d(z, y ) z Sean: A = {i : xi = yi }, B = {i : xi = zi }, C = {i : yi = zi }. Si xi = zi yi = zi xi = y i

i B C i A, es decir (B C ) A Aplico De morgan: (B C ) A y obtengo: ABC |A| |B C | |B | + |C | d(x, y ) d(x, z ) + d(z, y )

25

Block code: cdigo de bloque.

68

Deniciones Br (x) = {y Zn 2 : d(x, y ) r } Un cdigo C detecta r errores si: C Br (x) = {x} x C Un cdigo C corrige t errores si: Bt (x) Bt (y ) = x, y C : x = y Notacin: = m n{d(x, y ) : x = y : x, y C } Ejemplos: 1. C1 = {00, 01, 10, 11} (C1 ) = 1 2. C2 = {000, 011, 110, 101}
rr rrC2 C2 r r

000

011 2

110 2 2

101 2 2 2 (C2 ) = 2

000 011 110 101

3. C3 = {000000, 010101, 101010, 111111}


r rr C3 C3 rrr

000000

010101 3

101010 3 6

111111 6 3 3 (C3 ) = 3

000000 010101 101010 111111

69

Teorema: sea C cdigo binario y d = (C ) entonces: 1. C detecta d 1 errores y no detecta d errores. 2. C corrige Prueba: 1. Detecta d 1: Recordemos que es la menor distancia entre palabras del cdigo Sea x C, y Bd1 (x) C x = y d(x, y ) 1 < x=y Pero x, y C No detecta d: Sean x, y C : x = y d(x, y ) =
d1 2 d1 2 ? d1 2

errores y no corrige

d1 2

+ 1 errores.

y Bd (x) C Como y = x

no detecta d errores.

2. Corrige Sea t =

errores: .

Sean x, y C, x = y . Supongamos Bt (x) Bt (y ) = z Bt (x) Bt (y )

d(x, y ) d(x, z ) + d(z, y ) 2t 1 0 1 absurdo ( 22) Ya que x = y y las dos estn en C . ( 23) Ya que z est en las dos Bolas. No corrige
d1 2

(22) (23)

+ 1 errores:

Sean x, y C : d(x, y ) = d, sea e = x y Entonces e tiene d unos. Sea e con


d1 2

+ 1 unos de estos.
+1 (x)

Sea z = x e Quiero ver que z B seccin es no vaca.


d1 2

d1 2

+1 (y )

y ya est porque justamente la inted1 2

Luego d(x, z ) = |x z | = |x x e | = |e | =

+1

70

d(y, z ) = |y z | = |y x e | = |e e | = d 1 + Demostracin de Si d = 2k + 1 (Impar) 1 d 1 + d = 2k + 1 1 k = k = 2


d1 2

d1 2

d1 +1 2

<

d1 2

+1
d1 2

Si d = 2k (Par) 1 = 2k 1 (k 1) = 2k 1 k + 1 = k = k 1 + 1 = d 1 + d 2

+1

Suposiciones acerca del medio de transmisin 1. No se pierden ni agregan bits.26 2. Sean: Ei+ el evento Bit i cambia de 0 1. Ei el evento Bit i cambia de 1 0. Entonces: P Ei+ = P Ei . Denotamos Ei al evento: cambia el Bit i. 3. Ei es independiente de Ej i = j 4. 0 < P (Ei ) = P (Ej ) <
1 2

5.1.

Cota de Hamming
2n 1 + n + ... +

Teorema: sea C cdigo de longitud n que corrija t errores entonces: |C | Prueba: sea A =
xC n t

Bt (x)

Como C corrije t errores, esa unin es disjunta. |A| =


xC

|Bt (x)|

Calculemos |Bt (x)|: Para ello denamos: Sr (x) = {y Zn 2 : d(x, y ) = r }


26

Slo hay ips de bits.

71

Bt (x) =
r=0

Sr (x) unin disjunta.


t

|Bt (x)| =
r=0

|Sr (x)|

y Sr (x) d(x, y ) = r (x y ) = r donde deno (x y ) = e e : |e| = r : y = e x


Sr (0)

Sr (x) = x Sr (0) |Sr (x)| = |Sr (0)| Luego e Sr (0) tiene r 1 s y n r 0 s De las n ubicaciones hay que elegir las r donde irn los 1 s. |Sr (0)| = n r |A| =
x C t

|Bt (x)| n r C

=
x C t r=0

=
r=0

n r

n Como A Zn 2 |A| 2 t

r=0

n r

C 2n

2n 1 + n + ... +

n t

Denicin: un cdigo se dice perfecto si C es un subespacio vectorial de Zn 2 Recordemos que un subespacio vectorial27 se da si: 1. C = 2. Si x, y C x y C 3. x C, k Z2 k x C
27

SEV.

72

Pero Z2 = {0, 1} 1*X = X 0*X = 0 Trivialmente est en C , bastara ver que 0 C . C = x C x x C


=0

C es lineal si y slo si () C= x, y C x y C Teorema: C lineal = m n |x| : x C, x = 0 Prueba: Sea w = m n{|x| : x C, x = 0} Sean x, y C : x = y con d(x, y ) = = |x y | Como C es lineal x y C y x y = 0, pues x = y w Sea ahora x C, x = 0 con |x| = w Entonces w = d(x, 0) , 0 C pues C es lineal. Como es la menor distancia tenemos que w =w Ejemplos: C1 , C2 , C3 son obviamente lineales C1 = {11, 00, 01, 10} = Z2 2 w = = 1 C2 = {000, 110, 101, 011} w = = 2 C3 = {000000, 111111, 101010, 010101} w = = 3 Notacin: si C es lineal k denotar la dimensin de C . Corolario: si C es lineal de dimensin k |C | = 2k Prueba: obvio pues k = Dim(C ) C
k Zk 2 |C | = 2

73

5.2.

Matriz generadora

Denicin: una matriz generadora G para C es una matriz cuyas las forman una base de C. Por lo tanto si C es de dimesin k y longitud n y G es generadora de C entonces G es Kx N . G generadora G es Kx N, con k = Dim(x) y C = EF (G) k Recordemos que: EF (G) = {x Zn 2 : U Z2 : x = U G} 1 0 0 1 1 1 Sea G = 0 1 0 1 0 1 0 0 1 1 0 0 C = {x1 x2 x3 x4 x5 x6 : u1 , u2 , u3 : x = U G} u1 u2 u3 G = u1 u2 u3 (u1 u2 u3 )u1 (u1 u2 ) 0 0 0 0 C= 1 1 1 1 En particular: G= Da el cdigo: C = {x1 . . . xn : xn = x1 . . . xn1 } = {x1 . . . xn : x1 . . . xn1 xn = 0} Bit parity Code tiene = 2 Otro ejemplo de cdigo lineal: cdigos de repeticin C = {x1 . . . xk x1 . . . xk . . . x1 . . . xk }
r veces n1

0 0 1 1 0 0 1 1

0 1 0 1 0 1 0 1

0 1 1 0 1 0 0 1

0 0 0 0 1 1 1 1

0 0 1 1 =2 1 1 0 0

1 . . . 1

n=rk Una matriz generadora G = I I I I I


r I s

I = peso mnimo no nulo = r

74

5.3.

Matriz de chequeo

t Una matriz H se dice matriz de chequeo si C = N u(H ) = {x Zn 2 : Hx = 0} Propiedad N I A At I k es generadora de C n k es de chequeo. kx k nk k nk

Todo cdigo tiene una matriz de chequeo. Prueba: Hay que ver que EF [I A] = N u [At I ] Sea x EF [I |A] U : x = U [I |A] = U (U.A) Ut (U.A)t

[At |I ]xt = [At |I ]

= At U t (U A)t = At U t At U t =0 Entonces x N u([At I ]) EF [I |A] N u([At |I ]) Pero Dim(EF ([I |A])) = k Dim(N u([ At | I ])) = k k nk dep. indeptes Ejemplo: 1 0 0 1 1 1 1 1 1 1 0 0 G = 0 1 0 1 0 1 H = 1 0 0 0 1 0 1 1 0 0 0 1 0 0 1 1 0 0 x1 x2 1 1 1 1 0 0 x 3 Entonces N u(H ) = x1 . . . x6 : 1 0 0 0 1 0 = 0 x4 1 1 0 0 0 1 x 5 x6 x1 x2 x3 x4 = 0 = x1 . . . x6 : x1 x5 = 0 x1 x2 x6 = 0 x4 = x1 x2 x3 = x1 . . . x6 : x5 = x1 que es lo que tena antes. x6 = x1 x2 75

son iguales

Ejercicio: calcular las palabras del cdigo que genera la siguiente matriz G. 1 1 1 0 1 1 1 0 0 0 0 1 1 0 0 0 1 0 Si G = H= 0 0 1 0 1 1 0 0 0 1 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 1 1 0 1 1 0 1 1 0 0 1 0 1 en este caso = 3 1 0

Teorema: sea H la matriz de chequeo de C, si H no tiene la columna 0 ni columnas repetidas entonces 3. Y por lo tanto corrige al menos un error. Prueba: supongamos que no ( < 3) = 1 = 2 Supongamos = 1. Como C es lineal x C : |x| = 1 i : x = ei 28 Como x C Hxt = 0
(i) Columna i de H. H (i) = 0 absurdo. 0 = Hxt = Het i = H

Supongamos = 2. Entonces x C : |x| = 2 Entoces i,j : i = j : x = ei ej


t (i) 0 = Hxt = Het H (j ) i Hej = H

H (i) = H (j ) absurdo.

Ejemplo 1 0 Sea H = 0 0 0 1 0 0 0 0 1 0 0 0 0 1 1 0 1 1 1 1 0 1 1 1 1 0 1 1 H es 4x 9 1 1

C = N u (H ) ? |C | = 2k = 25 = 32 k =94=5 9 variables - 4 independientes = #Columnas Rango es n porque tengo la identidad. (C ) = Como H no tiene la columna 0 ni columnas repetidas (C ) 3 Como H (1) + H (5) = H (9)
28

Recordemos ei = 0 . . . 0 1 0 . . . 0.
i

76

Entonces x = 010001001 C (C ) 3 (C ) = 3 Una matriz que cumple esa condicin es una matriz r (2r 1) Con todas las columnas posibles no nulas de altura r. Entonces C = cdigo de Hamming

H =H=
2

1 0 1 orden posible. 0 1 1

H=
2

xyz :

xz =0 yz =0

= {xyz : z = x = y } = cdigo de repeticin

H H

1 0 0 = H = 0 1 0 0 0 1 1010101 0110011 =H= 0001111 0000000

1 0 1 1 1 1 0 1 K = 4 0 1 1 1 0110101 0010011 K = 11 0001111 1111111

Propiedad: los Hamming son perfectos.


2 = 1+ Prueba: Hay que ver r n Donde n = 2r 1 1 + n = 2r

2n 2n r = r = 2nr = 22 1r = 2k = 1+n 2

Algoritmo para corregir 1 error Cuando H (i) = 0, H (j ) Supongamos que el emisor manda x C y el receptor recibe y = x e con |e| 1. Si e = 0 Hy y = Hxt = 0 y C Si e = e Hy t = Hxt Het i = 0 H (i) = H (i)

77

El algoritmo es: 1. Calcular Hy t . 2. Si Hy t = 0 Aceptar y . 3. Si Hy t = H (i) Aceptar y ei . 4. Si Hy t = 0, H (i) i hubo 2 errores, pedir retrasmisin. Ejemplo: 1 0 H= 0 0 Se recibe: y = 01000100 Hy t = H (2) H (3) H (7) 0 0 1 1 1 0 1 0 (6) = 0 1 0 = 1 = H 0 0 1 1 La palabra enviada fue x = y e6 = 011001100 Pero si recibo z = 000011000 Hz t = H (5) H (6) 0 1 1 1 0 1 (i) = 1 1 = 0 = 0, H i Hubo 2 errores 1 1 0 Por ejemplo me pueden haber mandado: 000000000 110011000 En el caso del Hamming Hy t siempre va a ser 0 algn H (i) (i) El algoritmo si se usa la matriz con H (i) = Binario Es ms fcil: 1. Calcular Hy t 2. Si Hy t = 0 aceptar y 3. Sino tomar i: (representacin binaria i)= Hy t y acepto y ei 0 1 0 0 0 0 1 0 0 0 0 1 0 1 1 1 1 0 1 1 1 1 0 1 1 1 1 0 1 1 1 1

78

Ejemplo 5 5 tiene n = 2 1 = 31 k = 31 5 = 26 = 226 5 Supongamos que llega y = e1 e2 e11 e27 e31 Entonces:

Hy t = H (1) H (2) H (11) H (27) H (31) 1 0 1 0 1 1 0 1 1 1 1 0 (1) = 0 0 0 1 1 = 0 = H 0 0 1 0 1 0 0 0 0 1 1 0 Mandaron x = y e1 Si hubiese sido y = e2 e7 e17 0 1 1 0 1 1 0 0 (20) Hy t = 0 1 0 = 1 = H 0 0 0 0 0 0 1 1 Mandaron x = y e20 Observacin: Hamming ms un bit de paridad avisa si hay 2 errores. Teorema: sea C = N u(H ) (C ) = m n{j : j columnas L.D. de H}29 Prueba: : Sea x : |x| = (C ) = d Entonces i1 , i2 , . . . , id : x = ei1 . . . eid 0 = Hxt t = Het i1 . . . Heid = H ( i1 ) . . . H ( id ) Entonces {H (i1 ) , . . . , H (id ) } es L.D. m n{j : j columnas dependientes de H} = j i1 , . . . , ij : {H i1 , . . . , H ij } es L.D. Entonces c1 , . . . , cj no todos nulos tal que: c1 Hi1 , . . . , cj Hij = 0 Como j es el mnimo c1 , . . . , cj = 0 todos no nulos. Como Ci Z2 ci = 1 i H (i1 ) . . . H (ij ) = 0 Entonces x C donde x = ei1 . . . eij j
29

LD: Linealmente dependientes.

79

5.4.

Cota Singleton

Corolario: si C es un cdigo lineal de longitud n y dimensin k entonces (C ) nk +1 Prueba: Sean d = (C ), H : C = N u(H ) d = m n{j : j columnas L.D. de H } = 1 + m ax{j : Todo conjunto de j columnas es L.I.} 1 + m ax{j : Existe un conjunto de j columnas L.I.} 1 + Rango(H ) =1+nk

Denicin: un Cdigo con = n k + 1 se llama un cdigo MDS30 .

5.5.

Cdigos Cclicos

Denicin: sea W = w0 w1 . . . wn1 denimos Rot(W ) = wn1 w0 w1 . . . wn2 Denicin: un cdigo C es cclico si: 1. Es lineal. 2. Invariante por rotaciones: i.e. W C Rot(W ) C Ejemplos Z2 + Bit de paridad es cclico C = {000, 110, 101, 011} C = {000, 100, 010, 001} es invariante por rotacin pero no cclico ya que no es lineal: C [1] + C [2] C C = {000, 100, 011, 111} es lineal pero no es cclico. Identicacin: w0 w1 . . . wn1 w0 + w1 x + . . . + wn1 xn1 Denicin: si P (x), H (x) son polinomios. P (x) m od H (x) es el resto de dividir P (x) por H (x). Teorema: si W tiene longitud n entonces: Rot(W ) = xW (x) Prueba: xW (x) = x w0 + w1 x + . . . wn1 xn1 = w0 x + w1 x2 + . . . + wn2 xn1 + wn1 xn
30

m od (1 + xn )

MDS: maximun distances separable.

80

Aplico mdulo 1 + xn xW (x) m od (1 + xn ) = w0 x + w1 x2 + . . . + wn2 xn1 + wn1 = wn1 + w0 x + w1 x2 + . . . + wn2 xn1 wn1 w0 . . . wn2 = Rot(W ) (24) (25)

( 24) wn1 xn = wn1 (xn + 1) + wn1


Cociente Resto

( 25) Conmuto. Ejemplo C = {0000, 1010, 0101, 1111} C {0, 1 + x2 , x + x3 , 1 + x + x2 + x3 } Tomo w = 1010 Rot(w) = 0101 1 + x2 x(1 + x2 ) = x + x3 m od (1 + x4 ) = x + x3 0101 Tomo w = 0101 Rot(w) = 1010 x + x3 x(x + x3 ) = x2 + x4 x2 + x4 m od (1 + x4 ) = x2 + 1 = 1 + x2 1010 Corolario: Sea C cclico de longitud n, W (x) C Q(x) Z2 (x) W (x)Q(x) m od (1 + xn ) C

Propiedad: sea C lineal entonces ! polinomio no nulo de grado mnimo. Denicin: si C es cclico, el nico polinomio no nulo de grado mnimo se llama el polinomio Generador de C, y usualemente se lo denomina G(x). Prueba: Sean g1 , g2 dos de ellos : Gr(g1 ) = Gr(g2 ) = t g1 + g2 C pues C es lineal. Entonces: Gr(g1 + g2 ) = Gr(g1 g2 ) < t que era el menor grado. g1 + g2 = 0 g1 = g2 : g1 (x) = a0 + a1 x + . . . + at1 xt1 + 1.xt : g2 (x) = b0 + b1 x + . . . + bt1 xt1 + 1.xt Entonces: g1 + g2 = (a0 + b0 ) + (a1 + b1 )x + . . . + (at1 + bt1 )xt1 + 0

81

Propiedad: sea G(x) Generador : G(x) = 0 Gr(G(x)) Gr(p(x)) p(x) C Teorema: sea C un cdigo cclico de longitud n, G(x) su polinomio generador entonces: C = P (x) Z2 (x) : Gr(P (x)) n 1 y G(x)|P (x) Prueba: Si G(x) dividide a P(x): G(x)|P (x)
clase pasada

q (x) : P (x) = q (x) G(x) P (x)

m od (1 + xn ) C

Como Gr(P (x)) n 1 P (x) La parte importante

m od (1 + xn ) = P (x) P (x) C

Sea P (x) C Gr(P (x)) n 1 Para la segunda condicin: Sean Q(x), R(x) Z2 (x) : P (x) = Q(x)G(x) + R(x): con Gr(R(x)) < Gr(G(x)) Como Gr(R(x)) < Gr(G(x)) Entonces por Q(x)G(x) C R(x) = P (x) + Q(x)G(x) C por ser lineal.
C C

Gr(R(x)) < n 1 Gr(P (x)) n 1

Gr(Q(x)G(x)) n 1

Gr(R(x)) < Gr(G(x)) n 1 R(x) C

R(x) = 0

P (x) = Q(x)G(x) G(x)|P (x)

82

Teorema Sea C cclico de longitud n, y G(x) el polinomio generador de C , con k = Dim(C ) Entonces: 1. Gr(G(x)) = n k 2. G(x)|1 + xn 3. G(x) = 1 +g1 (x) + . . . i.e. g0 = 1 Prueba 1. Sea P (x) : Gr(P (x)) n 1 Por el teorema anterior P (x) C Q(x) : P (x) = Q(x)G(x) Si t = Gr(G(x)) n 1 Gr(P (x)) = Gr(Q(x)) + Gr(G(x))
=t

Gr(Q(x)) n t 1 Viceversa si P (x) = Q(x)G(x) con Gr(Q(x)) n t 1 Entonces: Gr(P (x)) n t 1 + t = n 1 P ( x) C C= P (x) : Q(x) : Gr(Q(x)) n t 1 P (x) = Q(x)G(x)

Esto da una biyeccin entre C y Q(x) : Gr(Q(x)) n t 1 =

|C | = | | = |{Q(x) = q0 + q1 x + . . . + qnt1 xnt1 }| = 2nt Como k = Dim(C ) |C | = 2k 2k = 2nt k = n t t = n k 2. Supongamos G(x) = g0 + g1 x + . . . + gnk1 xnk1 + xnk Por lo demostrado en 1. sabemos que es de esa manera. Multiplico por xk :

xk G(x) = g0 xk + g1 xk+1 + . . . + gnk1 xn1 + xn = (1 + g0 xk + . . . + gnk1 xn1 ) +(1 + xn )


Rotk (G)

(26)

83

( 26) Sumo dos veces 1 en Z2 , que es lo mismo que sumar 0. Como C es cclico y G(x) C Rotk (G(x)) C Como G(x) es generador Q(x) : Rotk (G) = Q(x)G(x)

xk G(x) = Rotk (G(x)) + (1 + xn ) = Q(x)G(x) + (1 + xn ) 1 + xn = xk G(x) + Q(x)G(x) = xk + Q(x) G(x) Entonces G(x)|1 + xn 3. 1 + xn = V (x)G(x) 1 = v0 g0 g0 = 1

Esto da origen a un mtodo para codicar: Primer mtodo: Simplemente dada m(x) de grado k 1. Tomo V (x) = m(x)G(x) Ejemplo: G(x) = 1 + x2 + x3 : n = 7 Cunto vale k = Dim(C ) ? n k = Gr(G(x)) 7 k = 3 k = 4 Por lo tanto el cdigo tiene 24 = 16 palabras. Supongamos que queremos codicar: m = 1011 m(x) = 1 + x2 + x3

V (x) = m(x)G(x) = (1 + x2 + x3 )2 = 1 + x4 + x6 1000101 Mando 1000101

84

Otra: m = 0110 x + x2

V (x) = (x + x2 )(1 + x2 + x3 )
4 4 = x + x3 + x + x2 + x + x5 = x + x 2 + x3 + x5 0111010

Esto corresponde a la siguiente matriz generadora: 1 g1 g2 . . . gnk1 0 1 g1 g2 ... 0 0 1 g1 g2 . . . . . .. .. . . . . . . 0 0 0 0 1 1 0 G= 0 0 Segundo Mtodo Idea: sea P (x) + P (x) m od G(x) G(x)|[P (x) + (P (x) m od G(x))] Si el Gr(P (x)) n 1 ya est: P (x) + (P (x) m od G(x)) C Truco Dado m(x) con Gr(m(x)) k 1 Gr(xnk m(x)) n 1 En denitiva m(x) V (x) = xnk m(x) m od G(x) + xnk m(x) Ejemplos: m(x) = 1011 1 + x2 + x3 : n = 7 k = 4 x3 m(x) m od G(x) = 0 V (x) = 0 + x3 m(x) = x3 + x5 + x6 0001011 m(x) = 0110 x + x2 x3 m(x) = x4 + x5 x3 m(x) m od G(x) = Truco: G(x) = 1 + x2 + x3 1 + x2 + x3 0(G(x)) x3 1 + x2 (G(x))
?

gnk1 ... gnk1 .. .. . . g1 g2 . . . gnk1 0 1 1 0 0 0 1 0 1 1 0 0 0 1 0 1 1 0 0 0 1 0 1 1

0 1

0 0 1 .. .

... ... ... .. .

0 0 0 . . . 1

= 0 m od (G(x))

85

x4 x + x3 (G(x)) x + 1 + x2 (G(x)) 1 + x + x2 (G(x))

x5 x + x2 + x3 (G(x))
2 2 x + x + 1 + x (G(x)) 1 + x (G(x))

x4 + x5 m od G(x) 1 x + x2 + 1 x x2 +& +& V (x) = (x4 + x5 ) m od G(x) + x4 + x5 = x2 + x4 + x5 001 0110


m(x)

Esto corresponde a la matriz generadora: xnk m od G(x) + xnk xnk1 m od G(x) + xnk1 G= . . . . . . . . . . . . xn1 m od G(x) + xn1 Tenamos: x3 x4 x5 x6 m od m od m od m od G(x) 1 + x2 1 1 G(x) 1 + x + x2 G= 1 G(x) 1 + x 2 G(x) 1 + x 0 derecha. 1 1 0 1 1 1 1 0 1 0 1 1 1 1 1 0 1 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1

Es decir obtenemos la matriz G con identidad a Una matriz de chequeo H es: 1 0 0 1 H = 0 1 0 0 0 0 1 1

En general esto vale claramente: es decir, H (i) = xi m od G(x) : 0 i n 1

86

Ejemplo: sea G(x) = 1 + x2 + x3 + x4 : n = 7 Hallar una matriz de chequeo con la identidad a izquierda. x4 x5 m od G(x) 1 + x2 + x3 m od G(x) x + x3 + x4
3 3 x + x + 1 + x2 + x 1 + x + x2 m od G(x) x + x2 + x3

x6

1 0 H= 0 0 5.5.1.

0 1 0 0

0 0 1 0

0 0 0 1

1 0 1 1

1 1 1 0

0 1 1 1

Correcin de errores Error Trapping

Teorema: sea C cclico de longitud n que corrige t errores, con G(x) = generador. Asuma que se manda V (x) y llega W (x) : E (x) = V (x) W (x) Con |E | t, error corregible. Sean Si los sndromes: Si (x) = xi W (x) m od (G(x)) : 0 i n 1 Si i : |Si | t E (x) = Rotni (Si ) = xni Si m od (1 + xn )

Prueba de Error Trapping: od G(x) = xU (x) m od G(x) Observacin: Rot(U ) m Pues Rot(U ) = xU (x) m od (1 + xn ) Q(x) : xU (x) = Q(x)(1 + xn ) + Rot(U ) xU (x) m od G(x) = Q(x)(1 + xn m od G(x)) + Rot(U ) m od (G(x))

0 pues G(x)|1+xn

Rot U (x) m od G(x) = xU (x) m od G(x) Roti U (x) m od G(x) = xi U (x) m od G(x) Sea i : |Si | t Si (x) = xi U (x) m od G(x) absurdo. i Si (x) = Rot (W (x)) m od G(x) P (x): Roti (W (x)) = P (x)G(x) + Si (x) y Roti (W (x)) Bt (P (x)G(x)) Pero P (x)G(x) C 87

Pero W (x) = V (x) + E (x) Roti (W (x)) = Roti (V (x)) + Roti (E (x)) Y |Roti (E (x)| = |E (x)| t Roti (W (x)) Bt (Roti (V (x))
C

y Bt (P (x)G(x)) Bt (Roti (V (x))) =


C i C

P (x)G(x) = Rot (V (x)) Entonces por y y Si (x) = Roti (E (x)) E (x) = Rotni Si Ejemplo G(x) = 1 + x4 + x6 + x7 + x8 : n = 15 con t = 2 Llega W (x) = 1100 1110 1100 010 W (x) = 1 + x + x4 + x5 + x6 + x8 + x9 + x13 Al aplicar m od G(x) solo tengo que resolver los xi : i > k = 7 (los encuadrados). x8 x9 m od G(x) 1 + x4 + x6 + x7 m od G(x) x + x5 + x7 + x8
7 7 x + x5 + x + 1 + x4 + x 6 + x 1 + x + x4 + x5 + x6 m od G(x) x + x2 + x5 + x6 + x7

x10 x11

m od G(x) x2 + x3 + x6 + x7 + x8
6 7 6 7 x2 + x3 + x + x + 1 + x4 + x + x 1 + x2 + x3 + x4 m od G(x) x + x3 + x4 + x5 m od G(x) x2 + x4 + x5 + x6

x12 x13

S0 = W (x) m od G(x) 4 = 1 + x + x + x5 + x6 + 1 + x4 + x6 + x7 + 1 + x + x4 + x5 + x6 + x2 + x4 + x5 + x6
x8 m od G(x) x9 m od G(x) x13 m od G(x)

=1+x +x +x |S0 | = 4 > 2

88

Contino calculando |S1 |, hasta encontrar uno tal que |Si | 2 S1 = x(W (x) m od G(x))

= x 1 + x 2 + x5 + x7 = x + x3 + x6 + x8
6 6 = x + x3 + x + 1 + x4 + x + x7 = 1 + x + x 3 + x4 + x7

S2 = 1 + x + x2 + x3 + x5 + x6 + x7 S3 = 1 + x + x2 + x3 + x4 . . . S6 = x3 + x4 + x5 + x6 + x7 S 7 = x4 + x5 + x6 + x 7 + x8
4 6 7 4 6 7 = x + x5 + x + x + 1 + x + x + x = 1 + x5 |S7 | = 2 2 = 7

Entonces: E (x) = xni Si m od (1 + xn ) = x157 S7 m od (1 + x15 ) = x8 (1 + x5 ) m od (1 + x15 ) = x8 + x13 V (x) = W (x) + E (x) = 1 + x + x4 + x5 + x6 + x9 Ejercicio: sea G(x) = 1 + x2 + x4 + x5 + x6 + x10 + x11 : n = 23 con t = 3 W (x) = 1 + x7 + x8 + x9 + x12 + x13 Respuesta: V (x) = 1 + x8 + x9 + x12 + x13 + x14 + x15 + x16 Con S16 = 1 + x8 + x9 Denicin: Polinomio Chequeador H (x) = Propiedad (ejercicio) W (x) C H (x)W (x) m od (1 + xn ) = 0 : Gr(W (x)) n 1 89 1 + xn G(x)

6.

P-NP

Denicin: un problema de decisin es un problema cuyas nicas respuestas posibles son S o No (alternativamente 1 0). Ejemplos Matching: dado un grafo G tiene G un matching perfecto? Primo: dado un n N es n primo? K-color: dado un grafo G es (G) k ? Semiformalizacin de problema de decisin. Un conjunto I (conjunto de instancias del problema y una funcin : I {S,No} Alternativamente, tomando el conjunto de instancias positivas. S = {x I : (x) = S} Se puede pensar que un problema es un par (I,S) con S I . En general, dado x I tenemos una medida del tamao de x. En general, # de bits necesarios para representar a x, o algo ligado a eso. Lo denotaremos |x|. Por ejemplo si I = {G : G es un grafo nito}, podemos tomar |G| = #de vrtices. Si I = N |n| = log(n) = #bits de n

6.1.

La clase P

P = clase de problemas de decisin tal que existe un polinomio P (x), y un algoritmo A tal que A resuelve el problema para x I en tiempo O(P (x)) Resolver es que: A(x) = S Si (x) = S N o Si (x) = No

O bien en la forma {I,S} A(x) = S x S Ejemplos: 2 color P Matching bipartito: como Matching con instancia reducida a grafos bipartitos. Vimos que Matching bipartito31 P

6.2.

La Clase NP

NP no signica No Polinomial. (de hecho P N P ). NP signica: Non deterministic Polynomial. Otra forma de denir esta clase que es la clase de problemas de decisin para los cuales existen certicados que verican la respuesta S en tiempo polinomial.
31

Edmonds prob que Matching P .

90

Formalmente (I, S ) N P j, t Ix J y P (x) tales que: 1. (Ix J, T ) P 2. Dado x I vale x S y J : (x, y ) T |y | P (|x|)

6.3.

Co-NP

Denicin: Co-NP = problema de decisin tal que el complemento est en P. Ejemplo: Primo Co-NP Certicado para NO una factorizacin. (En 1976 se prob que Primo NP) y en 2002 se prob que PRIMO P . Complemento de N o Si (x) = S (I, S ) (I, I S ) S Si (x) = N o k-color NP k Certicado: dado un coloreo con k colores ver que es propio es: O(m) = O(n2 ) Observacin: Claramente P N P . El problema del milln es P=NP?

Es (x) =

6.4.

SAT

Un problema importate: SAT Una variable booleana x es una variable que slo puede tomar dos valores 0 1. Dado un conjunto de variables Booleanas: x1 , . . . , xn . Un literal: es una de esas variables o la negacin de ellas. (x = 1 x). Una clasula: (Clause) es un de literales (Disjuncin). Ejemplo: x1 x2 . . . Una expresin Booleana en forma Conjuntiva Normal32 , es una conjuncin ( ) de clasulas. Ejemplo: (x1 x2 ) (x1 x3 x7 ) (x2 x3 x4 ) SAT es:33 dada B en CNF: un asignamiento de valores a las variables que la vuelva verdadera?
32 33

CNF: Conjuctive Normal Form. Nota: SAT, sera sin pedir CNF, esto sera CNF-SAT, pero todo el mudo lo llama SAT.

91

SAT N P : Certicacin una valuacin. Otras formas de SAT estn en P. DN F SAT P : s de s Xor SAT P : s de s (Xors) Pero SAT no se sabe, de hecho Cook prob que SAT P P = N P No probaremos este teorema pero daremos una olfateada al mismo. La clave est en lo que Cook llam: Reduccin Polinomial. Que ahora tambin se conoce como Reduccin de Cook. 6.4.1. Reduccin Polinomial

Denicin: dados dos problemas de decisin = (I, S ) , (J, T ) Diremos que se reduce a ( P ) si: Polinomio P (x) y una funcin : I J : 1. Calcular (x) es O(P (x)) y (x) es polinomial en x. 2. x S (x) i.e. (x) = S ( (x)) =S. Ejemplos sencillos: Tonto y no del todo correcto: : Dada ax2 + bx + c = 0 tiene solucin R? : Dado t R es t 0? Entonces: P tomando t = b2 4 a c Otro ejemplo : Dada A Qnn A es invertible? Dado t Q es t = 0? P tomando Det(A) = t. 6.4.2. k color P SAT

Teorema: k color P SAT Prueba: Dado un grafo G debemos construir polinomialmente una B CN F tal que: (G) k B es satisfactible i.e. un asignamiento que la vuelve verdadera. Sea n = # vrtices de G. Tomemos variables xi,j : 1 i n, 1 j k Para i = 1, . . . , n deno Ci = xi,1 xi,2 . . . xi,k C = C1 C2 . . . Cn

92

Di = j, r j<r j, r = 1, . . . , k

xi,j xi,r

D = D1 . . . Dn Sea Fi,j,l = xi,j xl,j


n k

F = i, l = 1 il E
j =1

Fi,j,l

Tomo B = C D F es O(n + m) Ahora hay que probar que (G) k B es satisfactible. Sea C un coloreo propio con k colores de G. Debemos construir un asignamiento de valores a las variables. xi,j xi,j {0, 1} 1 Si C (i) = j Denimos xi,j = 0 c.c. Debemos ver que : B = B (xi,j ) = 1 Todo vrtice tiene un color i j k : C (i) = j i j k : xi,j = 1 i : xi,1 xi,2 . . . xi,k = 1
Ci

C = C1 . . . Cn = 1 Todo vrtice tiene un slo color i ! j k : C (i) = j i j = r : C (i) = j, C (i) = r i, j < r : C (i) = j C (i) = r xi,j = 0 xi,r = 0 o lo mismo: xi,j = 1 xi,r = 1 xi,j xi,r = 1 i, j < r D = 1 Finalmente como el coloreo es propio il E Tenemos C (i) = C (l) i.e. il E, j : C (i) = C (l) = j il E, j : (C (i) = j C (l) = (j )
xi,j =1

xi,r =1

93

il E, j : xi,j xi,r = 1 F = 1 B =C DF =1 Fin () Ahora sabemos que existe xi,j con B = 1 y queremos ver que: (G) k C = 1 i, j : xi,j = 1 ( ) B = 1 D = 1 i, !j : xi,j = 1 denimos C (i) = el nico j con xi,j = 1 F = 1 ij E, C (i) = C (l) C es propio Cuento con la demostracin de la ida. Observacin: Cook prob N P P SAT Corolario: SAT P P = N P

6.5.

NP Completo

Denicin: un problema es NP completo si: 1. N P 2. N P P Un ao despus de Cook, Karp di otros 23 problemas NP completos, en la actualidad hay ms de 2000. La clave es lo siguiente: Si N P Completo y P : N P Entonces es NP Completo. La demostracin sale del hecho que P , es transitiva, ya que es una composicin de polinomios. A continuacin daremos algunos ejemplos NP completos. 6.5.1. 3-SAT es NP completo

3-SAT es como SAT pero en cada clasula debe haber exactamente 3 literales distintos. 3-SAT es NP completo Prueba: probaremos que SAT P 3-SAT (por Cook). Es decir dada B en CNF debemos construir polinomialmente una B en CNF pero que tenga exactamente 3 literales por clasula y tal que B sea satisfactible B lo es. Supongamos que B = D1 . . . Dm : Di clasulas. Variables de B = x1 , . . . , xn Dada una clasula D arbitraria, deniremos una conjuncin de clasulas E (con ms variables), y luego tomaremos: B = E1 E2 . . . Em donde Ei corresponde a Di . 94

Cada Ei crea sus propias variables extras. Construccin: Si D tiene 3 literales: E =D Si D tiene 2 literales : D = L1 L2 Tomamos una variable extra y {x1 , . . . , xn }. Tomamos E = (L1 L2 y ) (L1 L2 y ) Claramente si L1 L2 = 1 (L1 L2 y ) (L1 L2 y ) = 1 Viceversa: Si {x1 , . . . , xn , y } Tal que (L1 L2 y ) (L1 L2 y ) = 1 Entonces si: y = 0 L1 L2 = 1 y = 1 L1 L2 = 1 Observacin: probamos un poco ms de lo que dijimos x : D x = 1 y : E x, y = 1 Esto valdr en todos los casos. D tiene un literal: i.e. D = L Tomamos: E = (L y1 y2 ) (L y1 y2 ) (L y1 y2 ) (L y1 y2 ) Y es casi obvio que: L = 1 E = 1 i.e. cualquier y1 , y2 D tiene 4 literales. D = L1 L2 . . . Lk Entonces tomamos k 3 variables nuevas: y1 , y2 , . . . , yk3 polinomial en k K >> 4: E = (L1 L2 y1 )(y1 y2 L3 )(y2 y3 L4 ). . .(y k4 yk3 Lk2 )(y k3 Lk1 Lk )

95

#clasulas = k 2 lineal en k . Supongamos ahora D = 1 j : Lj = 1 Denamos: y1 = y2 = . . . = yj 2 = 1 yj 1 = yj = . . . = yk3 = 0

E =(L1 L2 y1 ) (y 1 y2 L3 ) . . . (y j 2 yj 1 Lj ) (y j 1 yj Lj +1 )
=1 =1 HIP =1 =1

. . . (y k3 Lk1 Lk )
=1

E=1 Veamos la vuelta: supongamos que E = 1 Queremos ver que D = 1. Supongamos que no. D = 0 L1 . . . Lk = 0 Lr = 0 r Nos queda: E = y1 y 1 y2 y 2 y3 . . . y k4 yk3 y k3 Como E = 1 Tenemos: y1 = 1 y2 = 1 y 1 y2 = 1 y3 = 1 . . . yk4 = 1 y 2 y3 = 1 y = 1 k 3 Absurdo y 3 y4 = 1 . . . y k4 yk3 = 1 y k3 = 1

6.5.2.

3-color es NP completo

Teorema: 3-color es NP completo Prueba: veremos que 3-SAT P 3-color. Es decir necesitamos : B (3-CN F ) G Sea B = D1 . . . Dm con variables {x1 , . . . , xn }. Dj = L1,j L2,j L3,j Vamos a construir G = (V, E ) con |V |, |E | polinomiales en n, m Ya damos la construccin en general, primero un ejemplo.

96

6.5.3.

Ejemplo 3-SAT P 3-color B = (x1 x2 x3 ) (x2 x3 x4 )

e f e e n f f n fe t cc fe e nf fe e e fe n e f cc  e f e n f e e f n  e f e f e n f e  e f c n e f e f e n f  e c e f n e f e f n  e c f e e f n e f  e f n e c f e e f n e  f e f n e f e e n f eee x ff x4 x3 x2 x1 4 x x1 x2 3 DD 1 Q ee u  Q u e  u DD QQ ee uu  QQ DD ee uu  u 9  ee QQ DD uu  u e  QQ e f s e ee uuu h f e DD h m f e  e f h e m f e h f e ef f  QQ eeee u e hhh f u mmm || DD fe hh fe hf f e f e ee  QQ eeeeee f uu e mmm ||| f hhh fe m f u h  f h DD m e f e h u e f m e e Q fffff hhhh mmm u ee eee ||  f hhhh eeee DD uu e mm || ffffe eeeee f m e f e e uu | e11 ,2 f e m e f 2 , 2 e m f u e DD eefffff e 1 u || mmm f eeeeee uu DD || ue eeeeee fffffffff eee mmm e | m e u e m e e | ee ff ee u DD | mmm eeeeee uuuu fffffffff e || mmm eeeeee f m e | f e f e m e f e e21 ,1 e11 ,1 e e21 ,3 e11 ,3 f

i1,1

{{ {{ { { {{

i1,2

gg gg gg gg i1,3

{{ {{ { { {{ i2,1

i2,2

gg gg gg gg

i2,3

En general: V = {s, t} {x1 , . . . , xn , x1 , . . . , xn } {W1 , . . . , Wm } Con Wj = {ej,1 , ej,2 , ej,3 , ij,1 , ij,2 , ij,3 } E = {st}{txk , txk , xk xk }n k=1 T1 . . . Tm E1 . . . Em F1 . . . Fm {sej,k }

1jm k = 1, 2, 3

Donde: Tj = {ij,1 ij,2 ; ij,2 ij,3 ; ij,3 ij,1 } Ej = {ej,1 ij,1 ; ej,2 ij,2 ; ej,3 ij,3 } Fj = {ej,1 L1,j ; ej,2 L2,j ; ej,3 L3,j } G tiene: 2 + 2n + 6m vrtices, polinomial. G tiene: 1 + 3n + 3m + 9m = 1 + 3n + 12m lados, polinomial. Hay que ver B satisfactible (G) 3 (Como G tiene tringulos (G) 3 (G) = 3)

97

Veamos primero: Sea C un coloreo de G de 3 colores queremos dar un asignamiento de valores a las variables tal que: B (x) = 1 Denamos: 1 Si C (xk ) = C (s) xk = 0 Sino Queremos ver que B (x) = 1 j basta ver: Dj (x) = 1 Hay que probar j L1,j L2,j L3,j = 1 Veamos como Tj es un tringulo entonces los 3 colores estn representados. Entonces: k : C (ij,k ) = C (t) ij,k ej,k E C (ej,k ) = C (ij,k ) = C (t) sej,k E C (ej,k ) = C (s) st E C (s) = C (t) C (ej,k ) = tercer color Como ej,k Lj,k E C (Lk,j ) = tercer color tLk,j E C (Lk,j ) = C (t) C (Lk,j ) = C (s)

Por denicin Lk,j = 1 Fin Dado un asignamiento de valores x : B (x) = 1 debemos construir un coloreo propio con 3 colores. Denimos: C (s) = 1 , C (t) = 2 st No Crea Problemas (NCP). Coloreamos: C (xi ) = xi xi xi (N CP ) C ( xi ) = 1 xi Adems: C (xi ), C (xi ) {0, 1} C (t) = 2 txi , txi (N CP )

Como B (x) = 1 Dj (x) = 1 j = 1, . . . , m i.e. L1,j L2,j L3,j = 1 j, k : Lk,j = 1 (si hay ms de uno elijo alguno) Coloreamos: C (ej,k ) = 0 Como Lk,j = 1 C (Lk,j ) = 1 Y coloreo: C (ej,r ) = 2 : r = k C (Lr,j ) {0, 1} ej,r Lr,j 98 (N CP ) Lk,j ej,k (N CP )

Como:

C (ej,k ) = 0 C (ej,r ) = 2 sej,k y los sej,r C (s) = 1

(N CP )

Finalmente coloreamos: C (ij,k ) = 2 C (ej,k ) = 0 ej,k ij,k (N CP )

Y coloreamos: C (ij,r ) = 0 1 : r = k ij,r ej,r


0

(N CP )

1 =2

Finalmente el tringulo:
}} }} } } }}

ij,2

ij,1

ee ee ee ee ij,3

Tiene un vrtice de color 2 el (j, k ) uno de color 0 y otro de color 1

(N CP )

99

6.5.4.

2-SAT P

D[j ] = Clasula j-sima, un par de nmeros (L, R). Registros x[0] , . . . , x[n-1] ; x[n] , . . . , x[2n-1] Representan x1 , . . . , xn ; x1 , . . . , xn 2-SAT
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 V ariables : x0 , . . . , xn1 SET EAR(v ) : //M ACRO X [v ] = 1; X [2n 1 v ] = 0; Q = Q P [v ] P [2n 1 v ] N = { 0 , . . . , n 1} ; // V a r i a b l e s no s e t e a d a s M = { 0 , . . . , m1} ; // D i s j u n c i o n e s no s a t i s f e c h a s Q = ; f o r ( i = 0 , i < 2n , i ++){ x [ i ] = 1 ; P [ i ] = { j M : i a p a r e c e en D[ j ] } ; } f o r ( j = 0 , j < m, j ++){ Sat [ j ] = 0 ; } while ( N = ) Tomar i N, SETEAR( i ) ; while (Q = ) { E l e j i r j Q; L ,R: D( j ) = {L ,R} ; i f ( ( x [ L ] == 1 ) | | ( x [R] == 1 ) ) { Sat [ j ] = 1 ; Remover j de Q; // Pero no de M } e l s e i f ( x [R] <0) { SETEAR(R) ; / S i X[R] < 0 , d e b e s e r x [ i ] = 0 e n t o n c e s debo a s i g n a r x [R] = 1 / } e l s e i f ( x [ i ] <0) { SETEAR(L) / E s t e e s t a d o e s cuando queda e l c a s o 00 , por l o t a n t o nos equivocamos coon e l s e t e o de x [ i ]= 1 , por l o t a n t o hay que cambiar / } e l s e i f ( x [ i ] == 1 ) { // Anular t o d o s t N, s M { SAT( s ) = 0 ; x [ t ] = x [ 2 n1 t ] = 1; } Q = ; SETEAR[ 2 n1 i ] } else return "NO SAT" } i N, j : SAT [j ] = 1 { B o r r a r j de P [ i ] y P [ 2 n1 i ] } } Return "SAT"

28 29 30 31 32 33 34 35 36 37 38 39 40 41 42

100

6.5.5.

HORN-SAT

HORN-SAT es como CNF-SAT pero donde cada clasula tiene a lo sumo un literal positivo : xi positivo y xi negativo Teorema: HORN -SAT P Prueba: x1 x2 . . . xk xk+1 x1 x2 . . . xk xk+1 x1 x2 . . . xk xk+1 El algoritmo empieza seteando todas las variables a f alse. Recordamos: true true true F alse true true f alse f alse Entonces todas las disjunciones de la forma: x1 x2 . . . xk xk+1 van a ser true
f alse f alse

Las de la forma: x1 x2 . . . xk x1 x2 . . . xk f alse x1 x2 . . . xk f alse


f alse

true El nico problema son las disjunciones de la forma: x true x


f alse

f alse Si hay una de esas, listo. Si hay, seteamos estas variables a true (permanentemente). Luego de eso se hacen true todas las variables xk+1 que estn en una disjuncin de la forma: x1 . . . xk xk+1 En donde x1 , . . . , xk sean true. Si en algn momento se llega a una contradiccin, no se puede satisfacer. La contradiccin vendra de alguna de la forma: x1 x2 . . . xk con todas las xi true

Ejemplo: (x y z w) (x y ) (z w x) (x z ) (y z ) y y = 1 z = 1 x = 0, z = 0 Pero supongamos que siguiera con . . . (y z U ) (u x) y=1z=1U =1x=0 No se puede resolver x y 101

7.
7.1. 7.2. 7.3.

Introduccin a la Inteligencia Articial

Hill Climbing Simulated Annealing Algoritmos Evolutivos

Tomar una poblacin de posibles soluciones (por ejemplo una cadena de bits). 1. Elegir un miembro de la poblacin. 2. Cambiar cada bit de ese miembro y evaluar si el cambio mejora la solucin. Nos quedamos con el mejor: Si hay uno repetir 2. Sino, guardar el individuo en un conjunto B, y repetir 1. 3. Finalmente elegir el mejor de B. Este algoritmo es evolutivo pero no gentico

7.4.

Algoritmos Genticos
Gentico Interaccin entre individuos.

Los algoritmos genticos34 , se basan ms o menos en la evolucin biolgica. Cada individuo, tiene cromosomas, que forman cadenas de ADN, se dividen en Genes que codican un aspecto del individo, por ejemplo el color de los ojos. El conjunto de cromosomas se llama genotipo y las caractersticas inducidas en el individuo por la accin del genotipo y el medio ambiente es el fenotipo. Tambin podemos distinguir entre especies haploides y diploides, (humanos). Los cromosomas vienen en pares con genes dominantes y recesivos. Haploide: los cromosomas no estn emparejados. En la mayora de los algoritmos genticos los individuos son haploides y con un solo cromosoma. A veces a los individuos se les llama cromosomas. Pero a veces el individuo tiene algo ms que cromosomas. Una parte importante de un AG es codicar el problema con cromosomas. Un cromosoma ser una cadena de smbolos, usualmente bits o un vector de nmeros. Ejemplos: 1. Maximizar una funcin en R3 la codicacin puede ser una cadena de 3 nmeros. 2. Hallar un recorrido de n ciudades que no repita ninguna y minimice la distancia (TSP)35 . Codica una cadena con el nombre de cada ciudad (sin repetir).
34 35

AG. Travel Salesman Problem.

102

En todo AG necesitamos una funcin a maximizar, llamada funcin de Fitness36 . En los ejemplos anteriores: 1. f es la funcin. 2. Sera la f del costo del camino. A veces como en TSP no toda cadena representa una solucin, por ejemplo puede ser que no haya camino entre las dos ciudades. Generalmente se soluciona creativamente, por ejemplo en TSP, podemos suponer que hay ruta entre 2 ciudades cualesquiera, asignndole, un peso muy grande si no existe en la realidad. Pero en otros problemas esto es ms delicado. Es la primera caracterstica de un AG. 1) Una poblacin de individuos con cromosomas y una funcin de tness adecuada. Otra caracterstica es: 2) Seleccin de individuos a reproducirse mediante la tness. Un AG tendr lo que se llaman Generaciones. Poblacin Inicial (generacin 0) Algo Poblacin nueva (generacin 1) Algo Poblacin nueva (generacin 2) 7.4.1. Seleccin

Los individuos a reproducirse se seleccionan de a pares y luego viene lo esencial: 3) Los progenitores producen nuevos individuos ( ospring) por medio del cruzamiento ( crossover) de genes. 4) Los ospring son sometidos a mutaciones al azar. Operador mutacin. Esto depende de una tasa de mutacin, generalmente baja 0, 001 5) Debe haber un operador de Seleccin entre Progenitor 1, Progenitor 2, ospring 1 y ospring 2. (es decir tengo que matar a 2). 6) Debe haber una condicin de terminacin. Por ejemplo, un nmero mximo de generaciones.

7.5.

Ejemplo de un AG

Problema: dado un nmero natural escribirlo como suma, resta, producto y divisin de los dgitos: 0, 1, . . . , 9 quizs repetidos (asociando a izquierda).
36

Adaptabilidad.

103

7.5.1.

Codicacin del ejemplo

Una posibilidad sera una cadena de smbolos del alfabeto A = 0, . . . , 9, +, , / pero que debe tener: N Smbolo N . Problema: crossover y mutaciones se pueden complicar. Una posibilidad es hacer cadenas de pares (N ,operador) u (operador, N ) y suponer que empezamos con 0. Otra posibilidad: simplemente usar cadenas de bits, entonces un gen sern 4bits. 0000 0 0001 1 . . . 1001 9 1010 + 1011 1100 1101 / 1110 N ada 1111 N ada

El cromosoma ser el genotipo, el fenotipo en cambio tiene que ser una cadena: 0 Smbolo N Smbolo . . . que adems no tenga /0. Genotipo F enotipo Si es 14 15 lo descartamos. Si es N y se requiere un Smbolo lo descartamos. Si es un Smbolo y se requiere un N lo descartamos. Sino se usa. Si tenemos un /0 cambiar 0 por 1. 7.5.2. Fitness del ejemplo
1 F enotipo31

Fitness ser algo como : = 7.5.3.

si si

F enotipo = 31 F enotipo = 31

Entrecruzamiento del ejemplo

Crossover: Singled Point Crossover Progenitor 1: b1 b2 b3 . . . b400 Progenitor 2: b1 b2 b3 . . . b400 Elijo al azar un nmero x : 0 < x < 400 y obtengo: Por ejemplo x = 127 Ospring 1: b1 b2 b3 . . . b127 b128 . . . . . . b400 Ospring 2: b1 b2 b3 . . . b127 b128 . . . . . . b400 7.5.4. Mutacin del ejemplo

Para cada bit lo cambio con probabilidad p. 104

7.5.5.

Seleccin del ejemplo

Mato a los padres, me quedo con los osprings. 7.5.6. Operadores de Seleccin

Asumimos que cada individuo tiene una tness Fi calculada. Queremos seleccionar de los n individuos, quines se van a reproducir, tomando, en cuenta las Fi . Hay varios mtodos, los ms usados caen en un categora llamada: Fitness Proportional Selection
n

Fi

Sea F =

i=1

la tness promedio.

i = # esperado de veces que el individuo i, debera ser seleccionado de Sea Ei = F F acuerdo a su tness.

Ei = n

Fi
n

Fj
j =1

Queremos seleccionar i con un mtodo que lo elija cerca de Ei veces. El primer mtodo propuesto por Holland, hace esto lo ms cercano posible se llama Stochastic Sampling With Replaciment (SSWR), o Ruleta. Elijo un nmero al azar y elijo ese nmero. Calculando las Ei s se toma un nmero al azar A entre 0 y n y se toma el primer
i

i:
j =1

Ej > A Ejemplo: 6 individuos. Fitnesses F1 F2 F3 F4 F5 F6 = = = = = = 17,118 9,51 36,138 22,824 91,296 13,314
6

j =1

Fj = 190, 200

Lo ms simple es tomar un nmero al azar entre 0 y 1 que por ejemplo tomando r (0, 1) y calculo r 190, 2. Para entender mejor otros conceptos, haremos el clculo sin embargo con los Ei s E1 = 0, 54 E2 = 0, 30 Fi E3 = 1, 14 6 Ei = E4 = 0, 72 190, 2 E = 2, 88 5 E6 = 0, 42 105

Ruleta: # al azar: entre 0 y 1: 0, 15 0, 7 0, 22 0, 91 0, 46 0, 63 Multiplico por n = 6 0, 90 4, 2 1, 32 5, 46 2 , 76 3, 78 1 0, 54 2 0, 84 i 3 1, 98 1 3 Ahora calculo: Ej 4 2, 70 j =1 5 5, 58 2 , 4 , 5 , 6 66 Este mtodo puede producir lo que se llama Crowding de la poblacin por un individuo o grupo de individuos y convergencia temprana a un mximo local, adems tiene otro problema. Hay 3 medidas de un operador de seleccin: Bias. Spread. Eciencia computacional.
i Bias: es la diferencia entre F y el valor esperado de veces que el individuo ser selecFi cionado con el mtodo propuesto.

Bias(Ruleta) = 0. Spread: rango de ospring que un individuo puede tener: Ruleta(Spread(i)) = [0, n]. Conclusin: ruleta tiene Bias = 0 y Spread Mximo (malo). Eciencia: buena, pero se necesitan n randoms. Alternativa a Ruleta: Stochastic Universal Sampling (SUS), usa un slo nmero al azar, digamos r y toma los puntos: r, r + 1, r + 2, . . . , r + (n 1). 0,15 I1 Entonces nos queda: 11 20 31 41 53 60 (0, 54) (0, 34) (1, 14) (0, 72) (2, 88) (0, 42) En nuestro caso: r = 0, 15 1,15 2,15 3,15 4,15 5,15 I3 I4 I5 I5 I5

Bias = 0. Pero Spread(i) = { Ei , Ei }. Y un factor extra que tengo que elegir a quin reproduzco con quin. 106

7.5.7.

Remainde Methods (Mtodos del Resto)

El individuo, se selecciona determinsticamente. Se toma Ei veces.


n

Los n
i=1

Ei posibles se llenan con algn otro mtodo.

Por ejemplo se usan los restos: Ri = Ei Ei y se distribuyan usando Ruleta o SUS. Ejemplo: E1 E2 E3 E4 E5 E6 = = = = = = 0, 54 0, 30 1, 14 0, 72 2, 88 0, 42 =0 =0 = 1 =0 = 2 =0 R1 R2 R3 R4 R5 R6 = 0, 54 = 0, 30 = 0, 14 = 0, 72 = 0, 88 = 0, 42

Entonces me quedan 3 slots, por ejemplo uso ruleta para asignarlos. Elijo 3 nmeros al azar: r = 0, 15|0, 7|0, 22. Multiplico por n = 3 0, 45 2, 1 0, 6 I1 I5 I2 Orden 0,54 0,54 0,30 0,84 0,14 0,98 0,72 1,7 0,88 2,58 3 0,42 11 21 31 El asignamiento nal nos queda: y luego apareo al azar. 40 53 60 7.5.8. Otros mtodos Fitness Proportional

Los mtodos que hemos visto con BIAS = 0 o casi pueden producir que al principio cuando hay gran disparidad de Fitness, un grupo de individuos con alta tness relativa, cope la poblacin. Impidiendo una bsqueda exhaustiva, de todo el espacio de bsqueda, por otro lado, luego de que se estabilice la poblacin es difcil para un individuo con mayor Fitness inuenciar la bsqueda produciendo un estancamiento. Por esto se han propuesto alternativas. 107

7.5.9.

Sigma Scaling

En este mtodo se calculan las Ei en forma distinta Ei Se dene Ei = 1+


Fi F 2

=0 : = desvo estndar de los Fi . =0

Ventaja: al principio, suele se grande, entonces se evita Crownding, al nal 0. Entonces el mejor individuo se va a reproducir mucho ms. Ejemplo: con las Fitness de antes obtengo = 30, 627 Y voy calculando los Ei Primero: E1 = 1 + Ei
j =1

17, 118 31, 7 = 0, 762 2


i

Ej 0, 762 1, 400 2, 472 3, 327 5, 3 6

E1 E2 E3 E4 E5 E6

= 0, 762 = 0, 638 = 1, 072 = 0, 855 = 1, 973 = 0, 700

Aplico Ruleta Elijo n = 6, nmeros al azar 0, 15 0, 7 0, 22 0, 91 0, 46 0, 63 Multiplico por n = 6 0, 90 4, 2 1, 32 5, 46 2, 76 3, 78 I2 I5 I2 I6 I4 I5 Obtengo algo ms balanceado. Si hubiera aplicado SUS: con r = 0, 15 0, 15 1, 15 2, 15 3, 15 4, 15 5, 15 I1 I2 I3 I4 I5 I5 Roletamiento Ei =
e
Fi T rj eT

: T temperatura, inicialmente alta y luego se enfra

Otros mtodos no usan Fitness Proporcion Por ejemplo: mtodos de Rango, se usan las Fi para ordenar los individuos y luego se elije por algn mtodo. Basndonos slo en la posicin en ese ordenamiento. Otras Selecciones: no tan basadas en Fitness. 108

Mtodos de rango: se usa la Fitness para ordenar la poblacin y luego se usa una medida que dependa slo de la posicin en esa poblacin. Lineal Ranking: LR(pos) = (2 SP ) + 2(SP 1) SP parmetro en [1, 2] SP es por Selective Pressure Estas tomaran el lugar de los Ei i.e. sera: Ei = LR(P os(i)) Por ejemplo SP = 1 LR(pos) = 1pos, no hay presin. 1 SP = 2 LR(pos) = 2 pos n1 SP (1; 2), por ejemplo SP = 1, 2 LR(pos) = 0, 8 + 0, 4 pos 1 n1
pos1 n1

SP no tiene que ser jo, podra ir aumentando para aumentar la presin. Ejemplo: con las Fitness del ejemplo anterior F2 1 Tomando SP = 1, 2: E1 E2 E3 E4 E5 E6 = LR(3) = 0, 96 : 3 es la posicin = LR(1) = 0, 8 = LR(5) = 1, 12 = LR(4) = 1, 04 = LR(6) = 1, 2 ,4 = LR(2) = 0, 8 + 05 = 0, 88 < F6 2 < F1 3 < F4 4 < F3 5 < F5 6

Seleccin Torneo Seleccionar k (usualmente 2) individuos y quedarse con el mejor, en un torneo determinsticamente o probabilsticamente. 7.5.10. Crossover

SinglePoint TwoPointCroospoint Mscara Binaria Supongo que tengo esta mscara, generada al azar: 1,0,0,1,1,0,1,0,1,1. P1 = 2 P2 = 4 9 2 7 3 2 6 5 6 109 3 3 1 9 6 8 5 0 8 9

Obtengo: O1 = 2, 2, 3, 2, 5, 3, 1, 8, 5, 8 O2 = 4, 9, 7, 6, 6, 3, 9, 6, 0, 9 Partial Map Crossover Qu pasa con codicacin del problema que depende de la posicin? P1 = BIGAECJF DH P2 = DJBF ECIGAH Corta en dos lugares: O1 = BIG|JECA|F DH O2 = DJB |F IEC |GAH Tambin se puede hacer con mscaras. Order Based Cyclic Crossover VERRRRRRRRRRRRRRRR 7.5.11. Mutacin

Strings de bits: cambiar cada bit con probabilidad p 0. Strings de enteros o reales: tambin se puede hacer algo as, pero en el caso en que haya fronteras se hace otra cosa. Por ejemplo supongamos que la frontera es: |Ii | 10 es i I = 0, 5|7, 8|5 I = 0, 5|10|5 O bien: I = 0, 5 7.5.12.
10+7,8 2

Mutaciones con Permutaciones

Mutacin para codicaciones basadas en posiciones TSP. Permutar dos elementos al azar. Elegir uno al azar y cambiarlo con un vecino Inversion Mutation, elijo dos puntos al azar y cambio todos los lugares entre si: GRAFICO Algunas otras arquitecturas 1. Elitismo (los mejores miembros permanecen). Graf 2. A veces la mutacin no se aplica solo a los osprings. 110

3. Steady State 4. Migraciones Inundacin: mato a los peores cada tanto, se usa mucho con restricciones muy cortas, cada tanto tengo una subpoblacin no vlida pero la penalizo, pero es muy buena, luego la mato.

7.6.

No Free Lunch

Todos los algoritmos que optimizan37 en funciones se comportan, promediando sobre todos las funciones posibles, igual.

Referencias
[1] Biggs: Matematica Discreta [2] Roberts, Applied Combinatorics [3] Tarjan: Data Structures and Network Flows [4] BFS: http://en.wikipedia.org/wiki/Breadth-first_search [5] DFS: http://en.wikipedia.org/wiki/Depth-first_search [6] rboles en Latex: http://www.essex.ac.uk/linguistics/external/clmt/latex4ling/trees/ pstrees/ [7] Cdigo C en latex: http://stackoverflow.com/questions/586572/make-code-in-latex-look-nice

37

Por ejemplo calcular mximo

111

You might also like