Sie sind auf Seite 1von 111

Resumen de Discreta II

Maximiliano Illbele
16 de agosto de 2012

ndice
1. Coloreo y repaso de grafos
1.0.1. BFS-DFS . . . . . . . .
1.1. Coloreo . . . . . . . . . . . . .
1.1.1. Nmero Cromtico . . .
1.1.2. Algoritmo Greedy para
1.1.3. Propiedades de Greedy .
1.1.4. Heursticas . . . . . . . .

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

4
. 5
. 6
. 6
. 7
. 8
. 10

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 . . . . . . . . . .

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

. . . . .
. . . . .
. . . . .
coloreo
. . . . .
. . . . .

.
.
.
.
.
.

12
14
14
15
15
16
20
21
23
24
27
28
29
30
32
33
35
36
36
38
39

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

4. Matchings
4.1. Transformacin del problema de Matching a uno de flujo 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) . . . . . . . . . .

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

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

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

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

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

51
51
53
53
53
54
55
60
61
62
62
63
63
65
67

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

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

68
71
74
75
80
80
87

.
.
.
.

90
90
90
91
91

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

7. Introduccin a la Inteligencia Artificial


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. Codificacin 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 . . . . . . . . . . . . . . . . . . .

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

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

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

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

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

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

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

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

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

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

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

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

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

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

102
102
102
102
102
103
103
104
104
104
104
105
105
107
107
108
109
110
110
111

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

1.

Coloreo y repaso de grafos

Recordemos que un grafo G es un par (V, E) donde E {A V : |A| = 2}.


Donde V es el conjunto de vrtices onodos y E es el conjuntode lados1 o aristas.


Ejemplo: sea G = {1, 2, 3}, {1, 2}, {1, 3}
Grfico(G) :







1<

<<
<<
<<
<

Notacin usual
{x, y} xy
Vecinos de un nodo x: (x) = {y V : xy E}




Grado2 o Valencia de un vrtice: d(x) = (x)
Menor valencia de G: = mn{d(x) : x V }
Mayor valencia de G: = max{d(x) : x V }
Definiciones
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







1 ==

4

==


==
== 

_3

Disconexo
_5







1 ==

==
==
==
_3

4 ==

==
==
==

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

Ejercicio: demostrar que es una relacin de equivalencia.


1. Reflexividad: x x
2. Simetra: x y y x

xy
3. Transitividad:
xz
yz
1
2

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
 
n
m
=
2

n(n1)
2

Si G es conexo n 1 m
1.0.1.

BFS-DFS
DFS(x)-Depth First Search3

Su funcionamiento consiste en ir expandiendo todos y cada uno de los nodos que va


localizando, de forma recurrente, en un camino concreto. Cuando ya no quedan ms nodos
que visitar en dicho camino, sube en el rbol, de modo que repite el mismo proceso con
cada uno de los hermanos del nodo ya procesado.
Ejemplo DFS

A
z ???
zz
??
z
??
zz
z

?
zz
_
_
D
C
B
y @@ mmm
yy mmmmm@@@
y
y m
@@
 yyymymmmm
@ 
m
m
E

DF S(A)

N ivel 0

N ivel 1

N ivel 2

D@


N ivel 3

@@
@@
@@
@

N ivel 4

DFS: Bsqueda en profundidad.

N ivel 5

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)

A?
??
zz
z
??
z
z
??
zz

?
z
z
_D
_
B
C
y @@ mmm
yy mmmmm@@@
y
y m
@@
 yyymymmmm
@ 
mm
E

1.1.

A
ss ???
s
s
??
ss
??
sss
s

?
s
ss
C

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

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) 6= C(y)
Ejemplo de coloreo
A(1)

FF
x
FF
xx
FF
x
FF
xx
x

F
x
x
_ D(2)
_ C(3)
B(2)
FF kkk
x
xx kkkkkFkFF
x
FF
x kk
FF 
 xxxkxkkkkk
k

E(1)

G(1)


F (2)
1.1.1.

Nmero Cromtico

En general deseamos calcular el nmero cromtico de G : (G).


Donde (G) = mn{k : un coloreo propio de G con k colores }.
Propiedad: 1 (G) n
4

BFS: bsqueda en anchura.

1.1.2.

Algoritmo Greedy para coloreo

Requiere un orden de los vrtices: x1 , . . . , xn .


Inicio: C(x1 ) = 1
Para j > 1
C(xj ) = El menor color que no crea conflicto con los vrtices ya coloreados.
n
o
C(xj ) = mn k : C(xi ) 6= k i < j : xi (xj )
Invariante: en todo momento el coloreo es propio, por lo tanto al terminar da un
coloreo propio.
Ejemplo:
_D
_
@@
~B @@@ C
~
~
@@
~
~

@
~
~
@@
@@
~
~
~
~
@@
@
~
~~
  @@@~~~
@
E
A@
 ~~~ @@@
@@
~~
@@
  ~~~
@@
~
@@
@@  ~~
~~
@ ~~~
@ ~~
_

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

F
3

G
4

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

E
1

Complejidad de coloreo con Greedy



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

A cuando i es Impar
C(xi ) =
B cuando i es Par
Pero entonces el lado x1 x2r+1 tiene los 2 vrtices del mismo color Absurdo.
|{z} | {z }
A

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 definimos:

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
Definicin: 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:

i es Impar
Sea G : V = {1, . . . , 2r} y con E = ij
y j 6= i + 1
j es P ar
Para simplificar veamos el grafo correspondiente a r = 4
x1 BUQQUUU x3 BQQ mmx5 B iiimimx7
BBQQ|QU|Q|UUUU BmBmQmQ|Q|Q|iiiiBimBmm|||
B| QmQmmUUBiU|ii QmQmm B|
|m|BmBmiBmBimiiQiQi|Q|iQm|QBmUBmBUmBUmUUQUQ|UQ|Q|QBBBB
|
| mii
| m QQ | UUUQUQ
x2 imi x4 m
x6
x8
8

Luego Greedy corriendo en orden x1 , . . . , x2r = x8 va a necesitar r = 4 colores:


Color
Vrtice

Pero si definimos C(xi ) =

1
x1
x2

2
x3
x4

3
x5
x6

4
x7
x8

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

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

Sean V1 los vrtices de color 1

Sean V2 los vrtices de color 2


en algn coloreo (propio) con t colores.
..

Sean V los vrtices de color t


t

Induccin en t:
Si t = 1 obvio.
Supongamos que vale para t 1
Orden de los vrtices:
Los de V1 < los de V2 < . . . < los de Vt , en Vi los ordeno como quiero.
Por hiptesis inductiva hasta Vt1 lo coloreamos con t 1 colores.
Los de Vt no estn unidos entre si Greedy en cada uno de sus vrtices usar uno
de los primeros t 1 colores o el color t, nunca hay conflicto 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:
6= (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 , . . . , xn ).
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 conflictos.
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 >MMM 3 ; qqqqq5
>> MMM qqq;qq;qq;q
>> qqMqqMqqM ;
q>qq MM ;
q
qqqq >> MMM;M;
qqqqq
2
4
6

2
6
7

3
qqq
 qqqqqqqqq



q
 qqqqq
qqqqqqqqq


qqq

3 > qqq5
 q>q>qq>qqqqq


 qqqq >>>
qqqqqqqqq

>

 qq
qqqqq
4

pp5
ppppp
p
p
p
p
ppppp
ppppp
p
p
p
p
pp
ppppp

3
2

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

10

Luego corro Greedy con: x6 = 1 x5 = 6 x4 = 4 x3 = 5 x2 = 3 x1 = 2


