Professional Documents
Culture Documents
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.
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`
`` `` `` `
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
4 aa aa aa 3
1 aa
aa aa aa 3
4 aa
aa aa aa
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
DF S (A)
A
1
B
1
C
1
Dd
1
dd dd dd d
G
1
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)
B
1
A ss ccc s s cc ss cc sss s 1 c s ss C
1
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)
E (1)
G(1)
1
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
1.1.2.
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 ~~ ~
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
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
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)
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
f (xy ) f (xy ) x, y V xy E
(1)
(2)
f (yx) f (yx) x, y V yx E
(3)
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.
Hasta que no se pueda ms buscar caminos de s a t y mandar ujo por ellos. 2.1.1. Ejemplos de Greedy
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
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
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.
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.
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
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
, .
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
= V (f ) V (f ) =
x S
Outf (x)
xS
Inf (x)
x S
=
x S
f { x} , V
f V, {x}
(4)
(5) (6)
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.
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
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
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
21
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
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.
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)
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
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.
26
2.4.2.
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
H t E D 3 10
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
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
s KI:10
27
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.
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.
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)
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
sD F AIt : 1
sD GAIt : 2
sE F AIt : 3
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
sc
D cc cc cc c E
/
()
()
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
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.
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
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
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
2.6.3.
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
E 7 4 0
-25
6 7
4 7
3
I 1 0
H 3 0
J 2 0
-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
I 1 0
H 3 0
J 2 0
7 0
2 0
Nivel 3 t 7 & 12 & & 13 & & 16 & & 18 & & 25 & 27
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)
|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 )
Notacin W (xy ) = W (T ).
xy E (T )
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
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
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.
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.
(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
(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
1) 2) 4) 5)
D (3, A) (3,A)
E (1,A)
3) (4, D)
3.3.
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.
Compl(Kruskal) =
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
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
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.
yt
y Y
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
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 ) =
Mf (z ) = Outf (z ) =
1 Si z V (M ) 0 Si z V (M )
52
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 }
4.2.
Teorema de Hall
4.3.
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.
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
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
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
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
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
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
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
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
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
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
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
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
58
A B C D E F G
IV 1 1 0 0 0 1 0 B & IV 1 1 0 0 0 1 0 B &
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
A B C D E F G
IV 1 1 0 0 0 1 0 B & IV 1 1 0 0 0 1 0 B & A
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
A B C D E F G
A B C D E F G
1
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
59
4.5.
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
60
( ( ( (
4.6.
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
Ci,j = i=1 j : ij M
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
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
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
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
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 *
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.
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
25
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
000000
010101 3
101010 3 6
111111 6 3 3 (C3 ) = 3
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: .
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:
+ 1 unos de estos.
+1 (x)
d1 2
+1 (y )
Luego d(x, z ) = |x z | = |x x e | = |e | =
+1
70
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)
|Bt (x)|
71
Bt (x) =
r=0
|Bt (x)| =
r=0
|Sr (x)|
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
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
74
5.3.
Matriz de chequeo
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 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
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
H H
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
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
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 )
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)
( 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
m od (1 + xn ) C
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(Q(x)G(x)) n 1
R(x) = 0
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)
|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 :
(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
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))
?
0 1
0 0 1 .. .
0 0 0 . . . 1
= 0 m od (G(x))
85
x5 x + x2 + x3 (G(x))
2 2 x + x + 1 + x (G(x)) 1 + x (G(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
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
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
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)
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
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
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
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.
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:
(N CP )
(N CP )
1 =2
Finalmente el tringulo:
}} }} } } }}
ij,2
ij,1
ee ee ee ee ij,3
(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
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.
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
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.
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
si si
F enotipo = 31 F enotipo = 31
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
7.5.5.
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.
Los n
i=1
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
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
E1 E2 E3 E4 E5 E6
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
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
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
111