Es decir en el orden: 2, 3, 5, 4, 6, 1
Y nos da (G) = 2
3. RLF: Recursive Largest First
1 RLF( )
2 {
3
color = 1;
4
R = V; // Vrtices no C o l o r e a d o s
5
while ( R 6= ) {
6
L = R;
7
while ( L 6= ) {
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).
Definicin: dado un network N = (V, E, C) y vrtices distinguidos s, t V , un flujo
en N , de s a t es una funcin f : E R tal que:

1. Feasability8 : 0 f (xy) C(xy) xy E


P
P

2. Conservacin:
f (xy) =
f (yx) x 6= s, t
y+ (x)

y (x)

3. s Productor:
X

f (sy)

f (ys)

y (s)

y+ (s)

10
Como s produce se llama la fuente9 y t se llamar
.
P resumidero

En algunos textos se pide directamente que:


f (ys) = 0
y (s)

O ms an: C(ys) = 0 y (s)


Notacin:
P

f (xy) = Outf (x)


y+ (x)

f (yx) = Inf (x)

y (x)

Definicin: el valor del flujo es V (f ) = Outf (s) Inf (s)

Viabilidad.
Source.
10
Sink.
9

12

Propiedad: V (f ) = Inf (t) Outf (t)


Prueba:
Sea D = Inf (t) Outf (t)

0
x 6= s, t
V (f ) x = s

D x = t

P

Outf (x) Inf (x) = V (f ) D ?


Outf (x) Inf (x) =

xV

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

f (xy)

xA
yB

xy E
X

Outf (x) =

X X

f (xy)

(1)

xV y+ (x)

xV

f (xy)

x, y V

xy E
= f (V, V )

(2)

( 1) Por definicin de Outf (x).


( 2) Notacin.
Similarmente:
X
X X

Inf (x) =
f (yx)
xV y (x)

xV

f (yx)

x, y V

yx E
= f (V, V )
( 3) Por definicin de Inf (x).
? Nos queda: f (V, V ) f (V, V ) = V (f ) D
{z
}
|
=0

V (f ) = D

13

(3)

Problema a resolver: dado un network N hallar f que maximice V (f ).


Esto se conoce como el problema del flujo maximal11 .
Notacin:

Sea s = x0 , x1 , . . . , xr = t : xi xi+1 E , la notacin: s, x1 , . . . , xr1 , t : 


Significa que se mandan  unidades de flujo a travs de ese camino, es decir, si G era
un flujo existente definimos:
(

G(xi xi+1 ) +  Si xy = xi xi+1


f (xy) =

G( xy)
Si no

2.1.

Algoritmo de Greedy para hallar Flujo

Hasta que no se pueda ms buscar caminos de s a t y mandar flujo por ellos.


2.1.1.

Ejemplos de Greedy

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


/

?A

C@
@

@@
@@
@

s>

>>
>>
>>
>

E
~>
~
~
~~
~~

> G >>
>>
~~
~
>>
~
~
>>
~~

?t
@@
@@
@@
@

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 flujo sino tambin que es

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

da: f (EF ) = 15

Ejemplo: todas las capacidades son 1000 excepto: C(CD) = 1 y C(CB) = 900
/B
A
G >>
? 00
>>

00


>>



0

>>

00 


0

s?
?t
??
 000
??
00
??

0
? 
/
D
C

Corremos Greedy con el orden alfabtico


11

Por ahora no est claro que f exista.

14

1. Primer camino: s, A, B, t: 1000


2. Segundo camino: s, C, D, t: 1
3. Terminamos porque no hay ms posibles caminos.
En este caso el flujo obtenido (1001) no es maximal, el flujo maximal correspondiente
es: (1901)
Eligiendo caminos obtenemos el flujo 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 flujo 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 flujo.
Adems sabemos que por cada aumento se satura al menos un lado.
Hay a lo sumo m aumentos.
Complejidad(Greedy) = m O(m) = O(m2 )

2.2.

Algoritmo de Ford y Fulkerson

Definicin: 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 flujo, lados Backward.
Hasta que no se pueda ms buscar caminos aumentantes y mandar flujo por ellos.
12

Augmenting path.

15

2.2.1.

Lema del Camino Aumentante

Si f es un flujo y se aumenta a lo largo de un camino aumentante el resultado tambin


es flujo. Ms an si se manda  por el camino aumentante, el valor del nuevo flujo es
V (f ) + .
Prueba:
Sea s = x0 , x1 , . . . , xr = t un camino aumentante.
(

C(xi xi+1 ) f (xi xi+1 ) para los lados forward


Sea i =

f (xi+1 xi )
para los lados backward
Elijo  = mn{i }
Aumentar f es tomar

f (xi xi+1 ) +  Si xy = xi xi+1 forward

f (xy) =
f (xi+1 xi )  Si xy = xi+1 xi backward

f (xy)
en caso contrario
Queremos ver que f es flujo y que V (f ) = V (f ) + 
Feasability: Obvio por definicin de i , .
Conservacin: x 6= 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 flujo.
+

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 ) + 

Definicin: dado N = (V, E, C) con vrtices s = fuente, t = resumidero.


Un corte es un subconjunto S V : s S, t 6 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
X

=
C(xy)
xS
yS

xy E

17

Lema: sea N network, f flujo 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 6= s pues t 6 S


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

= V (f )
X
X
V (f ) =
Outf (x)
Inf (x)
xS

xS

 X 

X 
=
f {x}, V
f V, {x}
xS

(4)

xS

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

(5)



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

(6)

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

18

2. V (f ) = f (S, S) f (S, S)
| {z }
0
| {z }
<0

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


3. Sea g un flujo cualquiera:
2

Hip(3)

V (g) Cap(S) = V (f ) f es maximal


Similarmente, si T es corte tenemos que:
2

Cap(T ) V (g) g
En particular elijo como flujo a f y me queda:
2

Hip

Cap(T ) V (f ) = Cap(S) S es minimal

19

2.3.

Teorema: Max-Flow Min-Cut

En todo network el valor de todo flujo 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 definicin.

? 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 flujo g tal que:
V (g) = V (f ) +  para algn  > 0
V (g) > V (f ) Absurdo pues f es maximal.
t 6 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 6 S

Def
xy E
f (S, S) = C(S, S) = Cap(S)

xS


f (yx) = 0 f S, S = 0
Si y 6 S

yx E

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

Corolario14 : Ford-Fulkerson es correcto i.e. si el output es un flujo f , entonces f es


maximal.
Prueba: el algoritmo aumenta a partir del flujo 0 usando caminos aumentantes hasta
que no encuentra ms caminos.
Sea f el flujo obtenido all.
13
14

Todava no demostramos que exista.


De la demostracin.

20

Cuando < F F >15 intent aumentar f no pudo, entonces @ camino aumentante


para f entre s y t.
Los vrtices que se buscaron formaron un corte S.
Por la prueba del teorema16 , tenemos que V (f ) = Cap(S) entonces f es maximal por
el lema previo al teorema.
2.3.1.

Complejidad de Ford Fulkerson

Los lados se pueden des-saturar por lo tanto el anlisis de Greedy no vale.


De todas maneras existen ejemplos en que < F F > no termina, por lo que no
podemos hablar de su complejidad.
Ejemplo en que < F F > no termina
/ y1 j
??
??
??
??


/ y2
/2 t
?





 

x1
~?
~
~~
~~
~

~
/ x2
s@
@@
@@
@@
@ 

/ y3

x3

Capacidades: todas
2 salvo: st : 1000 x1 y1 : 1 x2 y2 : r x3 y3 : r2

1+ 5
Donde: r = 2 es raz de: P (r) = r2 + r 1
Observacin:
1 r = r2
r r2 = r3
Satisface: 1 > r > r2 > . . . > rk > rk+1
Corramos < F F >
1. s, x1 , y1 , t : 1

2. s, x3 , y3 , y1 , x1 , x2 , y2 , t : r2

3. s, x2 , y2 , y3 , x3 , x1 , y1 , t : r3

4. s, x1 , y1 , y2 , x2 , x3 , y3 , t : r4
Luego < F F > repite (2) (3) (4) con r5 r6 r7 . . .
15
16

Denotaremos as al algoritmo de Ford-Fulkerson.


Max Flow Min Cut.

21

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


lm V (fi ) = 1 + r + r2 + r3 + . . .

ri r

i=0

1
r
1r
1 r(1 r)
=
=2
1r
=

Pero el flujo maximal es: 1002, mandando st = 1000.


Observacin: si las capacidades son enteras entonces como el primer valor del flujo es
0 Z, y aumenta por:

C f
 = mn{i } : i =
Z
f
Entonces  ser un entero y los flujos 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 flujo que devuelve es entero, sumado al hecho de que < F F >
termin, sabemos que ese flujo es maximal. Y llegamos a demostrar el Teorema de la
integralidad: si las capacidades son enteras entonces existe un flujo maximal entero.
Ejemplo
?A>





s?
??
??
??
? 

>>
>>
>>
>
?t

Capacidades: AB : 1, las dems: 106


Corremos < F F >:
1. s, A, B, t : 1

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

22

Lema: sea G un grafo conexo, dirigido o no, sea T = BF S(x) para algn x V ,
entonces:
z V (z, x) = N ivelT (z)
Prueba:
?

Como T G G (z, x) T (z, x) = N ivelT (z)


Para demostrar que vale el = lo vamos a hacer por induccin en (z, x).
Caso base:
(z, x) = 0 z = x N ivelT (z) = 0 = (z, x)
Paso inductivo:
Supongamos que vale para (z, x) = k y tomemos un z con (z, x) = k+1.
Por lo que vimos al comienzo de la prueba:
k + 1 = G (z, x) N ivelT (z)
Si es igual ya est.
Entonces supongamos que N ivelT (z) = j > k + 1
Luego (z, x) = k + 1 un camino de longitud mnima entre x y z de la forma:
x = x0 , x1 , . . . , xk , xk+1 = z
H.Ind

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.

|j k| 1
P ero
Absurdo.
j >k+1

2.4.

Algoritmo de Edmonds Karp

En 1970 Edmonds y Karp dieron 2 heursticas, que de ahora en adelante llamaremos


< E K >.
Consiste en correr < F F > usando caminos aumentantes de longitud mnima:
< E K > = < F F > +BF S

23

2.4.1.

Complejidad de Edmonds-Karp

Teorema: la complejidad17 de < E K > es O(nm2 ).


Prueba:
Supongamos que < E K > crea flujos intermedios: O = f0 , f1 , . . .
El paso k es el paso que crea fk
Defino:
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.
n
o
Sea A = z V : dk+1 (z) < dk (z)
Queremos ver que A = , supongamos que no y lleguemos a un absurdo.
Si A 6= 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 6= 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 6 A por (1)
(En otras palabras, como x est antes que q, no puede estar en A)
Luego como x 6 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 fj1 (uv) < C(uv)





Es Backward con fj1 (vu) > 0 i.e. vu E


Est disponible (x, q) en el paso k?
Supongamos que s entonces:
dk (q) dk (x) + 1
(4)

dk+1 (x) + 1
(3)

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

Por lo tanto xq no est disponible en el paso k, pero s lo est en el paso k + 1.


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

Entonces: dk+1 (q) = dk+1 (x) + 1


(4)

dk (x) + 1
(5)

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

> dk+1 (q) + 2


0 > 2 Absurdo!
Fin Lema Interno
Continuando con el teorema, llamemos crtico a un lado disponible en un paso y no
en el siguiente.
Supongamos que xz se vuelve crtico en el paso k, antes de poder ser crtico otra vez
debe ser usado en la otra direccin, sea L > k el paso donde se usa la prxima vez para
el otro lado.

dk (z) = dk (x) + 1 ?
Pues estoy en < E K > entonces

d (x) = d (z) + 1
L
L
dL (t) = dL (x) + bL (x)
= dL (z) + 1 + bL (x)
dk (z) + 1 + bk (x)
= dk (x) + 1 + 1 + bk (x)
= dk (t) + 2
25

(7)
(8)
(9)

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

Corolario de la complejidad de < E K >


Siempre existe un flujo maximal.

26

2.4.2.

Ejemplo de Edmonds Karp

Capacidades
sA:20

Caminos
Primer Camino: s, A, B, t : 10
A C B E F I D K
s
s A A A A C C
20 20 20 3 10 3 10 10

s
sC:20

AB:20
s

A
s
10

A C
s s
7 10

AE:3

C
s
20

AF:10
AI:3

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

Segundo
B E
A A
10 3

Camino: s, A, I, t : 3
F I D K J
A A C C B
10 3 10 10 10

t
B
10

G
E
3

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

Cuarto
A C B
s s A
7 10 7

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

H
E
3

t
I
3

H t
E D
3 10

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

Dt:22

EG:10
s
EH:10

Sexto
C K
s C
8 8

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

t
D
3

FG:10

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

s
KI:10

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

Camino?: No llega
I B J A
K I B B
2 2 2
2

27

at
F G
A F
2 2

Obtengo el Corte: S = {s,c,k,i,b,j,a,f,g}


Capacidad del corte S
Cap(S) =10 + 10 + 10 + 2 + 3 + 3 = 38
cd + it + bt + dt + ae + gd
=0

z }| {
V (f ) = Outf (s) Inf (s)

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

Pseudo-Cdigo de Edmonds Karp

EK( Network N)
{
F = 0 ; // F l u j o
v = 0 ; // Valor d e l F l u j o
S = V; // Corte
while ( t S ) { // m i e n t r a s e l v e r t i c e t e s t e en e l c o r t e
// b u s c a r camino y aumentar
Q = new_queue ( S ) ; // Crear c o l a
E [ x ] = x V ;
S = { s } ; // c o r t e
while ( head ( q ) 6= 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 6 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 6 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 6= s ) {
q = a[p];
i f ( b [ p ] == 1 ) { //FORWARD

f ( qp ) = f ( qp ) +  ;
} else {

f ( pq ) = f ( pq )  ;
}
p = q;
}
}

2.5.

Algoritmos Tipo Dinic

Idea: usar un network auxiliar que se construye de la siguiente manera: corremos


BFS de caminos aumentantes, como en < E K >, agregando los vrtices y lados
correspondientes excepto que en < E K > cuando p encuentra un q que ya est, no lo
agrega, mientras que ac a veces s, i.e. supongamos que estamos revisando p y hallamos

q + (p) con f (pq) < C(pq) q (p) : f (qp) > 0, pero que q ya est en el network
auxiliar, entonces agregamos un lado pq al network auxiliar si el N ivel(q) = N ivel(p) + 1.
Definicin: un flujo 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 flujo en N y g flujo en un network auxiliar denotemos por:

f (x, y) + g(x, y) Forward
(f g)(x, y) =
f (x, y) g(y, x) Backward

29

2.5.1.

Esquema general Tipo Dinic

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

Teorema
La distancia en NA18 sucesivos aumenta, por lo tanto hay a lo sumo n, NAs.
Demostracin:
Sea A un NA y A0 el siguiente NA, denotamos con la distancia en A y 0 la distancia
en A0 .
Como A y A0 se construyen con BFS 0
Queremos ver que vale el <.
Sea s = x0 , x1 , . . . , xr = t un camino en A0 .
Caso 1: i {1, . . . , r 1} : xi 6 A
(t) (xi )
0 (xi )
= i < r = 0 (t)

(10)
(11)

( 10) Sino lo hubiera agregado.


( 11) Por < E K >
(t) < 0 (t)
Caso 2: xi A i
Como antes de pasar a A0 debemos saturar todos los caminos de A, se sigue que
ningn camino de A es un camino de A0 .

Luego: s, x1 , . . . , xr1 , t no es camino en A, como xi A i i : xi xi+1 6 A


Y tomemos el primer tal i.
18

NA: networks auxiliares.

30

Caso 2-a: (xi+1 ) < i + 1


Como i + 1 = 0 (xi+1 ) (xi+1 ) < 0 (xi+1 ) ?
Luego:
(t) = (xi+1 ) + b(xi+1 )
< 0 (xi+1 ) + b(xi+1 )
0 (xi+1 ) + b0 (xi+1 )
= 0 (t)

(12)
(13)

( 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 6 A xj1 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 6 A es
porque no est disponible en N , i.e. es Forward saturado o Backward vaco.

Pero xi xi+1 A0 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 flujo bloqueante en el
NA, entonces la complejidad del algoritmo completo es O(n b).
Dinic = Algoritmo tipo Dinic + Greedy DFS para hallar flujo 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)

31

2.5.2.

Ejemplo de Dinic

Ejemplo: Aplicar Dinic al siguiente Network.


Inicial

Primera Modificacin

Segunda Modificacin (final)

Caminos (6)

sA:8

sA:0

caminos (4)
sAFt:4

sA:0

sD F AIt : 1

sC:7

sC:0

sAGt:3

sC:0

sD GAIt : 2

sD:10

sD:7

sAIt:1

sD:4

sE F AIt : 3

sE:12
AF:4
AG:3

sE:11
AF:0
AG:0

sCGt:2
sCHt:3
sCJt:2

sE:1
AF:4
AG:3

sE GAIt : 1
sEGBIt : 1
SEGBJt : 2

AI:8

AI:7

sDFt:3

AI:0

SE GCJt : 1

BI:2
BJ:2
CG:2
CH:3
CJ:5
DF:4
DG:2
EF:3
EG:5
EH:4
Ft:7
Gt:5
GB:4
Ht:4
It:9
Jt:15

BI:2
BJ:2
CG:0
CH:0
CJ:3
DF:1
DG:2
EF:3
EG:5
EH:3
Ft:0
Gt:0
GB:4
Ht:0
It:8
Jt:13

sEHt:1

Primer Network Auxiliar


I
}> /
}} ///
}
//
}}
}}
//
/
GI >> ///
? A AA }> G
>> /
AA}} 

>> //

}}AAA
>>/

}
}  



/t
/C

s/?
F
?


G
00AA  }> G
//??

00AA}}
// ???
}A
// ?? } }00} AA

0

//
00


// D   00 > H 
//  }}0}0

//  }} 00 
}
  }
 
E

BI:1
BJ:2
CG:1
CH:2
CJ:0
DF:0
DG:0
EF:0
EG:0
EH:1
Ft:0
Gt:0
GB:1
Ht:0
It:0
Jt:8

sE HCJt : 2

Segundo Network auxiliar


/I
/ F () / A
? D AA
?

G () ~~~>


A
AA 

~

AA

~~



~

~



/B
s?
 }> G AA
?
??
AA() ???
 }}
??

A
}
??
??
AA
? } }}
?
()
/J
/
/
C
E
H

==
==
==
==

@ t





s?

Tercer Network auxiliar


/

D
??
??
??
?
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

Pseudo Cdigo algoritmos Tipo Dinic

D i n i c ( Network Na) { // Pa rte B l o q u e a n t e , Version con Goto


g = 0;
2 p = s ; // l a b e l 2 , p i v o t e
1 i f ( p 6= t ) { // l a b e l 1
i f ( + (p) 6= ) {
avanzar ( ) ;
goto 1 ;
} e l s e i f ( p 6= 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 6= t && c o n t i n u a r ) {
i f ( + (p) 6= ) {
Avanzar ( ) ;
} e l s e i f ( p 6= 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 6= 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)
| .{z
r

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

35

2.6.

Algoritmo Wave de Tarjan

Es un ejemplo de una clase de algoritmos en los cuales la invariante no es ms ser


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

Pseudo Cdigo de Wave

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

G( sx ) = C( sx ) ;

D( s ) = D( s ) C( sx ) ;

D( x ) = C( sx ) ;
N++;
A( x ) = { s } ;
}
}
olaForward ( )
{
f o r ( x = s +1; To ; t 1){ // Orden BFS( )
i f (D( x ) >0)
ForwardBalance ( x ) ;
}
}
19

Wave: ingls, ola.

36

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

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

m = min{D( x ) ,G( yx ) } ;

g ( yx )= g ( yx ) m;
D( x ) = D( x ) m;
i f (D( y ) == 0 ) {
N++;
}
D( y ) = D( y ) + m;

i f (G( yx ) == 0 ) {
A( x ) = A( x ) {y } ;
}
}
N;
}

ForwardBalance ( v e r t i c e x ) {
while (D( x )>0 && (+ (x) 6= ) ) {
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 flujo.
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
|
{z
}

(14)

O(1)

= O(n)
( 14) Pues en cada F B(x) a slo un lado le mandamos flujo 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 flujo a x.
Pero esto slo puede pasar si y est bloqueado y en ese caso x no le puede
mandar ms flujo, en particular no lo puede volver a saturar.

Similarmente, un lado xy slo se puede vaciar totalmente una vez porque slo puede
hacerlo si y est bloqueado.
#Saturamientos + #V aciamientos 2m
Compl(W ave_bloqueante)t = O(m)
38

Compl(W ave_bloqueante) = Compl(W ave_bloqueante)t + Compl(W ave_bloqueante)p


= O(m) + O(n2 )
= O(n2 )

2.6.3.

Ejemplos de Wave
Aplicar Wave al siguiente Network Auxiliar

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

Nivel 0
s
-32

-25

A
8
4
1
0

C
7
5
2
0

Nivel 1
D

10

6

4


6

7

E
7
4
60

4
7

Nivel 2
F
G
4
3
8
5

11
7



11

4

6


1
2
0
0

I
1
0

H
3
60


3

-19

4

3
0

J
2
0

Nivel 3
t
7

12


13


16


18


19

39

Aplicar Wave Respetando el orden alfabtico y observar que el flujo 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

0
1
0
1
0
1

0
0
0
1
11

Nivel 0
s
-32

-27

Nivel 1
A C
D

6 8 7
10

64 65
66

61 62
4
0 0
3
7
0

2
0


5

Nivel 2
E F
G
67 64
63
6 4 8
5

0 
11
7


11

4

6

0
3

1
0

I H J
61 63 62
0 0 0

7
0

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

40

2
0

Nivel 3
t
7

12


13


16


18


25

27

3.

MST

MST: minimal spanning tree, rbol de expansin o generador minimal.


Definicin: 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 6= raz.
Hay n 1 lados. (uno por cada vrtice 6= raz)

Propiedad:
(1) T rbol T conexo y m = n 1
T no tiene ciclos y m = n 1

(2)
(3)

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 6 E(T )
Sea T 0 = T {xy}
Como no hay caminos en T entre x e y en T 0 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.

41

Conclusin: si x, y no tiene un camino entre ellos, T {x, y} sigue siendo acclico.


Continuando de esta forma terminamos con un Tb conexo y acclico.
Es decir rbol tal que T {xy} Tb
   



E Tb = V Tb 1

(15)

= |V (T )| 1
= |E(T )|

(16)

( 15) Tb es rbol
( 16) Por HIP.(3)
 


Absurdo pues T {x, y} Tb E Tb |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.
Definicin: 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:
X
X
W (xy)
W (xy) spanning T ree T 0
xyE(T )

Notacin
P

xyE(T 0 )

W (xy) = W (T ).

xyE(T )

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

3.1.

Kruskal

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

Minimal Spanning Tree.

42

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

Pseudo Cdigo de Kruskal

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

3.1.2.

Teorema: Kruskal devuelve un MST

Demostracin: el invariante es ser acclico y termina con n 1 lados, entonces tenemos


garantizado que termina con un spanning tree.
Veamos ahora que es minimal.
Prueba por induccin: sea Kj el grafo en el paso j
Si j = 0 queda demostrado porque los vrtices desconectados siempre estn.
Hiptesis inductiva: j un MST Tj : Kj Tj
Supongamos que Kj Tj MST.
Sea e : Kj+1 = Kj {e}
Si e Tj ya est pues Kj+1 Tj
Por lo tanto supongamos: e 6 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 6 Kj+1
Si W (f ) < W (e) f se analiz antes de e.
Como f 6 Kj+1 entonces se rechaz.
Entonces Kj {f } tiene un ciclo absurdo pues Kj {f } Tj
|{z}
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 )
Tj+1 tambin.
Como Tj es MST
3.1.3.

Complejidad de Kruskal

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

Kruskal Delete

Repetir(?) hasta tener n 1 lados.


(?) Borrar el lado de mayor peso que no desconecte el grafo.
3.1.5.

Complejidad Kruskal Delete

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

44

3.1.6.

Ejemplo de Kruskal
A
B
C
D
E
F

(0)

3
1
3

B
5

1
4

C D E F
3 1 3
1 4
7
7 4 2
4 3
2 3
(3)

A
1

(1)

B
A
E
A

(4)

A
3

D
B


F
D

F
(5)

F
B

(2)

D
C

A
3

F
F
~ 00@@@
00 @@3
002 @@
~~
~
00 @
~
1
00 _ E
A PPPP
00
PPP
PPP
0 4
5
P
PPP 00 
3

P
_D
B@
4
@@
~
~
@@
~~
@
~~ 7
1 @@
~
~
C

45

_E

_D

_E

C
B
~~
~
~
1
~~

~~
4

F
3 ~~~

_D

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 < n1){
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 }

3.2.2.

q Aux

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 6 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
B
C
D
E
F

3
1
3

B
5

1
4

C D E F
3 1 3
1 4
7
7 4 2
4 3
2 3

P rim(A), Mtodo Grfico:


1

(1) A

_E

(2) A
3

_E

(3) A
3

D
(4) A
3

_E

D


(5) A
3

_F

_E

_F

_C

_E

_F

Prim(A), Mtodo Analtico;

1)

B
(5, A)

C
(, )

D
(3, A)

E
(1,A)

F
(3, A)

2)

(5, A)

(, )

(3,A)

(3, A)

3) (4, D)

(7, D)

(2,D)

4)

(4,D)

(7, D)

5)

(1,B)

Complejidad(P rim) = O(n2 )


47

3.3.

Implementaciones de Union Find

1. Linked lists. (listas enlazadas)


2. Representantes.
3. Union Find By Rank.
3.3.1.

Union Find con listas enlazadas

Union es O(1)
Find es O(n)
Recordemos que Kruskal hace: 2m Finds() y n 1 Unions().
O(mn) + O(n) = O(nm)
Como mn >

3.3.2.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

m log(n)
no sirve.
| {z }
Ordenar los lados

Union Find con Representantes

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

Compl(Kruskal) =

O(m log(n)) + O(m) + O(n2 )


|
{z
}
| {z }
| {z }
Ordenar los lados m Finds n Unions

Compl(Kruskal) = O(m log(n) + n2 ) bastante bien si: m n2


Es decir no funciona tan bien si es un grafo ralo, i.e. con pocos lados.

48

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

Union Find con ranking

Makeset ( v e r t i c e x ) {
(x) = x ;
Rk( x ) = 0 ; // Ranking
}
Find ( v e r t i c e x ) { // r e c u r s i v o a l a c o l a
i f ( (x) == x )
return x ;
e l s e return f i n d ( (x) )
}
Find ( v e r t i c e x ) { // i t e r a t i v o
y = x;
while ( y 6= (y) )
y = (y) ;
return y ;
}
/ Pre : F1 = Find ( x [ 1 ] ) ; F2 = Find ( x [ 2 ] ) ; F1 6= 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)) + O(m) + O(n2 ) = O(m log(n))


|
{z
}
| {z }
| {z }
Ordenar los lados m Finds n Unions

Demostracin del Teorema


Lema interno 1: (Rank(x) < Rank((x)) : x : x 6= (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

49

Lema interno 2: Rank(x) = k 2k elementos por debajo de x, contando a


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

n
2k

elementos de rango k, est demostrado en los lemas.

Finalmente Rango(x) log(n) x


Pues sea k el mayor rango por lo menos un elemento de rango k.
1

n
2k

2k n
k log2 (n).

Qu pasa si los lados vienen ordenados o se pueden ordenar21 en O(m)?


Se puede usar Path compresion
Solo cambia Find
1 Find ( x ) {
2
i f ( (x) 6= 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)

21

1
0

2
1

{3,4}
2

{5,. . . ,16}
3

Bucket sort.

50

{17,. . . ,216 }
4

{216 +1,. . . ,265536 }


5

4.

Matchings

Dado un grafo G, un matching en G es un subgrafo M tal que el grado en M de todos


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

4.1.

Transformacin del problema de Matching a uno de flujo


maximal

DadoG = (X Y, E) creamos
 el siguiente network.

N = X Y {s, t}, E, C

S no
no

S
E = sx
xy : y Y
yt

xX
yY
xy E
La capacidad de todos los lados es : 1.
Ejemplo
X

B
C
;;


;;

;;


;


;  

A;

} AAA
AA
}}
}
AA
}}

A
}
}
B
A@
~C
@@
~~
@@
~
@@  ~~


@ ~~
1 @@
2
3
@@
~~
@@
~~
~
@@
~
@ ~~~

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 flujos maximales enteros en N.
Prueba: dado un flujo entero f construimos un matching Mf y dado un Matching M
construimos un flujo entero fM .
S
Vf =
{x, y}
xyEf
Dado f sea Mf = (Vf , Ef ) :

Ef = {xy E : f ( xy) = 1}
Hay que ver que Mf es matching.

51

Observemos que por definicin 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 :

y1 6= y2
zy1 , zy2 Ef

Entonces f (zy1 ) = f (zy2 ) = 1


Outf (z) 2
Absurdo.

Pero Inf (z) = f ( sz ) 1


Caso 2: z Y x1 , x2 :

x1 6= x2
x1 z, x2 z Ef

Entonces f (x1 z) = f (x2 z) = 1


Inf (z) 2

Pero Outf (z) = f ( zt ) 1

Absurdo

Concluimos que Mf es matching.


Dado ahora un Matching M sea fM definido as:

fM ( xy) =

1 Si xy E(M )
0 Si no

1 Si x V (M ) X
0 Si no

1 Si y V (M ) Y
0 Si no

fM ( sx) =

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


Mf (z) = Outf (z) =

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

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

52

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


=0

z }| {
V (f ) = Outf (s) Inf (s)
X
=
f ( sx)
xX

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

Definicin: Sea S V (S) =

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

zS

Definicin: Si G = (X Y, E) es bipartito, un matching se dice completo de X a Y


si cubre a X, i.e. X V (M ).

4.2.

Teorema de Hall

Sea G = (X Y, E) bipartito entonces:




un matching completo de X a Y : (S) S S X

4.3.

Complejidad del Algoritmo de Matching

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

4.4.

Grafos con Peso

Sea G = (X Y, E) grafo bipartito, con |X| = |Y | = n y sea C una matriz de costos


nn
Cx,y = Costo de asignar el trabajo X al trabajador Y.22
Hay 2 (al menos) formas de minimizar:
1. Minimizar el mximo.
22

A veces pueden ser Ganancias.

53

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

Algoritmo de Gross

Dado C:
1. Ordenar los Ci,j como : b1 < b2 < . . . < bk (k n2 )
2. Tomar, para r= 1, . . . , k:

(Ar )i,j =

1 Si Ci,j br
0 Si no

(r es el umbral)

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

23

Problema de cuello de botella.

54

4.4.2.

Ejemplo del algoritmo de Gross


Hallar un Matching
I II III
A 1 2 15
B e e2
C 9 2 1
D e2 1 2
E 10 9 7
F 1 2 3
G 8 2 9

que minimice el Mximo


IV V VI VII
2 7
5
4
5 8
2
1
10 8 100 9
10 4 10 10
8 1
9
10
4 5
6
7
10 5 10 10

Ordeno los Ci,j : 1, 2, e, 3, , 4, 5, 6, 7, e2 , 8, 9, 10, 15, 1000


max{mn(f ilas); mn(columnas)} = max{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

A
B
C
D
E
F
G

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

?
?

II
III
V
?
?

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

A
B
C
D
E
F
G

A
B
C
D
E
F
G

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

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
I

1
II


0 
III
0
V
0
?
1
IV
0
?
B

VII
1
1
0
0
0
1
0

?
?

VII
1

1
II


0 
III
0
V
0
?
1
0
?
B

A
B
C
D
E
F
G

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

A
B
C
D
E
F
G

V
1
0
0
1
1
1
1
E

VI
1
1
0
0
0
1
0
B

VII
1
1
0
0
0
1
0
B

V
1
0
0
1
1
1
1
E
E

VI
1
1
0
0
0
1
0
B

VII
1
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
C

III
0
0
1
1
1
1
0
E
E

I

II


III

V
?

IV

?

I

II


III

V
?

IV

?

IV
1
1
0
0
0
1
0
B

A
B
C
D
E
F
G

A
B
C
D
E
F
G

III
V
?

V
1
0
0
1
1
1
1
E
E

VI
1
1
0
0
0
1
0
B

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

VII
1
I


1
II



0 
III 
III
0
V
V
0
?
?

1
IV

0
?
II
B

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

56

III IV V VI VII
I
0
1
1
1
1

II
0
1
0
1
1


1
0
0
0
0
III

1
0
1
0
0
V
1
0
1
0
0
?
 ?


1
1
1
1
1
IV

0
0
1
0
0
?

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

II
0
1
0
1
1

 

1
0
0
0
0
III
III

1
0
1
0
0
V
V
1
0
1
0
0
?
?



IV
1
1
1
1
1

?
0
0
1
0
0

E
B
E
B
B
E
E

Umbral 9
I II
1 1
1 1
1 1
1 1
0 1
1 1
1 1

A
B
C
D
E
F
G

III
0
1
1
1
1
1
1

IV
1
1
0
0
1
1
0

V
1
1
1
1
1
1
1

VI
1
1
0
0
1
1
0

VII
1
1
1
0
0
1
0

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

A
B
C
D
E
F
G

?
I
II
III
V

A
B
C
D
E
F
G

?

I
1
1
1
1
0
1
1
G
I
1
1
1
1
0
1
1
G

II III IV V VI VII
1
0
1
1
1
1
1
1
1
1
1
1
1
1
0
1
0
1
1
1
0
1
0
0
1
1
1
1
1
0
1
1
1
1
1
1
1
1
0
1
0
0
?

G
G
G
II III IV V VI VII
1
0
1
1
1
1
I

1
1
1
1
1
1
II


1
1
0
1
0
1
III

V
1
1
0
1
0
0
1
1
1
1
1
0
1
1
1
1
1
1
1
1
0
1
0
0
?

G
G
A
G
A
A

Extiendo el Matching
A
B
C
D
E
F
G

I

1
1
1
1
0
1
1
G

II
1
1
1
1
1
1
1
G

III
0
1
1
1
1
1
1
G

IV
1
1
0
0
1
1
0
A

V
1
1
1
1
1
1
1
G

VI
1
1
0
0
1
1
0
A

VII
1
I


1
II


1 
III
0
V
0
1
0
?
A

Existe Matching hay que bajar el umbral:


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

Umbral de e2
I II
1 1
1 1
0 1
1 1
0 0
1 1
0 1

A
B
C
D
E
F
G

III IV
0
1
1
1
1
0
1
0
1
0
1
1
0
0

V
1
0
0
1
1
1
1

VI VII
1
1
1
1
0
0
0
0
0
0
1
1
0
0

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

A
B
C
D
E
F
G

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

I
1
1
0
1
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

?
?

II
III
V
?
?

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

58

I
1
1
0
1
0
1
0

A
B
C
D
E
F
G

A
B
C
D
E
F
G

I
1
1
0
1
0
1
0
B

Matching
V VI
1
1
0
1
0
0
1
0
1
0
1
1
1
0
E 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

VII
1
I

1
II


0 
III
V
0
0
?
1
0
?
B

A
B
C
D
E
F
G

A
B
C
D
E
F
G

I
1

II
1

III
0

IV
1

V
1

VI
1

VII
1

1
0
1
0
1
0
B


1


1
0
0
0
1
0
B


1
0
0
0
1
0
B

II
1

0
0
1
1
1
1
E

E

V
1

1
0
0
0
1
0
B


I
1

1
1
1
1
1
0
E

E

III
0

VI
1

VII
1

1
0
1
0
1
0
B

D


1


1
0
0
0
1
0
B


1
0
0
0
1
0
B

1
1
0
1
1
G


1
1
0
1
1
G

C


1
1
1
1
1
0
E

E


A
B
C
D
E
F
G

IV
1
1
0
0
0
1
0
B


I

1
1
0
1
0
1
0
B
D

0
0
1
1
1
1
E

E


II
1

1
1
1
0
1
1
G
C

I
II


III

V

?

A
III
V
?

?

B
C
D
E
F
G

II

 

III
III

V
V


?
?

B
C
D
E
F
G

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

?

II

I
1

II
1

III
0

IV
1

V
1

VI
1

VII
1

1
0
1
0
1
0
B

D
I
1

1


1
1
1
1
1
0
E

E

III
0

1
0
0
0
1
0
B


1
0
0
0
1
0
B


1
0
0
0
1
0
B

IV
1

0
0
1
1
1
1
E

E

V
1

VI
1

VII
1

1
0
1
0
1
0
B

D


1


1
1
1
1
1
0
E

E


1
0
0
0
1
0
B

A

0
0
1
1
1
1
E

E


1
0
0
0
1
0
B

A

1
0
0
0
1
0
B
A

1
1
0
1
1
G

C
II
1
1
1
0
1
1
G

C


el Matching
V VI VII
I
1
1
1
I


II
0
1
1

 III

0
0
0 
III


V
V
0
0
1
1
0
0
?
?
1
1
1

1
0
0
? 
II
E B
B
E A
A

Hall un Matching que minimiza el mximo: (e2 )


n
o
M = A V II : 4; B V I : 2; C III : 1; D I : e2 ; E V : 1; F IV : 4; G II : 2

59

I
II

 

III
III

V
V


?
?

?

I
I
II

 

III
III

V
V


?
?

?

II


4.5.

Prueba del teorema de HALL


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

Prueba:
Obvio pues el matching induce una funcion : 1 1 de X en Y y la imagen de S
por esa funcin est incluida en (S)
11

|S| = |(S)| |(S)|


Es equivalente a ver que:
Si @ un matching completo S X : |S| > |(S)|
Corramos el algoritmo de hallar matching (Filas X, Columnas Y )
Cuando termine habr filas sin Matchear24 .
Sea S0 = Filas sin Matchear.
Sea T1 = (S0 ) son las columnas etiqueteadas por las filas de S0
S1 = Filas etiqueteadas por las columas de T1
T2 = columnas etiqueteadas por las filas de S1 .
No necesariamente T2 6= (S1 ).
Pero si tenemos que T1 T2 = (S0 S1 )
Y as seguimos:
Nos queda definido:
Sj = Filas etiqueteadas por las columnas de Tj
Tj+1 = las columnas etiqueteadas por las filas de Sj
Sj = filas Matcheadas con Tj .
Si Tj 6= 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 filas 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

Las marcadas con ?.

60

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

(
(
(
(

4.6.

17)
18)
19)
20)

Por las observacin 2.


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

Teorema del Matrimonio


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

Prueba: sea G = (X Y, E) : E 6= , regular.


Dado W V con W X W Y
Definimos:
Ew = Lados con un extremo en w
= {xy E : x W y W }
Supongamos W X




|Ew | = {xy E : x w}

X

=
{y : xy E}
xw

X
xw

d(x)
|{z}

(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 6= 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

xS
: e = xy
yY

y (x) (S)
e = x y E(s)
Hemos probado que: Es E(S)
|Es | |E(S) |
|S| |(S)|
|S| |(S)|

61

4.7.

Minimizar la Suma

Problema: dada una matriz de costos C, hallar el menor M, Matching.


n
P
Simblicamente buscamos M: M = mn
Ci,j
i=1
j : ij M
e una matriz de costos que se
La solucin a este problema usa una idea sencilla: sea C
obtiene de C restndole o sumndole una constante a una fila o columna.
Entonces sea Mmn (C) un Matching que minimiza
 la suma.
Ci,j
Si i 6= i
ei,j
Si a la fila i le resto una constante k, i.e. C
Ci,j k Si i = i


n
n
P
P
ei,j =
Est claro que:
C
Ci,j k , similar para las columnas.
i=1
i=1
j : ij M
j : ij M
e
Mmn (C) tambin minimiza C
Segunda Observacin: si Ci,j 0.
Entonces si M es un matching de 00 s es decir Ci,j = 0 i, j M M minimiza la
suma.
Idea bsica: restar o sumar fila 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 fila
II III
3 5
5 0
5 6
0 3

su mnimo
IV
5
6
9
3

I
2
9
1
10

II III
5
7
10 5
6
7
1
4

IV
7
11
10
4

Restamos a cada columna su mnimo


I II III IV
A 0 3 5
2
@ Matching de 00 s.
B 4 5 0
3
C 0 5 6
6
D 9 0 3
0

Restamos 5 a la tercer fila.


A
B
C
D

I II
0 3
4 5
-5 0
9 0

III
5
0
1
3

IV
2
3
1
0

Existe Matching Pero tengo un nmero Negativo.

62

Sumamos
I
A 5
B 9
C 0
D 14

5a
II
3
5
0
0

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

Restamos el
I
A 3
B 9
C 0
D 14

mnimo a cada fila.


II III IV
1 3
0
5 0
3
0 1
1
0 3
0

Hall un
I
A 3
B 9
C 0
D 14

Matching
II III
1
3
5
0
0
1
0
3

de 00 s.
IV
0
3
1
0

n
o
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 fila a cada fila.
2. Restar el mnimo de cada columna a cada columna.
3. Buscar Matchings de 00 s
Si existe hall un matching que minimiza la suma.
Sino tomar S: |S| > |(S)|, y restarle un cierto m a las filas de S y sumarle m
a las columnas de (S)
Cul m?
m = mn 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

IV
7
11
10
4

1. Restamos a cada fila su mnino:


I II
A 0 3
B
4 5
C0 5
D 9 0

63

III
5
0
6
3

IV
5
6
9
3

2. Restamos a cada columna su mnimo:


I II
A 0 3
B
4 5
C0 5
D 9 0

III
5
0
6
3

IV
2
3
6
0

3. Buscamos Matching de 00 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
6C

III
3
0
4
3

IV
0
3
4
0

II
3
5
5
0

4. No hay matching perfecto


A
B
C
D

I
0
4
0
9
6C

II
3
5
5
0

III
5
0
6
3

IV
2
3
6
0

6I
6

Tengo S = {A, C} , las filas etiqueteadas.


(S) = I , las columas etiqueteadas.
Con |S| > |(S)|
5. Calculo: m = mn S (S)

A
B
C
D

I
0
4
0
9
6C

II
3
5
5
0

III
5
0
6
3

IV
2
3
6
0

I II
6I
A 0 1
m=2 B
6 5

C 0 3
6
D 11 0

Referencias:
S (s)
S (s)
S (S)
S (S)

No lo modifico
Sumo m
No lo modifico
Resto m

64

III
5
0
6
3

IV
2
3
6
0

I
6

6. Busco Matching de 00 S
I
A 0
B
6
a) No encuentro:
C 0
D 11

II
1
5
3
0

III
3
0
4
3

IV
0
3
4
0

b) Intento extenderlo:
A
B
C
D

I
0
6
0
11
C

II
1
5
3
0

III
3
0
4
3

IV
0
3
4
0

A
B
C
D

I
0
6
0
11
C

II
1
5
3
0

III
3
0
4
3

IV
0
3
4
0
A

*

I

*

Extiendo el matching

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

II
1
5
3
0

III
3
0
4
3

IV
0
3
4
0

A
B
C
D

I
0
6
0
11
C

II
1
5
3
0

III
3
0
4
3

IV
0
3
4
0

A
B
C
D

I

0
6
0
11
C

II
1
5
3
0

III
3
0
4
3

IV
0
3
4
0
A

A mano
1. Tachar filas 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 fila: 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

I
*

I

*

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 fijarse 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, fila i.
i 6 S, j (s).
Cuando revisamos la columna j buscamos el elemento del matching, hubieramos
agregado la fila 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 fila i con {i, j} M :matching, por lo tanto agregamos la fila 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 )
|{z}
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 fila 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 mn{S (S)} en tiempo O(n)?
Tendremos una etiqueta que por cada columna guardar el mnimo, de la interseccin de esa columna con S.
Verificar el mnimo de {S (S)} es simplemente calcular:
mn{(y) : (y) 6= 0} = O(n) ya que (y) == 0 y (S)
Y los (y) los vamos actualizando a medida que examinamos las filas de S.
4.7.5.

EJEMPLO DEL MEJORADO (FALTA)

67

5.

Cdigos de correcin de errores

En general un cdigo, sobre un alfabeto A, de longitud n es un subconjunto de An .


En general usaremos: A = {0, 1}.
Llamaremos Cdigo, a un cdigo binario de bloque25 .
Definicin: dados x, y {0, 1}n la distancia de Hamming entre x e y es:
dH (x, y) = d(x, y) = #{i : xi 6= yi }
El peso de Hamming de x {0, 1}n es: W (x) = |x| = #{i : xi 6= 0} = d(x, 0n )
Claramente: d(x, y) = d(x y, 0) = |x y| (x y)i = xi yi i.e. = suma en Zn2
Con xor definido 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 }.

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

25

Block code: cdigo de bloque.

68

Definiciones
Br (x) = {y Zn2 : 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 6= y
Notacin: = mn{d(x, y) : x 6= y : x, y C}
Ejemplos:
1. C1 = {00, 01, 10, 11} (C1 ) = 1
2. C2 = {000, 011, 110, 101}
HHC2
C2
HH

HH

000

011

110

101

2
2

2
2
2

000
011
110
101

(C2 ) = 2

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


HH C3
C3 HHH

000000
010101
101010
111111

000000

010101

101010

111111

3
6

6
3
3

69

(C3 ) = 3

Teorema: sea C cdigo binario y d = (C) entonces:


1. C detecta d 1 errores y no detecta d errores.
2. C corrige b d1
c errores y no corrige b d1
c + 1 errores.
2
2
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:
x, y C : x 6= y
Sean
d(x, y) =

y Bd (x) C

Como y 6= x


no detecta d errores.

c errores:
2. Corrige b d1
2
Sea t = b d1
c.
2
Sean x, y C, x 6= y.
Supongamos Bt (x) Bt (y) 6= z Bt (x) Bt (y)

d(x, y)
d(x, z) + d(z, y)
2t
1
0 1 absurdo

(22)
(23)

( 22) Ya que x 6= y y las dos estn en C.


( 23) Ya que z est en las dos Bolas.
c + 1 errores:
No corrige b d1
2
Sean x, y C : d(x, y) = d, sea e = x y
Entonces e tiene d unos.
Sea e0 con b d1
c + 1 unos de estos.
2
Sea z = x e0
Quiero ver que z Bb d1 c+1 (x) Bb d1 c+1 (y) y ya est porque justamente la inte2
2
seccin es no vaca.
Luego d(x, z) = |x z| = |x x e0 | = |e0 | = b d1
c+1
2
70

d1
d(y, z) = |y z| = |y x e | = |e e | = d 1 + b
c
2
0

d1
c+1
2

Demostracin de ?
Si d = 2k + 1 (Impar)

d 1 + b d1
c = 2k + 1 1 k = k = b d1
c < b d1
c+1
2
2
2
Si d = 2k (Par)

c = 2k 1 (k 1) = 2k 1 k + 1 = k = k 1 + 1 = b d1
c+1
d 1 + b d1
2
2

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 6= j
4. 0 < P (Ei ) = P (Ej ) <

5.1.

1
2

Cota de Hamming

Teorema: sea C cdigo de longitud n que corrija t errores entonces:


|C|
Prueba: sea A =

2n
1 + n + ... +

n
t

Bt (x)

xC

Como C corrije t errores, esa unin es disjunta.


X
|A| =
|Bt (x)|
xC

Calculemos |Bt (x)|:


Para ello definamos:
Sr (x) = {y Zn2 : d(x, y) = r}
26

Slo hay flips de bits.

71

Bt (x) =

t
S

Sr (x) unin disjunta.

r=0

|Bt (x)| =

t
X

|Sr (x)|

r=0

y Sr (x) d(x, y) = r
(x y) = r donde defino (x y) = e
e : |e| = r : y = e x
| {z }
Sr (0)

Sr (x) = x Sr (0) |Sr (x)| = |Sr (0)|


Luego e Sr (0) tiene r 10 s y n r 00 s
De las n ubicaciones
hay que elegir las r donde irn los 10 s.

n
|Sr (0)| = r
|A| =

|Bt (x)|

xC

!
t  
X X
n
=
r
r=0
xC
t  
X
n

=
C
r
r=0

Como A Zn2 |A| 2n


t  
X
n


C 2n
r
r=0

2n


C
1 + n + . . . + nt

Definicin: un cdigo se dice perfecto si C es un subespacio vectorial de Zn2


Recordemos que un subespacio vectorial27 se da si:
1. C 6=
2. Si x, y C x y C
3. x C, k Z2 k x C
27

SEV.

72

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

C es lineal si y slo si ()
C 6=
x, y C x y C
n
o
Teorema: C lineal = mn |x| : x C, x 6= 0
Prueba:
Sea w = mn{|x| : x C, x 6= 0}
Sean x, y C : x 6= y con d(x, y) =
= |x y|
Como C es lineal x y C y x y 6= 0, pues x 6= y w
Sea ahora x C, x 6= 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} = Z22 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 ' Zk2 |C| = 2k

73

5.2.

Matriz generadora

Definicin: una matriz generadora G para C es una matriz cuyas filas 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)
Recordemos que: EF (G) = {x Zn2 : U Zk2 : 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
C=
1

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

1
=2
1

En particular:

n1
z}|{

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
z }| { z }| { z }| {
C = {x1 . . . xk x1 . . . xk . . . x1 . . . xk }
|
{z
}
r veces

n=rk

Una matriz generadora G = I I I I I
|
{z
r I0s

74


I = peso mnimo no nulo = r
}

5.3.

Matriz de chequeo

Una matriz H se dice matriz de chequeo si C = N u(H) = {x Zn2 : Hxt = 0}


Propiedad

z
}|

{
 t


I
A
A
I
|{z}
|{z}
k
es generadora de C n k |{z} |{z} es de chequeo.

kx k
nk
k
nk

Todo cdigo tiene una matriz de chequeo.




Prueba: Hay que ver que EF [I A] = N u [At I]

Sea x EF [I|A] U : x = U [I|A] = U (U.A)


Ut
[A |I]x = [A |I]
(U.A)t
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([|{z}
At | |{z}
I
])) = k
k
nk
dep. indeptes

son iguales

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

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

Ejercicio: calcular las palabras del cdigo que genera la siguiente matriz G.

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
0 = Hxt = Heti = H (i) Columna i de H. H (i) = 0 absurdo.
Supongamos = 2.
Entonces x C : |x| = 2
Entoces i,j : i 6= j : x = ei ej
0 = Hxt = Heti Hetj = H (i) H (j)
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 |{z}
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


1 0 1
orden posible.
2 = H =
0 1 1



xz =0
= xyz :
yz =0
= {xyz : z = x = y}
= cdigo de repeticin

1 0 0
= H = 0 1 0
0 0 1

1010101
0110011
=H=
0001111
0000000

1 0 1 1
1 1 0 1 K = 4
0 1 1 1

0110101
0010011
K = 11
0001111
1111111

Propiedad: los Hamming son perfectos.



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


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

Algoritmo para corregir 1 error


Cuando H (i) 6= 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 Heti
= 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 6= 0, H (i) i hubo 2 errores, pedir retrasmisin.
Ejemplo:

1
0
H=
0
0

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

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 6= 0, H i Hubo 2 errores
1
1
0
Por ejemplo me pueden haber mandado: 000000000 110011000
(i)
En el caso del Hamming Hy t siempre va a ser
 0 algn
 H
(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

78

Ejemplo
5
5 tiene
n =262 1 = 31 k = 31 5 = 26
5 =2
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) = mn{j : j columnas L.D. de H}29
Prueba:
: Sea x : |x| = (C) = d
Entonces i1 , i2 , . . . , id : x = ei1 . . . eid
0 = Hxt
= Heti1 . . . Hetid
= H (i1 ) . . . H (id )
Entonces {H (i1 ) , . . . , H (id ) } es L.D.
mn{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 6= 0 todos no nulos.
Como Ci Z2 ci = 1 i
H (i1 ) . . . H (ij ) = 0
Entonces x C donde x = ei1 . . . eij
j
29

LD: Linealmente dependientes.

79

5.4.

Cota Singleton

Corolario: si C es un cdigo lineal de longitud n y dimensin k entonces (C) nk+1


Prueba:
Sean d = (C), H : C = N u(H)
d = mn{j : j columnas L.D. de H}
= 1 + max{j : Todo conjunto de j columnas es L.I.}
1 + max{j : Existe un conjunto de j columnas L.I.}
1 + Rango(H)
=1+nk

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

5.5.

Cdigos Cclicos

Definicin: sea W = w0 w1 . . . wn1 definimos Rot(W ) = wn1 w0 w1 . . . wn2


Definicin: 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] 6 C
C = {000, 100, 011, 111} es lineal pero no es cclico.
Identificacin: w0 w1 . . . wn1 w0 + w1 x + . . . + wn1 xn1
Definicin: si P (x), H(x) son polinomios.
P (x) mod H(x) es el resto de dividir P (x) por H(x).
Teorema: si W tiene longitud n entonces:
Rot(W ) = xW (x)

mod (1 + xn )

Prueba:

xW (x) = x w0 + w1 x + . . . wn1 xn1
= w0 x + w1 x2 + . . . + wn2 xn1 + wn1 xn
30

MDS: maximun distances separable.

80

Aplico mdulo 1 + xn
xW (x)

mod (1 + xn ) = w0 x + w1 x2 + . . . + wn2 xn1 + wn1


= wn1 + w0 x + w1 x2 + . . . + wn2 xn1
wn1 w0 . . . wn2
= Rot(W )

(24)
(25)

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


|
{z
} | {z }
Resto

Cociente

( 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 mod (1 + x4 ) = x + x3 0101
Tomo w = 0101 Rot(w) = 1010
x + x3 x(x + x3 ) = x2 + x4
x2 + x4 mod (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) mod (1 + xn ) C

Propiedad: sea C lineal entonces ! polinomio no nulo de grado mnimo.


Definicin: 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) 6= 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:
n
o
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)

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

clase pasada

Como Gr(P (x)) n 1 P (x)

mod (1 + xn ) C

mod (1 + xn ) = P (x) P (x) C

La parte importante
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))

Gr(R(x)) < n 1
Como Gr(R(x)) < Gr(G(x))
Gr(Q(x)G(x)) n 1
Gr(P (x)) n 1
Entonces por Q(x)G(x) C
R(x) = P (x) + Q(x)G(x) C por ser lineal.
| {z } | {z }
C


Gr(R(x)) < Gr(G(x)) n 1
R(x) = 0
R(x) C
P (x) = Q(x)G(x) G(x)|P (x)

82

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




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

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

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


= (1 + g0 xk + . . . + gnk1 xn1 ) +(1 + xn )
|
{z
}
Rotk (G)

83

(26)

( 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)


k
= x + 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 codificar:


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 codificar:
m = 1011 m(x) = 1 + x2 + x3

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

84

Otra: m = 0110 x + x2

V (x) = (x + x2 )(1 + x2 + x3 )
= x + x 3 + x4 + x2 + x4 + 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

0
1

0
0
1
..
.

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

gnk1
...
gnk1
..
..
.
.
g1
g2
. . . gnk1

0 1 1 0 0 0
1 0 1 1 0 0

0 1 0 1 1 0
0 0 1 0 1 1

Segundo Mtodo



Idea: sea P (x) + P (x) mod G(x) = 0 mod (G(x))
G(x)|[P (x) + (P (x) mod G(x))]
Si el Gr(P (x)) n 1 ya est: P (x) + (P (x) mod G(x)) C
Truco
Dado m(x) con Gr(m(x)) k 1 Gr(xnk m(x)) n 1
En definitiva m(x) V (x) = xnk m(x) mod G(x) + xnk m(x)
Ejemplos:
m(x) = 1011 1 + x2 + x3 : n = 7 k = 4
x3 m(x) mod 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) mod G(x) =


Truco: G(x) = 1 + x2 + x3 1 + x2 + x3 0(G(x))
x3 1 + x2 (G(x))

85

0
0

..
.
1

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

x5 x + x2 + x3 (G(x))
x + x2 + 1 + x2 (G(x))
1 + x (G(x))
x4 + x5 mod G(x) 1 + 
x + x2 + 1 + 
x x2
V (x) = (x4 + x5 ) mod G(x) + x4 + x5
= x2 + x4 + x5
001 0110
| {z }
m(x)

Esto corresponde a la matriz generadora:

xnk
mod G(x) + xnk
xnk1
mod G(x) + xnk1

G = ..
..
..
..
.
.
.
.
n1
n1
x
mod G(x) + x
Tenamos:
x3
x4
x5
x6

mod
mod
mod
mod

G(x) 1 + x2
1
1
G(x) 1 + x + x2
G=
1
G(x) 1 + x
2
G(x) 1 + x
0

Es decir obtenemos la matriz G con identidad a


Una matriz de chequeo H es:

1 0 0 1
H = 0 1 0 0
0 0 1 1

0
1
1
1

1
1
0
1

1
0
0
0

0
1
0
0

0
0
1
0

0
0

0
1

derecha.

1 1 0
1 1 1
1 0 1

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

86

Ejemplo: sea G(x) = 1 + x2 + x3 + x4 : n = 7


Hallar una matriz de chequeo con la identidad a izquierda.
x4

mod G(x) 1 + x2 + x3

x5

mod G(x) x + x3 + x4

x6

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

1
0
H=
0
0

5.5.1.

0
1
0
0

0
0
1
0

0
0
0
1

1
0
1
1

1
1
1
0

0
1

1
1

Correcin de errores Error Trapping

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

mod (1 + xn )

Prueba de Error Trapping:


Observacin: Rot(U ) mod G(x) = xU (x) mod G(x)
Pues Rot(U ) = xU (x) mod (1 + xn )
Q(x) : xU (x) = Q(x)(1 + xn ) + Rot(U )
xU (x)



mod G(x) = Q(x)(1 + xn mod G(x)) + Rot(U )
|
{z
}

mod (G(x))

0 pues G(x)|1+xn

Rot U (x) mod G(x) = xU (x) mod G(x)


Roti U (x) mod G(x) = xi U (x) mod G(x)
Sea i : |Si | t ?
Si (x) = xi U (x) mod G(x) absurdo.
Si (x) = Roti (W (x)) mod 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))
| {z }
C

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


| {z }
| {z }
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 mod G(x) solo tengo que resolver los xi : i > k = 7 (los encuadrados).
x8

mod G(x) 1 + x4 + x6 + x7

x9

mod G(x) x + x5 + x7 + x8

x10

x + x5 + x7 + 1 + x4 + x 6 + x7
1 + x + x4 + x5 + x6
mod G(x) x + x2 + x5 + x6 + x7

x11

mod G(x) x2 + x3 + x6 + x7 + x8

x12
x13

x2 + x3 + x6 + x 7 + 1 + x4 + x6 + x7
1 + x2 + x3 + x4
mod G(x) x + x3 + x4 + x5
mod G(x) x2 + x4 + x5 + x6

S0 = W (x) mod G(x)


6
7
4
5
6
2
4
= 1 + x + x4 + x5 + x6 + 1| + x4 +
+ x5 + x}6
{zx + x} + |1 + x + x{z+ x + x} + x
| + x {z
x8

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

m
od G(x)

88

x9

m
od G(x)

x13

m
od G(x)

Contino calculando |S1 |, hasta encontrar uno tal que |Si | 2


S1 = x(W (x) mod G(x))


= x 1 + x 2 + x5 + x7
= x + x3 + x6 + x8
= x + x3 + x6 + 1 + x4 + x6 + 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
= x4 + x5 + x6 + x7 + 1 + x4 + x6 + x7
= 1 + x5
|S7 | = 2 2 = 7
Entonces: E(x) = xni Si mod (1 + xn )
= x157 S7 mod (1 + x15 )
= x8 (1 + x5 ) mod (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
Definicin:
Polinomio Chequeador H(x) =

1 + xn
G(x)

Propiedad (ejercicio)
W (x) C H(x)W (x)

mod (1 + xn ) = 0 : Gr(W (x)) n 1


89

6.

P-NP

Definicin: 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 finito}, podemos tomar |G| = #de vrtices.
Si I = N |n| = dlog(n)e = #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))

S Si (x) = S
Resolver es que: A(x) =
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 significa No Polinomial. (de hecho P N P ).


NP significa: Non deterministic Polynomial.
Otra forma de definir esta clase que es la clase de problemas de decisin para los cuales
existen certificados que verifican la respuesta S en tiempo polinomial.
31

Edmonds prob que Matching P .

90

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

2. Dado x I vale x S y J :

6.3.

(x, y) T
|y| P (|x|)

Co-NP

Definicin: Co-NP = problema de decisin tal que el complemento est en P.


Ejemplo: Primo Co-NP
Certificado para NO una factorizacin.
(En 1976 se prob que Primo NP) y en 2002 se prob que PRIMO P .


b
Es (x)
=

Complemento de
N o Si (x) = S
(I, S) (I, I S)
S Si (x) = N o
k-color NP k

Certificado: 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?

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 : Certificacin una valuacin.


Otras formas de SAT estn en P.
DN F SAT P : 0 s de 0 s
Xor SAT P : 0 s de 0 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

Definicin: 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 6= 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 defino Ci = xi,1 xi,2 . . . xi,k
C = C1 C2 . . . Cn

92

Di =

xi,j xi,r

j, r
j<r
j, r = 1, . . . , k
D = D1 . . . Dn
Sea Fi,j,l = xi,j xl,j
k
n
V
V
Fi,j,l
F =
j=1
i, l = 1
il E
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 x
bi,j {0, 1}

1 Si C(i) = j
Definimos x
bi,j =
0 c.c.
b = B(b
Debemos ver que : B
xi,j ) = 1
Todo vrtice tiene un color
i j k : C(i) = j
i j k : x
bi,j = 1
i : x
b x
bi,2 . . . x
bi,k = 1
{z
}
| i,1
ci
C

b=C
b1 . . . C
bn = 1
C
Todo vrtice tiene un slo color
i ! j k : C(i) = j
i @j 6= r : C(i) = j, C(i) = r
i, j < r : C(i) 6= j C(i) 6= r
x
bi,j = 0 x
bi,r = 0
o lo mismo: x
bi,j = 1 x
bi,r = 1
b =1
x
bi,j x
bi,r = 1 i, j < r D
Finalmente como el coloreo es propio
il E Tenemos C(i) 6= C(l)
i.e. il E, @j : C(i) = C(l) = j
il E, j :
(C(i) 6= j C(l) 6= (j)
|
{z
}
x
bi,j =1 x
bi,r =1
93

il E, j : x
bi,j x
bi,r = 1 Fb = 1
b=C
bD
b Fb = 1
B
Fin ()
b = 1 y queremos ver que: (G) k
bi,j con B
Ahora sabemos que existe x
C
bi,j = 1 (?)
b = 1 i, j : x
b
b
B = 1 D = 1 i, !j : x
bi,j = 1 definimos C(i) = el nico j con x
bi,j = 1
b
F = 1 ij E, C(i) 6= 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

Definicin: 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).
b en CNF pero que
Es decir dada B en CNF debemos construir polinomialmente una B
tenga exactamente 3 literales por clasula y tal que B sea satisfactible B 0 lo es.
Supongamos que B = D1 . . . Dm : Di clasulas.
Variables de B = x1 , . . . , xn
Dada una clasula D arbitraria, definiremos una conjuncin de clasulas E (con ms
variables), y luego tomaremos:
B 0 = 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 6 {x1 , . . . , xn }.
Tomamos E = (L1 L2 y) (L1 L2 y)
c1 L
c2 = 1 (L
c1 L
c2 yb) (L
c1 L
c2 yb) = 1
Claramente si L
Viceversa:
Si {xb1 , . . . , x
cn , yb}
c1 L
c2 yb) (L
c1 L
c2 yb) = 1
Tal que (L
Entonces si:
c1 L
c2 = 1
yb = 0 L
c1 L
c2 = 1
yb = 1 L
Observacin: probamos un poco ms de lo que dijimos
 


~
~
~
~
~
x
b:D x
b = 1 yb : E x
b, yb = 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:
b=1E
b = 1 i.e. cualquier yb1 , yb2
L
D tiene 4 literales.
D = L1 L2 . . . Lk
Entonces tomamos k 3 variables nuevas: y1 , y2 , . . . , yk3 polinomial en k
K >> 4:
E = (L1 L2 y1 )(y1 y2 L3 )(y2 y3 L4 ). . .(y k4 yk3 Lk2 )(y k3 Lk1 Lk )

95

#clasulas = k 2 lineal en k.
b = 1 j : L
bj = 1
Supongamos ahora D
Definamos:
yb1 = yb2 = . . . = ybj2 = 1
ybj1 = ybj = . . . = ybk3 = 0

b =(L
b1 L
b2 yb1 ) (b
b ) . . . (b
bj ) (b
bj+1 )
E
y 1 yb2 L
y j2 ybj1 L
y j1 b
yj L
|{z}
|{z} 3
|{z}
|{z}
=1

=1

HIP =1

=1

bk1 L
bk )
. . . (b
y k3 L
|{z}
=1

b=1
E
b=1
Veamos la vuelta: supongamos que E
b = 1. Supongamos que no.
Queremos ver que D
b
c
ck = 0 L
b
D = 0 L1 . . . L

 r = 0 r 


b = yb1 yb1 yb2 yb2 yb3 . . . ybk4 ybk3 ybk3
Nos queda: E
b=1
Como E
Tenemos:

yb1 = 1

yb2 = 1

yb1 yb2 = 1
yb3 = 1

. . . ybk4 = 1

yb2 yb3 = 1

y
b
=
1

k3

Absurdo

yb3 yb4 = 1

. . . ybk4 ybk3 = 1

b
y k3 = 1

6.5.2.

3-color es NP completo

Teorema: 3-color es NP completo


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

96

6.5.3.

Ejemplo 3-SAT P 3-color


B = (x1 x2 x3 ) (x2 x3 x4 )

efefefnt YXP?PXYXYXYY
efefefefefnefnefnnn ??PPPXPXYPXYXYXYXYXYXYXYYYYY
e
e
e
f
e
e
f
e
?? PP
XX YY
e ff
nnn 
eefefefefefeffff
?? PPPP XXXXXYXYXYXYXYXYYYYYYY
e
n
e
e
n
e
e
e
f
n
e
XXXXX YYYYYYY
f

e
f
P
n
e
?
f
e
e
P
f
n
P
XXXX
YYYYY
fff
eeeee
nn _ 
_ x4
_ x3
x 4
x3
x1, eee _ x1 fff
x2
x2 A
3
u

,,
A
3
u
A

u
33
AA
,,
uu

33
AA
uu

u
,,
'

AA
33
uu

u
,,
A

33
bb
efhmbefhm s
AA uuu
bb
e
bb
f
e

bb
e
f
h
bb
e
f
bb
e
h
bb
f
e
,,

33 bbbbbbbbbbbb eeeeefefefhfhfhhhmmm ||
uAu A

,,
uu Abb
bbbbbbbbbbbb33 eeeeeefefefefefefhfhfhfhfhhhmmmmm |||
bb
A
u
bb

bb
u
A
bb
ff
hh
mm
u bb
bbbb
,,
eeee3
AA
||

eeeefefeffffffffhhhhhh mmmmm
bbbbbbbbbbbbuuu
e
bb
e
A
bb
||
e
bb
e
,,
bb
e
e
A
u
|
e1,2
e
f
e
m
e
f
2,2
e
m
f
u
e
AAfffff


||
,,
eeeeee
uu
mmm
||
ueueeeeeee ffffffffffAAA
mmm
e
|
m
e
u
,,
e
m
e
e
|
AA
ff
ee u
|
mmm
,
eeeeee uuuu fffffffff
A
||
mmm
eeeeee
f
m
e
|
f
e
f
e
m
e
f
e
f
e
e2,1
e1,1
e2,3
e1,3





i1,1

{{
{{
{
{
{{

i1,2

CC
CC
CC
CC
_ i1,3

{{
{{
{
{
{{
i2,1 _

i2,2

CC
CC
CC
CC

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 }nk=1 T1 . . .Tm E1 . . .Em F1 . . .Fm {sej,k }

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

1jm
k = 1, 2, 3

Veamos primero:
Sea C un coloreo de G de 3 colores queremos dar un asignamiento de valores a las
b) = 1
variables tal que: B(~x
Definamos:

1 Si C(xk ) = C(s)
xbk =
0 Sino
b) = 1
Queremos ver que B(~x
b) = 1
j basta ver: Dj (~x
b1,j L
b2,j L
b3,j = 1
Hay que probar j L
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 ) 6= C(ij,k ) = C(t)
sej,k E C(ej,k ) 6= C(s)
st E C(s) 6= C(t)
C(ej,k ) = tercer color
Como ej,k Lj,k E C(Lk,j ) 6= tercer color
tLk,j E C(Lk,j ) 6= C(t)


C(Lk,j ) = C(s)

bk,j = 1 Fin
Por definicin L
b : B(~x
b) = 1 debemos construir un coloreo propio
Dado un asignamiento de valores ~x
con 3 colores.
Definimos: C(s) = 1 , C(t) = 2 st No Crea Problemas (NCP).
Coloreamos:

C(xi ) = xbi
xi xi
(N CP )
C(xi ) = 1 xbi
Adems:
C(xi ), C(xi ) {0, 1}
C(t) = 2


txi , txi

b) = 1
Como B(~x
b) = 1 j = 1, . . . , m
Dj (~x
d
d d
i.e. L
1,j L2,j L3,j = 1
d
j, k : L
k,j = 1 (si hay ms de uno elijo alguno)
Coloreamos:

C(ej,k ) = 0
bk,j = 1 C(Lk,j ) = 1 Lk,j ej,k
Como L
Y coloreo:

C(ej,r ) = 2 : r 6= k
C(Lr,j ) {0, 1}

(N CP )

(N CP )


ej,r Lr,j
98

(N CP )

Como:

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

C(s) = 1

(N CP )

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


ej,k ij,k

(N CP )

Y coloreamos: C(ij,r ) = 0 1 : r 6= k
ij,r ej,r
|{z} |{z}
0 1 =2

(N CP )

Finalmente el tringulo:

ij,1

}}
}}
}
}
}}

ij,2

AA
AA
AA
AA
_ ij,3

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

99

(N CP )

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]
b1 , . . . ,
bn
Representan x
b1 , . . .
,x
bn
;x
x
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

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

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 , . . . , n1} ; // 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 6= )
Tomar i N, SETEAR( i ) ;
while (Q 6= ) {
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 n1t ] = 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"

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:


x x2 . . . xk xk+1 van a ser true
{z
}
|1
|{z}
f alse

f alse

Las de la forma:
x1 x2 . . . xk x1 x2 . . . xk f alse
x1 x2 . . . xk f alse
|
{z
}
f alse

true
El nico problema son las disjunciones de la forma:
x true |{z}
x
f alse

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

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

7.

Introduccin a la Inteligencia Artificial

7.1.

Hill Climbing

7.2.

Simulated Annealing

7.3.

Algoritmos Evolutivos

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

7.4.

Algoritmos Genticos
Gentico Interaccin entre individuos.

Los algoritmos genticos34 , se basan ms o menos en la evolucin biolgica.


Cada individuo, tiene cromosomas, que forman cadenas de ADN, se dividen en Genes
que codifican 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 codificar 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 codificacin puede ser una cadena de 3 nmeros.
2. Hallar un recorrido de n ciudades que no repita ninguna y minimice la distancia
(TSP)35 . Codifica una cadena con el nombre de cada ciudad (sin repetir).
34
35

AG.
Travel Salesman Problem.

102

En todo AG necesitamos una funcin a maximizar, llamada funcin de Fitness36 .


En los ejemplos anteriores:
1. f es la funcin.
2. Sera la f del costo del camino.
A veces como en TSP no toda cadena representa una solucin, por ejemplo puede ser
que no haya camino entre las dos ciudades.
Generalmente se soluciona creativamente, por ejemplo en TSP, podemos suponer que
hay ruta entre 2 ciudades cualesquiera, asignndole, un peso muy grande si no existe en
la realidad. Pero en otros problemas esto es ms delicado.
Es la primera caracterstica de un AG.
1) Una poblacin de individuos con cromosomas y una funcin de fitness adecuada.
Otra caracterstica es:
2) Seleccin de individuos a reproducirse mediante la fitness.
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 (offspring) por medio del cruzamiento
(crossover) de genes.
4) Los offspring 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, offspring 1
y offspring 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.

Codificacin del ejemplo

n
o
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



Fitness ser algo como : =

7.5.3.

1
F enotipo31

P
si
F enotipo 6= 31
P
si
F enotipo = 31

Entrecruzamiento del ejemplo

Crossover: Singled Point Crossover


Progenitor 1: b1 b2 b3 . . . b400
Progenitor 2: bb1 bb2 bb3 . . . bb400
Elijo al azar un nmero x : 0 < x < 400 y obtengo:
Por ejemplo x = 127
Offspring 1: b1 b2 b3 . . . b127bb128 . . . . . . bb400
Offspring 2: bb1bb2bb3 . . . bb127 b128 . . . . . . b400
7.5.4.

Mutacin del ejemplo

Para cada bit lo cambio con probabilidad p.


104

7.5.5.

Seleccin del ejemplo

Mato a los padres, me quedo con los offsprings.


7.5.6.

Operadores de Seleccin

Asumimos que cada individuo tiene una fitness 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
P

Sea F =

Fi

i=1

la fitness promedio.

Sea Ei = FFi = # esperado de veces que el individuo i, debera ser seleccionado de


acuerdo a su fitness.
Fi
Ei = n P
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 Ei0 s se toma un nmero al azar A entre 0 y n y se toma el primer
i
P
i:
Ej > A
j=1

Ejemplo: 6 individuos.
Fitnesses
F1
F2
F3
F4
F5
F6

=
=
=
=
=
=

17,118
9,51
36,138
22,824
91,296
13,314

6
P

Fj = 190, 200

j=1

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 Ei0 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
P
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.
Eficiencia computacional.
Bias: es la diferencia entre FFi y el valor esperado de veces que el individuo ser seleci
cionado con el mtodo propuesto.
Bias(Ruleta) = 0.
Spread: rango de offspring que un individuo puede tener:
Ruleta(Spread(i)) = [0, n].
Conclusin: ruleta tiene Bias = 0 y Spread Mximo (malo).
Eficiencia: 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

En nuestro caso: r = 0, 15
1,15 2,15 3,15 4,15 5,15

I3
I4
I5
I5
I5

Entonces nos queda:


11
20
31
41
53
60

(0, 54)
(0, 34)
(1, 14)
(0, 72)
(2, 88)
(0, 42)

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

7.5.7.

Remainde Methods (Mtodos del Resto)

El individuo, se selecciona determinsticamente.


Se toma bEi c veces.
n
P
Los n bEi c posibles se llenan con algn otro mtodo.
i=1

Por ejemplo se usan los restos: Ri = Ei bEi c y se distribuyan usando Ruleta o SUS.
Ejemplo:
bE1 c = b0, 54c = 0
bE2 c = b0, 30c = 0
bE3 c = b1, 14c = 1
bE4 c = b0, 72c = 0
bE5 c = b2, 88c = 2
bE6 c = b0, 42c = 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 final 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 fitness 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
influenciar la bsqueda produciendo un estancamiento.
Por esto se han propuesto alternativas.
107

7.5.9.

Sigma Scaling

ci
En este mtodo se calculan las Ei en forma distinta E

F
=
6 0
1 + Fi2
c
Se define Ei =
: = desvo estndar de los Fi .
1
=0
Ventaja: al principio, suele se grande, entonces se evita Crownding, al final 0.
Entonces el mejor individuo se va a reproducir mucho ms.
Ejemplo: con las Fitness de antes obtengo = 30, 627
ci
Y voy calculando los E
c1 = 1 + 17, 118 31, 7 = 0, 762
Primero: E
2
i
P

ci
E

Ej

j=1

c1
E
c2
E
c3
E
c4
E
c5
E
c6
E

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

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

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
Fi

bi =
E

eT
P rj
eT

: T temperatura, inicialmente alta y luego se enfra

Otros mtodos no usan Fitness Proporcion


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

Mtodos de rango: se usa la Fitness para ordenar la poblacin y luego se usa una
medida que dependa slo de la posicin en esa poblacin.

Lineal Ranking: LR(pos) = (2 SP ) + 2(SP 1) pos1
n1
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.
SP = 2 LR(pos) = 2 pos1
n1
SP (1; 2), por ejemplo SP = 1, 2


pos 1
LR(pos) = 0, 8 + 0, 4
n1
SP no tiene que ser fijo, podra ir aumentando para aumentar la presin.
Ejemplo: con las Fitness del ejemplo anterior
F2

< F6

< F1

< F4

< F3

< F5

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
= LR(2) = 0, 8 + 0,4
= 0, 88
5

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 codificacin 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
Ie = 0, 5|10|5


5
O bien: Ie = 0, 5 10+7,8
2
7.5.12.

Mutaciones con Permutaciones

Mutacin para codificaciones 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 offsprings.
110

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

7.6.

No Free Lunch

Todos los algoritmos que optimizan37 en funciones se comportan, promediando sobre


todos las funciones posibles, igual.

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

37

Por ejemplo calcular mximo

111

Das könnte Ihnen auch gefallen