Вы находитесь на странице: 1из 111

Resumen de Discreta II

Maximiliano Illbele illbelemaxi@gmail.com


8 de julio de 2014

ndice
1. Coloreo y repaso de grafos
1.0.1.
1.1.

BFS-DFS

Coloreo

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

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

1.1.1.

Nmero Cromtico . . . . . . . . . . . . . . . . . . . . . . . . . . .

1.1.2.

Algoritmo Greedy para coloreo

1.1.3.

Propiedades de Greedy . . . . . . . . . . . . . . . . . . . . . . . . .

1.1.4.

Heursticas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

10

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

2. Flujos en networks
2.1.

2.2.

2.5.

2.6.

14

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

14

Ejemplos de Greedy

2.1.2.

Complejidad de Greedy . . . . . . . . . . . . . . . . . . . . . . . . .

15

Algoritmo de Ford y Fulkerson . . . . . . . . . . . . . . . . . . . . . . . . .

15

Lema del Camino Aumentante . . . . . . . . . . . . . . . . . . . . .

Teorema: Max-Flow Min-Cut


2.3.1.

2.4.

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

2.1.1.

2.2.1.
2.3.

12

Algoritmo de Greedy para hallar Flujo

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

Complejidad de Ford Fulkerson

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

16
20
21

Algoritmo de Edmonds Karp . . . . . . . . . . . . . . . . . . . . . . . . . .

23

2.4.1.

Complejidad de Edmonds-Karp

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

24

2.4.2.

Ejemplo de Edmonds Karp . . . . . . . . . . . . . . . . . . . . . . .

27

2.4.3.

Pseudo-Cdigo de Edmonds Karp . . . . . . . . . . . . . . . . . . .

Algoritmos Tipo Dinic

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

28
29

2.5.1.

Esquema general Tipo Dinic . . . . . . . . . . . . . . . . . . . . . .

30

2.5.2.

Ejemplo de Dinic . . . . . . . . . . . . . . . . . . . . . . . . . . . .

32

2.5.3.

Pseudo Cdigo algoritmos Tipo Dinic . . . . . . . . . . . . . . . . .

33

2.5.4.

Complejidad de Dinic . . . . . . . . . . . . . . . . . . . . . . . . . .

35

Algoritmo Wave de Tarjan . . . . . . . . . . . . . . . . . . . . . . . . . . .

36

2.6.1.

Pseudo Cdigo de Wave

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

36

2.6.2.

Complejidad de Wave . . . . . . . . . . . . . . . . . . . . . . . . . .

38

2.6.3.

Ejemplos de Wave

39

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

3. MST
3.1.

3.2.

3.3.

41

Kruskal

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

42

3.1.1.

Pseudo Cdigo de Kruskal . . . . . . . . . . . . . . . . . . . . . . .

43

3.1.2.

Teorema: Kruskal devuelve un MST . . . . . . . . . . . . . . . . . .

43

3.1.3.

Complejidad de Kruskal

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

44

3.1.4.

Kruskal Delete

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

44

3.1.5.

Complejidad Kruskal Delete . . . . . . . . . . . . . . . . . . . . . .

44

3.1.6.

Ejemplo de Kruskal . . . . . . . . . . . . . . . . . . . . . . . . . . .

45

PRIM

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

3.2.1.

Pseudo Cdigo de Prim

3.2.2.

Correctitud de Prim

3.2.3.

Ejemplo de Prim

46

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

46

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

46

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

47

Implementaciones de Union Find

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

48

3.3.1.

Union Find con listas enlazadas . . . . . . . . . . . . . . . . . . . .

48

3.3.2.

Union Find con Representantes

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

48

3.3.3.

Union Find con ranking

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

49

4. Matchings

51

4.1.

Transformacin del problema de Matching a uno de ujo maximal . . . . .

51

4.2.

Teorema de Hall . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

53

4.3.

Complejidad del Algoritmo de Matching

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

53

4.4.

Grafos con Peso . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

53

4.4.1.

Algoritmo de Gross . . . . . . . . . . . . . . . . . . . . . . . . . .

54

4.4.2.

Ejemplo del algoritmo de Gross

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

55

4.5.

Prueba del teorema de HALL

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

60

4.6.

Teorema del Matrimonio . . . . . . . . . . . . . . . . . . . . . . . . . . . .

61

4.7.

Minimizar la Suma

62

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

4.7.1.

Ejemplo de Matching que minimiza la Suma (A ojo)

. . . . . . . .

62

4.7.2.

Algoritmo Hngaro . . . . . . . . . . . . . . . . . . . . . . . . . . .

63

4.7.3.

Ejemplo del algoritmo Hngaro

63

4.7.4.

Complejidad de algoritmo Hungaro

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

65

4.7.5.

EJEMPLO DEL MEJORADO (FALTA) . . . . . . . . . . . . . . .

67

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

5. Cdigos de correcin de errores

68

5.1.

Cota de Hamming . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

71

5.2.

Matriz generadora . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

74

5.3.

Matriz de chequeo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

75

5.4.

Cota Singleton

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

80

Cdigos Cclicos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

80

5.5.1.

87

5.5.

Correcin de errores Error Trapping . . . . . . . . . . . . . . . . .

6. P-NP

90

6.1.

La clase P . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

90

6.2.

La Clase NP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

90

6.3.

Co-NP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

91

6.4.

SAT

91

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

6.5.

6.4.1.

Reduccin Polinomial . . . . . . . . . . . . . . . . . . . . . . . . . .

92

6.4.2.

k color P SAT

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

92

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

94

NP Completo
6.5.1.

3-SAT es NP completo . . . . . . . . . . . . . . . . . . . . . . . . .

94

6.5.2.

3-color es NP completo . . . . . . . . . . . . . . . . . . . . . . . . .

96

6.5.3.

Ejemplo 3-SAT

6.5.4.

2-SAT

6.5.5.

HORN-SAT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101

P 3-color

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

97

P . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100

7. Introduccin a la Inteligencia Articial

102

7.1.

Hill Climbing

7.2.

Simulated Annealing

7.3.

Algoritmos Evolutivos

7.4.

Algoritmos Genticos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102


7.4.1.

7.5.

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102

Seleccin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103

Ejemplo de un AG

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103

7.5.1.

Codicacin del ejemplo

. . . . . . . . . . . . . . . . . . . . . . . . 104

7.5.2.

Fitness del ejemplo . . . . . . . . . . . . . . . . . . . . . . . . . . . 104

7.5.3.

Entrecruzamiento del ejemplo

7.5.4.

Mutacin del ejemplo . . . . . . . . . . . . . . . . . . . . . . . . . . 104

7.5.5.

Seleccin del ejemplo . . . . . . . . . . . . . . . . . . . . . . . . . . 105

7.5.6.

Operadores de Seleccin

7.5.7.

Remainde Methods (Mtodos del Resto)

7.5.8.

Otros mtodos Fitness Proportional . . . . . . . . . . . . . . . . . . 107

7.5.9.

Sigma Scaling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108

. . . . . . . . . . . . . . . . . . . . . 104

. . . . . . . . . . . . . . . . . . . . . . . . 105
. . . . . . . . . . . . . . 107

7.5.10. Crossover

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109

7.5.11. Mutacin

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110

7.5.12. Mutaciones con Permutaciones . . . . . . . . . . . . . . . . . . . . . 110


7.6.

No Free Lunch

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111

1. Coloreo y repaso de grafos


Recordemos que un grafo
Donde

E {A V : |A| = 2}.
E es el conjuntode lados1 o aristas.


G = {1, 2, 3}, {1, 2}, {1, 3}

es un par

(V, E)

donde

es el conjunto de vrtices onodos y


Ejemplo: sea

Grco(G)







1<

<<
<<
<<
<

Notacin usual

{x, y} xy
Vecinos de un nodo
Grado

o Valencia de

x: (x) = {y V : xy E}




un vrtice: d(x) = (x)

Menor valencia de

G: = mn{d(x) : x V }

Mayor valencia de

G: = max{d(x) : x V }

Deniciones
Un grafo es
Un

regular si

= ,

a veces llamados k-regular.

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

En general denimos
Ejercicio: demostrar que
1. Reexividad:

Disconexo

_5







2
xy

4 ==

==
==
==
_3

camino entre

==
==
==

5
x

y.

es una relacin de equivalencia.

xx

xyyx

xy
Transitividad:
xz
yz

2. Simetra:

3.

1 ==

1 Edges.

2 Degree.

Una componente conexa de

es una clase de equivalencia de la relacin

Notacin

n = |V |.

La cantidad de vrtices:
La cantidad de lados:

m = |E|.

Observacin

 
n
m
=
2
Si

1.0.1.

n(n1)
2

es conexo

n1m

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

3 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

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

?
s
ss
C

N ivel 0

N ivel 1
N ivel 2
N ivel 3

1.1. Coloreo
G = (V, E)
xy E C(x) 6= C(y)

Un coloreo (propio) de
tal que si:

con

colores es una funcin

C : V {1, 2, . . . , k}

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


Donde

(G) = mn{k :

un coloreo propio de
Propiedad:

con

G : (G).
k colores }.

1 (G) n

4 BFS: bsqueda en anchura.

1.1.2.

Algoritmo Greedy para coloreo

x1 , . . . , x n .

Requiere un orden de los vrtices:

C(x1 ) = 1
j>1

Inicio:
Para

C(xj ) =

El menor color que no crea conicto 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

Orden alternativo

Vrtices

Color

Complejidad de coloreo con Greedy


O d(x1 ) + d(x2 ) + . . . + d(xn ) = O(2m) = O(m)
Teorema: sea
Prueba: Supongamos que
Sea
Sea

A
B

G = C2r+1 (G) = 3

(G) = 2

el color del primer vrtice.


el color del segundo vrtice.

x1 x2 E A 6= B
(G) = 2 estos son
Como x2 x3 E C(x3 ) 6= B C(x3 ) = A
5
Como x3 x4 E C(x4 ) = B
Como estamos suponiendo

los nicos colores que podemos usar.

Por induccin:


C(xi ) =
Pero entonces el lado

x1 x2r+1
|{z}
| {z }
A

A
B

cuando
cuando

tiene los

i
i

es Impar
es Par

vrtices del mismo color

Absurdo.

5 Este paso es slo ilustrativo no forma parte de una demostracin formal ya que no sabemos si

n = 3.
7

n>3

(G) 3
Y est claro que con

colores alcanza denimos:

A
B
C(xi ) =

cuando
cuando
cuando

i es Impar < 2r + 1
i es Par
i = 2r + 1

C2r+1 G (G) 3
un grafo G es bipartito si: (G) = 2

Corolario: si
Denicin:

Teorema:

es bipartito

@C2r+1 G

Ms an existe un algoritmo de complejidad polinomial para determinar si

es bi-

partito o no.

(G) = 2,
C2r+1 G

Prueba: el algoritmo que daremos da un coloreo (propio) con dos colores, si


y si el algoritmo colorea con ms de

colores entonces veremos que existe

(G) 3
En realidad esto lo haremos para cada componente conexa de
Vamos a suponer
Sea

x V,

G.

conexo.

BF S(x) y tomemos el siguiente coloreo



0 Nivel BF S(x), z es Par


C(z) =
1 Nivel BF S(x), z es Impar

y corramos

propio:

que puede no ser

Si ese coloreo es propio ya est.


Supongamos que no
Como

vw E

v, w : vw E : C(v) = C(w)
v fue puesto antes que w en el rbol entonces

y estamos usando BFS, Si

debe ser:

nivel(w) = nivel(v + 1) Absurdo


O bien

1.1.3.

nivel(v) = nivel(w)

pues

Hay un ciclo impar

nivel(v) nivel(w) (2)


(G) 3

Propiedades de Greedy

Analizando a Greedy, podemos decir que en ciertos casos puede andar muy mal
Ejemplo:


Sea

G : V = {1, . . . , 2r}

y con

E = ij

i es Impar
j es P ar

Para simplicar 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

j 6= i + 1

x1 , . . . , x2r = x8

Luego Greedy corriendo en orden


Color

Vrtice


Pero si denimos

1 i
2 i

C(xi ) =

va a necesitar

x1
x2

x3
x4

x5
x6

x7
x8

es impar

nos queda que

es par

r=4

colores:

(G) = 2

Conclusin:

Greedy(G)

devuelve un coloreo que usa

colores, pero vimos que

(G) = 2.

Sin embargo . . .
Propiedad:

Prueba: sea

{x1 , . . . , xn } de los
obtiene: (G)

los vrtices de color

Sean

Sean

Vt

los vrtices de color

los vrtices de color


.
.
.

Induccin en

t=1

vrtices de G en el cual Greedy()

t = (G)

V1
V2

Sean

Si

un ordenamiento

en algn coloreo (propio) con

colores.

t:

obvio.

Supongamos que vale para

t1

Orden de los vrtices:


Los de

V1 <

los de

V2 < . . . <

Por hiptesis inductiva hasta


Los de

Vt

no estn unidos entre si

de los primeros
color

Vt1

t1

colores o el color

los de

Vt , en Vi

lo coloreamos con

los ordeno como quiero.

t1

colores.

Greedy en cada uno de sus vrtices usar uno


t, nunca hay conicto entre ellos que demande un

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

es conexo o todas sus componentes conexas sean no regulares, tenemos

que:

6= (G)
x V : d(x) =
6
Corramos BF S(x) y sea x1 , . . . , xn el orden inverso al de BFS(x) xn = x
7
En BF S(x) todo vrtice, salvo x es incorporado al rbol por medio de un vecino que
Prueba: sea

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

Greedy puede colorear con alguno de los

Ahora queda colorear


Greedy necesita usar

xn = x
d(x) + 1

colores:

(Kn ) = n = (n 1) + 1 = + 1

teorema de Brooks dice que si

1.1.4.

(G) = + 1

(C2r+1 ) = 3 = 2 + 1 = + 1

2. Los grafos completos:


El

colores.

d(x) = < + 1

Ejemplos donde
1. Los ciclos impares:

posibles conictos.

es conexo esos son los nicos ejemplos.

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 )


1

2
6 O lo mismo

7O

3
q5
>M>MMMM ;;qq;qqqqqqq
q

>> MMqMqqqq ;
> qqqq MM ;;
qqqq>q>> MMMM;;
q
q
q
q
M
qqq
4

3
qqq
 qqqqqqqqq



q
 qqqqq
qqqqqqqqq


qqq

y as seguimos . . .

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

DF S(x).

DF S(x).
10

Luego corro Greedy con:


Es decir en el orden:
Y nos da

x6 = 1 x5 = 6 x4 = 4 x3 = 5 x2 = 3 x1 = 2

2, 3, 5, 4, 6, 1

(G) = 2

3. RLF: Recursive Largest First


1 RLF ( )
2 {
3

color = 1;

R = V;

//

Vrtices

while ( R 6= ) {

5
6

no Coloreados

L = R;

while

(L

6= ) {

Tomar v

Color ( v ) = c o l o r ;

de L

V tenga

10

Remover ( v )

de R ;

11

Remover ( v )

12

( v )

la

mayor

cantidad

de

vecinos

en R

de L ;

13

Color

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
(V, E) : E V V con
C : E R.
0
En este contexto siempre pediremos C : E R
y los C(x, y) se llaman capacidades.

Un network (dirigido) es un grafo dirigido, es decir un par


pesos en los lados, es decir con una funcin
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).
N = (V, E, C) y
f : E R tal que:

Denicin: dado un network


en

N,

de

es una funcin

y (x)

y+ (x)
3.

s, t V ,

0 f (xy) C(xy) xy E
P
P

Conservacin:
f (xy) =
f (yx) x 6= s, t

1. Feasability :
2.

vrtices distinguidos

Productor:

f (sy)

produce se llama la

fuente9 y

f (ys)

y (s)

y+ (s)
Como

se llamar

En algunos textos se pide directamente que:

resumidero10 .

f (ys) = 0

y (s)
O ms an:

C(ys) = 0 y (s)

Notacin:

f (xy) = Outf (x)

y+ (x)

f (yx) = Inf (x)

y (x)
Denicin: el

valor del ujo es

8 Viabilidad.
9 Source.

10 Sink.

12

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

un

ujo

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 )
( 1) Por denicin de

(2)

Outf (x).

( 2) Notacin.
Similarmente:

Inf (x) =

X X

f (yx)

xV y (x)

xV

f (yx)

x, y V

yx E
= f (V, V )
( 3) Por denicin 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

hallar

que maximice

V (f ).

Esto se conoce como el problema del ujo maximal


Notacin:

s = x0 , x1 , . . . , xr = t : xi xi+1 E
que se mandan  unidades de ujo

Sea
Signica

, la notacin:

11

s, x1 , . . . , xr1 , t : 

a travs de ese camino, es decir, si

era

un ujo existente denimos:

f (xy) =

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

G( xy)
Si no

2.1. Algoritmo de Greedy para hallar Flujo


Hasta que no se pueda ms buscar caminos de

2.1.1.

y mandar ujo por ellos.

Ejemplos de Greedy

Todas las capacidades son

10,

excepto

?A

C@
@

@@
@@
@

s>

>>
>>
>>
>

C(EF ) = 15.

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

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

da: f (EF ) = 15

Ejemplo: todas las capacidades son

1000

excepto:

C(CD) = 1

/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

exista.

14

C(CB) = 900

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


2. Segundo camino: s, C, D, t: 1
3. Terminamos porque no hay ms posibles caminos.
En este caso el ujo obtenido (1001) no es maximal, el ujo maximal correspondiente
es: (1901)
Eligiendo caminos obtenemos el ujo maximal correspondiente :1901
1. Primer camino: s, A, D, t: 999
2. Segundo camino: s, A, B, t: 1
3. Tercer camino: s, C, B, t: 900
4. Cuarto camino: s, C, D, t: 1

2.1.2.

Complejidad de Greedy
Greedy

Buscar camino dirigido:

O(m)

Aumentar en ese camino:


Total por aumento:

O(n)

O(m) + O(n) = O(m)


Cuntos aumentos de ujo hay?

En Greedy una vez que un lado se satura, es decir

f (xy) = C(xy),

no se vuelve a

usar, ya que no se devuelve ujo.


Adems sabemos que por cada aumento se satura al menos un lado.

Hay a lo sumo m aumentos.


Complejidad(Greedy) = m O(m) = O(m2 )

2.2. Algoritmo de Ford y Fulkerson


Denicin: un

camino aumentante12 de

s a t es una sucesin de vrtices:


s = x0 , x1 , . . . , xr = t : i r 1
 

E : f (xi xi+1 ) < C xi xi+1 estos son los lados Forward.

O bien:

xi xi+1

O bien:

xi+1 xi E : f (xi+1 xi ) > 0

i.e. que haya mandado ujo, lados

Backward.

Hasta que no se pueda ms buscar caminos aumentantes y mandar ujo por ellos.

12 Augmenting path.

15

2.2.1.
Si

Lema del Camino Aumentante


es un ujo y se aumenta a lo largo de un camino aumentante el resultado tambin

es ujo. Ms an si se manda

por el camino aumentante, el valor del nuevo ujo es

V (f ) + .
Prueba:

s = x0 , x1 , . . . , xr = t un camino
(

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


Sea i =

f (xi+1 xi )

Sea

Elijo

aumentante.
para los lados forward
para los lados backward

 = mn{i }
f  es tomar

Aumentar

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

es ujo y que

V (f ) = V (f ) + 

Feasability: Obvio por denicin de


Conservacin:

x 6= s, t x = xi : 0 < i < r.

Hay que analizar


1. F-F:

i , .

+

casos:

+

xi1 xi xi+1
Outf (xi ) = Outf (xi ) + 
Inf (xi ) = Inf (xi ) + 

//

//

xi xi+1

xi1 xi

Outf (xi ) Inf (xi ) = Outf (xi ) Inf (xi ) +   = 0


2. F-B:

+

xi1 xi xi+1
Outf (xi ) = Outf (xi )
Inf (xi ) = Inf (xi ) +  
Luego:

3. B-F:

Outf (xi ) Inf (xi ) = 0

+

xi1 xi xi+1
Inf (xi ) = Inf (xi )
Outf (xi ) = Outf (xi ) +  
Luego:

Outf (xi ) Inf (xi ) = 0

16

porque

es ujo.

4. B-B:

xi1 xi xi+1
Inf (xi ) = Inf (xi ) 
Outf (xi ) = Outf (xi ) 
Luego:

s:

En el caso de
1.

Outf (xi ) Inf (xi ) = 0

+

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

2.

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

Denicin: dado

N = (V, E, C)

Un

con vrtices

s=

corte es un subconjunto

fuente,

t=

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

resumidero.

Lema: sea

1.

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

2.

V (f ) Cap(S)

3. Si

V (f ) = Cap(S)

ujo y

corte entonces:

es Maximal, y

es Minimal i.e. el corte de

network,

entonces

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

un ujo cualquiera:

Hip(3)

V (g) Cap(S) = V (f ) f
Similarmente, si

es maximal

es corte tenemos que:

Cap(T ) V (g) g
En particular elijo como ujo a

y me queda:

Hip

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

19

es minimal

2.3. Teorema: Max-Flow Min-Cut


En todo network el valor de todo ujo maximal es igual a la capacidad de todo corte
minimal, es decir si

es maximal

Demostracin: dado

sS

maximal

13

: V (f ) = Cap(S).
construyamos S recursivamente
corte

Si

x S, y + (x) : f (xy) < C(xy)

Si

x S, y (x) : f (yx) > 0

entonces agregamos  y  a

entonces agregamos  y  a

S.

S.

es el conjunto de vrtices que revisamos tratando de obtener un camino

aumentante de

as:

por denicin.

Es decir
Si

t.
S

estuviera en

habra un camino aumentante de

t.

Por el lema del camino aumentante podramos construir un ujo

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:

Por el lema anterior:

Si

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

x S f (xy) = C(xy)
y 6 S

xy E

Si

V (f ) = Cap(S)

porque sino hubieramos agregado a y en algn momento.

Def

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

xS


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

yx E

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

Corolario

14

: Ford-Fulkerson es

correcto i.e. si el output es un ujo

f,

entonces

es

maximal.
Prueba: el algoritmo aumenta a partir del ujo 0 usando caminos aumentantes hasta
que no encuentra ms caminos.
Sea

el ujo obtenido all.

13 Todava no demostramos que exista.


14 De la demostracin.

20

< F F >15
f entre s y t.

Cuando
para

intent aumentar

no pudo, entonces

S.
V (f ) = Cap(S)

camino aumentante

Los vrtices que se buscaron formaron un corte

16

Por la prueba del teorema

, tenemos que

entonces

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

1+ 5
2
Donde: r =
es raz de: P (r) = r + r 1
2
Observacin:

1 r = r2
r r2 = r3
Satisface:
Corramos

1 > r > r2 > . . . > rk > rk+1

<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 Denotaremos as al algoritmo de Ford-Fulkerson.


16 Max Flow Min Cut.

21

: r x3 y 3 : r 2

...

< F F >

no termina, ms an si

fi

son los ujos intermedios:

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

ri r

i=0

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

Pero el ujo maximal es:

1002,

mandando

st = 1000.

Observacin: si las capacidades son enteras entonces como el primer valor del ujo es

0 Z,

y aumenta por:


 = mn{i } : i =

Entonces

C f
Z
f

ser un entero y los ujos intermedios tambin.

f1 , f2 , . . . V (fi+1 ) V (fi ) + 1.
Como hay cota superior, como por ejemplo: Cap({s}), en algn momento debemos parar.
Es decir si las capacidades son enteras < F F > siempre termina, inclusive cuando
termina sabemos que el ujo que devuelve es entero, sumado al hecho de que < F F >

Si les llamamos

termin, sabemos que ese ujo es maximal. Y llegamos a demostrar el

Teorema de la

integralidad: si las capacidades son enteras entonces existe un ujo maximal entero.
Ejemplo

? A >>
>>


>>


>>



s?
?t
??
??
??
? 

AB : 1, las
< F F >:

Capacidades:
Corremos
1.

s, A, B, t : 1

2.

s, B, A, t : 1

dems:

106

Luego repetimos los pasos:

(1 2) 2 106

veces, pero vamos a terminar en algn

momento.
Anexo: recordemos la notacin
entre

(u, v)

que referencia la longitud del menor camino

v.

22

Lema: sea

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
Luego

(z, x) = k + 1

N ivelT (z) = j > k + 1


un camino de longitud mnima entre

de la forma:

x = x0 , x1 , . . . , xk , xk+1 = z
x = x0 , x1 , . . . , xk
N ivelT (xk ) = k
Entonces

es de longitud mnima entre

H.Ind

xk (x, 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

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
17

Teorema: la complejidad

de

<EK >

O(nm2 ).

es

Prueba:
Supongamos que
El paso

<EK >
fk

crea ujos intermedios:

O = f0 , f1 , . . .

es el paso que crea

Deno:

dk (x) =

distancia entre

bk (x) =

distancia entre

en el paso
en el paso

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

Sea

Queremos ver que


Si

A 6=

A = ,

ya que para

es similar.

n
o
A = z V : dk+1 (z) < dk (z)

supongamos que

tomamos

qA

tal que

no y lleguemos a un absurdo.

dk+1 (q) dk+1 (z) z A (1)

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
(El camino existe pues (2) dk+1 (q) < ).
Sea x = xr1
Tenemos: dk+1 (x) = r 1 = dk+1 (q) 1 < dk+1 (q)
Como

dk+1 (x) < dk+1 (q)


dk+1 (x) < dk+1 (q) x 6 A
(En otras palabras, como

est antes que

Luego como

17 Recordando que:

n = |V |

q,

24

q.

(3)

por (1)

no puede estar en A)

x 6 A dk (x) dk+1 (x)

m = |E|.

(4)

Diremos que un lado

(u, v)

Est disponible
Supongamos que

si:

fj1 (uv) < C(uv)





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

Es Forward con
Es Backward

est disponible en un paso

(x, q)

en el paso

k?

s entonces:

dk (q) dk (x) + 1
(4)

dk+1 (x) + 1
(3)

= dk+1 (q)
Contradice (2)

Por lo tanto

xq

no est disponible en el paso

Absurdo!

k,

Entonces lo usamos para el otro lado en el paso


Como estamos usando

pero

k,

s lo est en el paso

i.e.

(q, x)

< E K > los caminos aumentantes


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

k + 1.
k.

se us en el paso

son de longitud mnima.

(3)

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

k , antes de poder ser crtico otra vez


L > k el paso donde se usa la prxima vez para

dk (z) = dk (x) + 1 ?

se vuelve crtico en el paso

debe ser usado en la otra direccin, sea


el otro lado.

Pues estoy en

<EK >

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

haya aumentado en por lo menos

2.

Veces que un lado puede volverse crtico

n1
2
Complejidad de cada bsqueda

= O(n)

Exactamente sera:

BF S +

Aumento

= O(m) + O(n) = O(m)

En cada aumento al menos un lado se vuelve crtico.


Hay

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

Siempre existe un ujo maximal.

26

<EK >

2.4.2.

Ejemplo de Edmonds Karp

Capacidades

Caminos

sA:20

s, A, B, t : 10

Primer Camino:
s

sC:20

20

20

10

10

10

10

s, A, I, t : 3

Segundo Camino:
A

10

20

10

10

10

10

10

10

10

10

10

AE:3

AF:10

s, C, D, t : 10

Tercer Camino:
s

20
AB:20
s

AI:3

Cuarto Camino:

s, A, B, I, t : 7

10

10

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

Quinto Camino:
s

CK:10

10

10

10

s, C, K, I, B, D, t : 2
B

Dt:22

EG:10

s, C, K, I, A, E, G, D, t : 3

Sexto Camino:
s

EH:10

FG:10

GD:3

Sptimo Camino:
s

HD:10

s, C, K, I, B , A, F, G, E, H, D, t : 3

It:10
Jt:2

Octavo Camino?: No llega a


s

KI:10

27

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


Capacidad del corte S

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

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

= f ( sa) + f ( sc )
= 20 + 18 = 38
2.4.3.

Pseudo-Cdigo de Edmonds Karp

1 EK( Network N)
2 {

// Flujo
// Valor del Flujo
S = V ; // Corte
while ( t S ) { // mientras el vertice t este en el corte
// buscar camino y aumentar
Q = new_queue ( S ) ; //Crear cola
E [ x ] = x V ;
S = { s } ; // corte

F = 0;

v = 0;

5
6
7
8
9
10
11

while ( h e a d ( q ) 6=

12

t ){

x = head ( q ) ;

13

Forward_search ( x ) ;

14

Backward_search ( x ) ;

15

dequeue ( q ) ;

16

if

17
18

21

S){

Aumentar_flujo ( ) ;

19
20

(t

//saco x de la cola

}
}

return

// flujo , valor , corte

(F , v , S )

22 }
23

24 F o r w a r d _ s e a r c h ( v e r t i c e
25 {
26
27

x)

for ( q + (x) && q 6 S ) {

i f ( f ( xq ) < C( xq ) ) {

//Agregar q a Q
//Ancestro

28

e n q u e u e (Q, q ) ;

29

S = S

30

A[ q ]

= x;

31

E[ q ]

= min {E( x ) ,C(

32

b[q]

= 1;

33
34

{q } ;

xq )

// forward

F(

xq ) } ;

35 }
36
37
38
39

28

40
41 B a c k w a r d _ s e a r c h ( v e r t i c e
42 {
43
44

x)

for ( q (x) && ( q 6 S ) ) {

i f ( f ( qx ) >0) {

//Agregar q a Q
//Ancestro
//Backward

45

e n q u e u e (Q, q ) ;

46

S = S

47

A[ q ]

= x;

48

b[q]

E[ q ]

= min {E( x ) , F (

49
50

{q } ;

1;

qx ) } ;

51

52 }
53
54 Aumentar_Flujo ( )
55 {

// pivote

56

p = t;

57

58

v = v +

= E( t ) ;

while (

59
60

;
6=

s ){

q = a[p];

if

61
62

( b [ p ] == 1 ) {
f(

qp )

63

} else {

64

f(

65

pq )

= f(

= f(

qp )

//FORWARD
+

;

pq )  ;

66

p = q;

67

68 }

2.5. Algoritmos Tipo Dinic


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

< E K >, agregando los vrtices y lados


correspondientes excepto que en < E K > cuando p encuentra un q que ya est, no lo
agrega, mientras que ac a veces s, i.e. supongamos que estamos revisando p y hallamos

q + (p) con f (pq) < C(pq) q (p) : f (qp) > 0, pero que q ya est en el network
auxiliar, entonces agregamos un lado pq al network auxiliar si el N ivel(q) = N ivel(p) + 1.
Denicin: un ujo G se dice bloqueante o saturante si para todo camino:

BFS de caminos aumentantes, como en

s = x0 , x1 , . . . , xr = t
Dado

ujo en

con

ujo en un network auxiliar denotemos por:


(f g)(x, y) =

(xi xi+1 ) E i : G(xi xi+1 ) = C(xi xi+1 )

f (x, y) + g(x, y)
f (x, y) g(y, x)

29

Forward
Backward

2.5.1.

Esquema general Tipo Dinic

1 Dinic ()
2 {
3

f = 0;

S t o p = NO;

while ( S t o p

5
6

== NO) {

// construir Network a u x i l i a r a partir de f


H a l l a r _ b l o q u e a n t e (NA) ; //busco un f l u j o bloqueante en NA

NA = New_Na( f ) ;

if

7
8

(t
g =

f = f

NA) {

} else {

10
11

g;

S t o p = S ;

12

13

return

14

f ;

15 }

Teorema
La distancia en NA

18

sucesivos aumenta, por lo tanto hay a lo sumo n, NA's.

Demostracin:

0
Sea A un NA y A el siguiente NA, denotamos con
0
en A .
0
0
Como A y A se construyen con BFS

la distancia en A y

la distancia

Queremos ver que vale el  <.


Sea

s = x0 , x1 , . . . , xr = t

Caso 1:

un camino en

A0 .

i {1, . . . , r 1} : xi 6 A
(t) (xi )
0 (xi )
= i < r = 0 (t)

(10)
(11)

( 10) Sino lo hubiera agregado.


( 11) Por

<EK >
(t) < 0 (t)

Caso 2:

xi A i

Como antes de pasar a

A0

debemos saturar todos los caminos de A, se sigue que


A0 .

es camino en A, como xi A i i : xi xi+1 6 A

ningn camino de A es un camino de


Luego:

s, x1 , . . . , xr1 , t

no

Y tomemos el primer tal

i.

18 NA: networks auxiliares.

30

Caso 2-a:
Como

(xi+1 ) < i + 1

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

(12)
(13)

?
<EK >

(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

Caso 2-b:

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
porque no est disponible en

xi xi+1 A0 entonces se us para el


N ivel(xi+1 ) = i + 1, y N ivel(xi ) = i.

Pero
pues

N,

xi xi+1 6 A

i.e. es Forward saturado o Backward vaco.

otro lado en A, es decir:

Corolario: si un algoritmo tiene complejidad

O(b)

NA, entonces la complejidad del algoritmo completo es

xi+1 xi A Absurdo

para hallar ujo bloqueante en el

O(n b).

Dinic = Algoritmo tipo Dinic + Greedy DFS para hallar ujo bloqueante.
2
A simple vista sera: Complejidad(Dinic) = O(nm ) = Complejidad(< E
Parecera que no ganamos nada.

Pero veremos que en realidad Complejidad(Greedy en NA)

Tendremos

es

Complejidad(Dinic) = O(n2 m)

31

= O(nm).

K >)

2.5.2.

Ejemplo de Dinic

Ejemplo: Aplicar Dinic al siguiente Network.

Inicial
sA:8
sC:7
sD:10
sE:12
AF:4
AG:3
AI:8
BI:2
BJ:2
CG:2
CH:3
CJ:5
DF:4
DG:2
EF:3
EG:5
EH:4
Ft:7
Gt:5
GB:4
Ht:4
It:9
Jt:15

Primera Modicacin
sA:0
sC:0
sD:7
sE:11
AF:0
AG:0
AI:7
BI:2
BJ:2
CG:0
CH:0
CJ:3
DF:1
DG:2
EF:3
EG:5
EH:3
Ft:0
Gt:0
GB:4
Ht:0
It:8
Jt:13

caminos (4)
sAFt:4
sAGt:3
sAIt:1
sCGt:2
sCHt:3
sCJt:2
sDFt:3
sEHt:1

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

Segunda Modicacin (nal)


sA:0
sC:0
sD:4
sE:1
AF:4
AG:3
AI:0
BI:1
BJ:2
CG:1
CH:2
CJ:0
DF:0
DG:0
EF:0
EG:0
EH:1
Ft:0
Gt:0
GB:1
Ht:0
It:0
Jt:8

Caminos (6)

sD F AIt : 1

sD GAIt : 2

sE F AIt : 3

sE GAIt : 1
sEGBIt : 1
SEGBJt : 2

SE GCJt : 1

sE HCJt : 2

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

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

A
t,

el ltimo.

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 NA's sean ms largos, en este caso los primeros
tenan

2.5.3.

de largo y los caminos del segundo network auxiliar tenian un largo de

Pseudo Cdigo algoritmos Tipo Dinic

1 D i n i c ( Network Na ) {
2

g = 0;

// l a b e l 2 , pivote
i f ( p 6= t ) { // l a b e l 1

p = s;

i f ( + (p) 6= ) {

5
6

avanzar ( ) ;

goto 1 ;
} e l s e i f ( p 6= s ) {

7
8
9
10
11
12

retroceder () ;

goto 1 ;
} e l s e return
} else {

13

g;

Incrementar_flujo () ;

goto

14
15

// Parte Bloqueante , Version con Goto

2;

16 }
17
18 D i n i c ( Network Na ) {
19

g = 0;

20

E( s ) =

21

continuar = 1;

22

\\

Parte

Bloqueante

while ( c o n t i n u a r ) {

23

p = s;

while ( p 6= t && c o n t i n u a r ) {
i f ( + (p) 6= ) {

24
25
26

Av anz ar ( ) ;

} else

27
28

i f ( p 6=

s ){

Retroceder () ;

} else {

29
30

continuar = 0;

31

32

if

33
34

( p == t ) {
Incrementar_flujo () ;

35

36

37

Return

38 }
39
40
41
42
43
44

33

, Version

goto

less ;

6.

45
46

// Pre p tiene vecino

47 A van zar ( p i v o t e

p)

+ (p)

48

Tomar q

49

A( q ) = p ;

50

E( q ) = min {E( p ) ,C(

51

p = q;

// ancestro
de qes p

pq )G( pq ) } ;

52 }
53
54

// Pre p tiene vecino

55 R e t r o c e d e r ( p i v o t e

p)

56 {
57

Borrar

58

p = A( q ) ;

+ (A(p))

de

59 }
60
61 I n c r e m e n t a r _ F l u j o ( )
62 {
63

64

q = t;

65

= E( t ) ;

while ( q 6= s ) {

66

p = a(q) ;

67

G(

68

if

69

pq )
(G(

= G(

pq )

Borrar

70

pq )

pq ) ) {
+ (p)

== C (
q

de

;

71

72

q = p;

73 }

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

O(n m).

plejidad del paso bloqueante es


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:

Si

X = I:

Cada

borramos un lado.
borramos al menos un lado.

borra al menos un lado

hay

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

Complejidad(X)

Complejidad de

hay

vrtices en el camino

s, . . . , t.

= O(n)

A = O(1)

Complejidad(A
. . A} X) = O(r) + O(n)
| .{z
r

Como cada Avanzar() mueve el pivote un nivel ms cerca de

Avanzar() antes de un

o un

entonces hay a lo sumo

I r n.

Complejidad(A . . . AX) = O(n) + O(n) = O(n)


(1) + (2)

Complejidad(Paso Bloqueante de Dinic)

35

= m O(n) = O(n m)

2.6. Algoritmo Wave de Tarjan


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

Preujo es como un ujo sin la condicin de balanceo.

En el caso de Wave

19

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.

Pseudo Cdigo de Wave

1 Wave ( ) {
2

i n i c i a l i z a r () ;

olaForward ( ) ;

olaBackward ( ) ;

while (N

5
6

!=

2) {

olaForward ( ) ;

olaBackward ( ) ;

return

g;

10 }
11
12

i n i c i a l i z a r () {

13

g = 0;

14

(x 6= s) {

15

B( x ) = 0 ;

16

D( x ) = 0

17
18

A( x ) =

//No bloqueado
//Desbalanceo
// subconjunto de aquellos que le mandaron f l u j o a x

19
20

D( s ) = 0 ;

21

N = 1;

22
23
24
25
26

(x + (s)) {

G( sx ) = C( sx ) ;

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

D( x ) = C( sx ) ;

27

N++;

28
29

// #Vertices balanceados

A( x ) = { s } ;
}

30 }
31
32 o l a F o r w a r d ( )
33 {
34
35

for ( x = s +1;
i f (D( x ) >0)

36
37

To

; t 1) {

//Orden BFS()

ForwardBalance ( x ) ;
}

38 }

19 Wave: ingls, ola.

36

39
40 o l a B a c k w a r d ( )
41 {
42
43

for ( x = t 1
i f (D( x )>0 &&

44
45

DownTo

s +1) {

B( x ) == 1 )

//Orden BFS()

BackwardBalance ( x ) ;
}

46 }
47
48 B a c k w a r d B a l a n c e ( v e r t i c e
49

x){

while (D( x ) >0) {

50

Tomar y

51

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

A( x ) ;

m;
m;

52

g ( yx )= g ( yx )

53

D( x ) = D( x )

i f (D( y )

54
55

== 0 ) {

N++;

56

57

D( y ) = D( y ) + m;

i f (G( yx )

58
59

== 0 ) {

A( x ) = A( x )

60

{y } ;

61

62

N;

63 }
64
65
66 F o r w a r d B a l a n c e ( v e r t i c e
67

while (D( x )>0

68

i f (B( y )

== 1 )

+ (x) = + (x)

70

{y}

} else {

71

x){

(+ (x) 6= ) ) {

+ (x) ;

Tomar y

69

&&

72

m = min {D( x ) ,C( xy )

73

G( xy ) = G(

74

D( x ) = D( x )

i f (D( y )

75
76

xy )

+ m ;

== 0 ) {

N++;
}

78

D( y ) = D( y ) + m;

79

A( y ) = A( y )

{x } ;

i f (G( xy ) == C( xy ) ) {
+ (x) = + (x) { y }

81
82

83

86
87
88

80

85

G( xy ) }

m;

77

84

}
}

i f (D( x ) >0)
B( x ) = 1 ;

else

//Bloqueamos x

N;

89 }

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
2
es O(n ).
Sea

()t partes del algoritmo en donde se satura totalmente un lado o se vaca totalmente

un lado.
Y sea

()p

donde se manda o devuelve parcialmente ujo.

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


Analicemos primero la

Compl(W ave_bloqueante)p

Cada ola Forward, salvo quizs la ltima bloquea al menos un vrtice nuevo.

Hay a lo sumo

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

Compl(ola F orward)p = O(n)

(2)

Luego:

(2) y ? ? Compl(W ave_bloqueante)p = O(n2 )


Ahora analicemos

Compl(W ave_bloqueante)t .

Cada vez que un lado se satura completamente no puede volver a saturarse, pues si

el lado es xy lo quisiera volver a saturar debera primero hacer que  y  le devuelva


el ujo a  x.
Pero esto slo puede pasar si  y  est bloqueado y en ese caso  x no le puede
mandar ms ujo, en particular no lo puede volver a saturar.
Similarmente, un lado

xy

slo se puede vaciar totalmente una vez porque slo puede

hacerlo si  y  est bloqueado.

#Saturamientos + #V aciamientos 2m
Compl(W ave_bloqueante)t = O(m)
38

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


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

2.6.3.

Ejemplos de Wave
Aplicar Wave al siguiente Network Auxiliar

sA:8
sC:7
sD:10
sE:7
AF:4
AG:3
AI:8
CG:2
CH:3
CJ:5
DF:4
DG:2

Nivel 1

Nivel 0
s

-32

8
4
1

7
5
2


10

6

7
4
60

4
8

3
5

1

3
60

2

7



11


4

7

12


13


16


18


0
0
0
7
0


4

-25

3
1

It:9
Jt:15


1

7



3

4


19


3
-19

EH:4

Ht:4

4



11


6

2


6

7

EG:5

Gt:5

Nivel 3

EF:3

Ft:7

Nivel 2

3
0
0
8
13

39

Aplicar Wave Respetando el orden alfabtico y observar que el ujo es distinto


sA:8
sC:7
sD:10
sE:7

0
0

-32

AF:4
AG:3
AI:8

CJ:5
DF:4
DG:2
EF:3
EG:5

6 8 7
64 65
61 62

67
64

64
8

63
5


4


11


4

7


0


3


2



5

7


Nivel 2


10

66

0


CG:2
CH:3

Nivel 1

Nivel 0

-27


11


6

3

1

Nivel 3
I

Gt:5
Ht:4
It:9
Jt:15

2


27

0
1

0
0
1
11

40

7


0


Importante ver que termino porque

7

12


13


16


18


25


EH:4
Ft:7

61 63 62

Outf (s) = Inf (t)

0


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

Denicin: sea

un grafo, un

rbol generador de

es un subgrafo de

que es

rbol y generador.
Es decir

es rbol generador de

1.

subgrafo de

2.

rbol

3.

generador

si:

G.

Conexo sin ciclos.

Obviamente si

V (T ) = V (G).
G

tiene rbol generador debe ser

conexo si lo es DFS o BFS dan un

rbol generador.
Repaso de rboles
Propiedad:

rbol

Demostracin: si
Si

A(q)q

A(q)

m=n1
es rbol, entonces

denota el antecesor de

para algn

q 6=

raz.

Hay

n1

DF S(T ) = T .

en DFS, todos los lados de DFS son de la forma:

lados. (uno por cada vrtice

6= raz)

Propiedad:

(1) T

Prueba:


rbol


(1) (2) y (3)

T
T

conexo y
no tiene

m=n1
ciclos y m = n 1

(2)
(3)

ya est.

(3) (1) : T

no tiene ciclos y

m=n1T

rbol

Slo tengo que ver que es conexo.

{x, y} T , supongamos que no hay un camino


En particular xy 6 E(T )
0
Sea T = T {xy}
0
Como no hay caminos en T entre x e y en T no hay
Si C fuese ciclo
Sean

Como

Entonces

es acclico

C xy

entre

ciclos.

xy T

, es un camino en

entre

41

absurdo.

y.

Conclusin: si

x, y

no tiene un camino entre ellos,

Continuando de esta forma terminamos con un

Tb

T {x, y}

sigue siendo acclico.

conexo y acclico.

T {xy} Tb

Es decir rbol tal que

   



E Tb = V Tb 1

(15)

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

Tb

(16)

es rbol

HIP.(3)
 
b E Tb |E(T )| + 1
Absurdo pues T {x, y} T

( 16) Por

(2) (1) : T

conexo y

m=n1T

rbol

Slo tengo que ver que no contenga ciclos.


Supongamos que

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

sin ciclos que sigue siendo conexo.

es rbol.















E(H) = V (H) 1 = V (T ) 1 = E(T )
Absurdo porque por lo menos quit un lado.
Denicin: dado un grafo
Un MST

20

para

G es
X

conexo con pesos en los lados, es decir

W : E(G) R0 .

un spanning tree T tal que:

W (xy)

W (xy) spanning T ree T 0

xyE(T 0 )

xyE(T )
Notacin

W (xy) = W (T ).

xyE(T )
Problema: dado

conexo, hallar un MST para

G.

3.1. Kruskal
Repetir hasta tener

n1

lados, agregar el lado de menor peso que no forme ciclo.

Se necesita una estructura de datos de conjuntos disjuntos.


1.

M akeset(x):

2.

F ind(x):

3.

U nion(A, B):

construye un conjunto

{x}.

devuelve el conjunto al cual pertenece


devuelve la unin de A y B.

20 Minimal Spanning Tree.

42

x.

3.1.1.

Pseudo Cdigo de Kruskal

1 Kruskal ( )
2 {
3
4

//

(x V ) {

Makeset ( x ) ;

//

8
9

m = 0;

11
12
13
14

//Ordenar los lados : W(E[ i ])


// cantidad de lados
// indice

Edges_Sort ( ) ;

10

//

= 1;

W(E[ i +1])

while (M

15

< N 1) {

16

A = find (x [ i ]) ;

17

B = find (y [ i ]) ;

if

18
19

(A

6=

B) {

t r e e . add ( e [ i ] ) ;

20

m++;

21

// agregar al arbol e [ i ]

Union (A, B) ;

22

23

i ++;

24

25
26
27 }

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
Si

j=0

el grafo en el paso

queda demostrado porque los vrtices desconectados siempre estn.

Hiptesis inductiva:
Supongamos que
Sea

Kj

Kj Tj

un MST

Tj : Kj Tj

MST.

e : Kj+1 = Kj {e}

Si

e Tj

e 6 Tj
En este caso, Tj {e} tiene: n 1 + 1 = n lados no
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 .

ya est pues

Kj+1 Tj

Por lo tanto supongamos:

43

es rbol.

Sea

un lado de

que no est en

Kj+1 (f Kj+1

es acclico).

Tj+1 = (Tj f ) {e}


= (Tj {e}) f
Como

Tj+1

es un ciclo: y

f C (Tj {e}) f

es conexo y tiene:

sigue siendo conexo.

n1+11=n1

lados

Tj+1

es un rbol.

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}
Como

rbol

Ya que

Kj Tj

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
Como Tj es MST
3.1.3.

tambin.

Complejidad de Kruskal

Volviendo al pseudocdigo:

= O(n)
= O(m log(m)) = O(m log(n2 )) = O(2m log(n)) = O(m log(n))
= n (2 Compl(F ind) + Compl(U nion))
Como en general

>
Compl(Kruskal) = O(m log(n))

3.1.4.

Kruskal Delete

Repetir(?) hasta tener

(?)
3.1.5.

n1

lados.

Borrar el lado de mayor peso que no desconecte el grafo.

Complejidad Kruskal Delete

No demostraremos el orden pero diremos que la complejidad es:

44

O m log(n) (log (log(n)))3

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

regin

con otro vrtice, creando una

luego ir agregando el lado de menor peso que conecte

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 {

(p V ) {

3
4

Costo [ p ]

Vecino [ p ]

= NULL ;

7
8

Costo ( x ) = 0 ;

M = 0;

10

Aux = V ;

11

//FALTA CASO BASE

12
13

while (m

14

< n 1) {

//pre : costo (p)< costo ( q )

15

q Aux

(q (p)) {

16

if

17

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

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
Si

Pj

es el rbol en el paso

j = 0:

j,

Pj+1 Tj

une

Como

Pj
Tj

con

ya est.

De lo contrario existe

M ST Tj : Pj Tj

Trivial.

Supongamos que vale para


Si

probaremos que

induccin.

e Pj+1 : e 6 Tj

(y de hecho, ser

Pj+1 = Pj {e}

V Pj

es Spanning Tree

debe conectar

46

Pj

con

V Pj .

).

Sea

Como

un lado en

Tj

que conecte estas dos regiones.

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

3.2.3.

es un MST que contiene a

Pj+1 .

Ejemplo de Prim

A
B
C
D
E
F
P rim(A),

3
1
3

B
5

1
4

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

Mtodo Grco:
(1)

_E

(2)

A
3

_E

(3)

A
3

D
(4)

A
3

_E

(5)

D


_F

A
3

_E

_F

_C

_E

_F

Prim(A), Mtodo Analtico;

1)

B
(5, A)

C
(, )

D
(3, A)

(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

O(1)
O(n)

Union es
Find es

Recordemos que Kruskal hace:

2m

Finds() y

n1

Unions().

O(mn) + O(n) = O(nm)


Como

mn >

m log(n)
| {z }

no sirve.

Ordenar los lados

3.3.2.

Union Find con Representantes

1
2 Makeset ( x ) {
3

R( x ) = x ;

//O(1)

4 }
5
6 Find ( x ) {
7

return

// O(1)

R( x ) ;

8 }
9
10 Union ( R1 , R2 ) {
11

(x V ) {

if

12
13
15

R2 ) {
R1 ;

(R( x ) ==
R( x )

14

// O(n)

}
}

16 }

Compl(Kruskal) =

O(m log(n))
|
{z
}

Ordenar los lados

Compl(Kruskal) = O(m log(n) + n2 )

+ O(m) + O(n2 )
| {z }
| {z }
m Finds

n Unions

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.

Union Find con ranking

1 Makeset ( v e r t i c e
2

(x)

Rk ( x ) = 0 ;

= x;

//Ranking
x ) { // recursivo a la cola

4 }
5 Find ( v e r t i c e

if

( (x) == x )

return x ;
e l s e return

7
8

x){

f i n d ( (x) )

9 }
10 F i n d ( v e r t i c e
11

// i t e r a t i v o

while ( y 6= (y) )

12
13

y =

return

14

(y) ;
y;

15 }
16

x){

y = x;

/ Pre :

F1

= Find ( x [ 1 ] ) ;

F2

17 Union ( F1 , F2 ) {
18
19
20
21
22

k1
k2

(F2 )

F1 ;

// cabeza del 2do apunta al primero


// cabeza del primero apunta al segundo

25

(F1 ) = F2 ;
i f ( k1 == k2 ) {
Rank ( F2 ) = k2

26

27

= Rank ( F2 ) ;

} else {

24

F1 6= F2

= Rank ( F1 ) ;

i f ( K1 > K2 ) {

23

= Find ( x [ 2 ] ) ;

+1;

28 }

Con esta implementacin:

makeset(x) = (1)
U nion = O(1);
F ind(x) = O(rank(representante(x)) O(log(n))
Teorema Find es
Corolario:

O(log(n))

Compl(Kruskal) = O(m log(n))

Demostracin:

Compl(Kruskal) =

O(m log(n))
|
{z
}

Ordenar los lados

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


| {z }
| {z }
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


En ese caso incrementa el rango de

F2

49

F2

cuando

(F1 ) == F2

Lema interno 2:

Rank(x) = k 2k

elementos por debajo de

x,

contando a

x.
induccin.

Prueba por

k=0

obvio

Supongo que vale para

k+1
Rank(x) = k + 1 alguna
si unimos 2 de rango k .

Veamos para

vez fue

y union lo subi a

Entonces la cantidad de elementos por debajo de


Lema interno 3: Hay

Finalmente

Pues sea

n
elementos de rango
2k

k,

k+1

y esto slo pasa

x 2k + 2k = 2k+1

est demostrado en los lemas.

Rango(x) log(n) x

el mayor rango

por lo menos un elemento de rango

k.

n
2k

2k n
k log2 (n).

Qu pasa si los lados vienen ordenados o se pueden ordenar

21

en O(m)?

Se puede usar Path compresion


Solo cambia Find
1 Find ( x ) {
2

i f ( (x) 6= x ) {
(x)

3
4
5

= F i n d ( (x) ) ;

return (x) ;

6 }

El anlisis es ms complicado, cada

F ind()

puede ser

O(log(n))

Se puede ver:

Teorema: la complejidad de

Esencialmente:

O log (n) = #

O(m) n

Finds

+n

Unions, est acotado por



O m log (n)

razonable.

de veces que hay que aplicar

log

para llegar a algo

{3,4}

{5,. . . ,16}

16
{17,. . . ,2 }

16
65536
{2 +1,. . . ,2
}

log(n)

21 Bucket sort.

50

4. Matchings
Dado un grafo

G, un matching en G es un subgrafo M

tal que el grado en

de todos

sus vrtices es 1.
Un matching es

perfecto si cubre a

G,

es decir:

V (M ) = V (G).

G es bipartito.
G = (X Y, E) asumimos que X
pq E p X, q Y

De ahora en ms supondremos que


Cuando escribamos
Es decir:

Problema: hallar un matching perfecto en

G,

son las partes.

o en su defecto uno maximal (con la

mayor cantidad de lados posibles).

4.1. Transformacin del problema de Matching a uno de ujo


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

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

S no
no

S
E = sx
xy : y Y
yt

xX
yY
xy E

Dado

1.

La capacidad de todos los lados es :


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

V (fmax ) = #lados.

Dicho de otra manera: existe una correspondencia entre matchings maximales en G


(bipartito) y ujos maximales enteros en N.
Prueba: dado un ujo entero
construimos un ujo entero

construimos un matching

fM .
Vf =

Dado

sea

Mf

Mf = (Vf , Ef ) :

{x, y}

xyEf

Ef = {xy E : f ( xy) = 1}
Hay que ver que

Mf

51

es matching.

y dado un Matching

Observemos que por denicin de


Si

Caso 1:

zX

Entonces

como

Mf

Vf

tenemos que

z : Mf (z) 2

no es matching

Mf (z) 2

Mf (z) 1 z Vf

entonces

y1 6= y2
zy1 , zy2 Ef

y1 , y2 :

f (zy1 ) = f (zy2 ) = 1
Outf (z) 2

Pero Inf (z) = f ( sz ) 1

Caso 2:

z Y x1 , x2 :

Entonces

Absurdo.

x1 6= x2
x1 z, x2 z Ef

f (x1 z) = f (x2 z) = 1
Inf (z) 2
Pero

Concluimos que

Mf

Outf (z) = f ( zt ) 1

Absurdo

es matching.

Dado ahora un Matching M sea

fM

denido as:

fM ( xy) =

fM ( sx) =

1
0

Si

Si no

1
0

Si

1
0

Si

fM ( yt ) =

xy E(M )

x V (M ) X

Si no

y V (M ) Y

Si no

Como M es matching, est claro que:


Mf (z) = Outf (z) =
Adems est claro que:

MfM = M

y que:

52

1
0

Si
Si

f Mf = f

z V (M )
z 6 V (M )

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}
= |Vf X|
= |EMf |

por ser

un ujo

Por lo tanto ujos maximales enteros corresponden a matchings maximales.

Denicin: Sea
Denicin: Si
si cubre a X, i.e.

S V (S) =

G = (X Y, E)
X V (M ).

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

zS
es bipartito, un matching se dice completo de

4.2. Teorema de Hall


Sea

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



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:


Extenderlo

O(n)

O(n2 ).

veces.

Nos queda:

O(n3 )

4.4. Grafos con Peso


Sea G = (X Y, E) grafo bipartito, con |X| = |Y | = n y
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

sea

una matriz de costos

2. Mimizar la suma.

23

El problema 1 a veces es llamado el: bottleneck problem

, se resuelve con el algoritmo

de Gross y es bastante simple.

4.4.1.
Dado

Algoritmo de Gross

C:

1. Ordenar los

Ci,j

como :

b1 < b2 < . . . < bk (k n2 )

2. Tomar, para r= 1, . . . , k:


(Ar )i,j =
3. Hallar

r : Ar

1
0

Si

Ci,j br

Si no

tenga Matching perfecto y

Ar1

(r es el umbral)

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 que minimice el Mximo
I

II

III

IV

VI

VII

15
2

10

100

e2

10

10

10

10

10

10

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

Intento extenderlo

II

III

IV

VI

VII

II

III

IV

VI

VII

?
?

II

III

IV

VI

VII

II

III

IV

VI

VII

II

III

?

E
Extiendo el Matching
I

II

III

IV

VI

VII


1


II


III


V
?

IV

?

55

?

?

?


II


III


V
?
?

II

III

IV

VI

VII


1
1

II

III

IV

VI

VII


1

E
E

E
E

I

II


III

V
?

IV

?

II

III

IV

VI


1

I

II


III

V
?

IV

?

II

III

IV

VI

VII


1

III

?

E
E

E
E

II

III

IV

VI

VII


1

G
C

E
E

E
E

I


II


III

V
?

IV

?

Obtengo:
Filas etiqueteadas.

(S) = {II, III, V } =

Luego

Columnas etiqueteadas.

|(S)| = 3 < 4 = |S| @

Matching Perfecto.

Entonces tengo que subir el umbral.

56


III


V
?
II

I

II


III

V
?


IV


?


?


S = {C, D, E, G} =

VII

I

II


III

V
?


IV

?



III

V
?


Umbral 9

II

III

IV

VI

VII

Busco Matching
I

II

III

IV

VI

VII

II

III

IV

VI

VII

II

III

IV

VI

VII

II

III

IV

VI

VII

II

III

?

Extiendo el Matching
I

II

III

IV

VI

VII


1

Existe Matching

I


II


III

V

?

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


0
2
Matching de 1 s con umbral e .

57

8,

slo basta ver si hay

?


I

II


III

V

?


Umbral de

e2
I

II

III

IV

VI

VII

Busco Matching
I

II

III

IV

VI

VII

II

III

IV

VI

VII

?

?
?

II

III

IV

VI

VII

II

III

IV

VI

VII

II

III

0
0

?

Extiendo el Matching
I

II

III

IV

VI

VII


1


II


III


58

V
?
?

?

?



II


III

V
?

?


I
1

II
1

III
0

IV
1

V
1

VI
1

VII
1

B
C
D
E
F
G

1
0
1
0
1
0

1


1
1
1
1
1
0

1
0
0
0
1
0

0
0
1
1
1
1

1
0
0
0
1
0

B


G


B


II
1

III
0

IV
1

E

E


B


I
1

E

E


1
0
0
0
1
0
B

V
1

VI
1

VII
1

B
C
D
E
F
G

1
0
1
0
1
0

1

1
1
0
1
1

1
1
1
1
1
0

1
0
0
0
1
0

0
0
1
1
1
1

1
0
0
0
1
0

B

D


G

C


E

E


B


E

E


B


1
0
0
0
1
0
B

1
1
0
1
1

I
II


III

V

?

III
V

?

?

I
1

II
1

III
0

IV
1

V
1

VI
1

VII
1

B
C
D
E
F
G

1
0
1
0
1
0

1


1
1
1
1
1
0

1
0
0
0
1
0

0
0
1
1
1
1

1
0
0
0
1
0

B


G


E

E


B


B


III
0

IV
1

E

E


1
0
0
0
1
0
B

V
1

VI
1

VII
1
1
0
0
0
1
0
B
A

1
1
0
1
1

D
I
1

II

 

III
III

V
V


?
?

B
C
D
E
F
G

1
0
1
0
1
0

1

1
1
0
1
1

1
1
1
1
1
0

1
0
0
0
1
0

0
0
1
1
1
1

1
0
0
0
1
0

B

D


G

C


E

E


B


E

E


B


II

?

C
II
1

Extiendo el Matching
I

II

III

IV

VI

VII


1

I



1


II


III



III



1

V
?

V
?

?


II


B
D

G
C

E
E

B
A

E
E

B
A

2
Hall un Matching que minimiza el mximo: (e )
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)

existe matching completo de

grafo bipartito entonces:

Y |S| |(S)| S X

Prueba:

Obvio pues el matching induce una funcion

por esa funcin est incluida en

: 11

de X en Y y la imagen de S

(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

24

Cuando termine habr las sin Matchear

X,

Columnas

Y)

S0 = Filas sin Matchear.


T1 = (S0 ) son las columnas etiqueteadas por
S1 = Filas etiqueteadas por las columas de T1
T2 = columnas etiqueteadas por las las de S1 .
No necesariamente T2 6= (S1 ).
Pero si tenemos que T1 T2 = (S0 S1 )
Sea

las las de

S0

= Filas etiqueteadas por las columnas de

Tj

Sea

Y as seguimos:
Nos queda denido:

Sj

Tj+1 = las columnas etiqueteadas


Sj = las Matcheadas con Tj .
Si Tj 6= Sj tambin.

por las las de

Sj

El algoritmo se detiene sin extender el matching (por hiptesis).


Por lo tanto se detiene en un

con

Tk+1 =

Observacin:
1.

|Sj | = |Tj | j

2.

(S0 . . . Sj ) = T1 T2 . . . Tj+1

Sea

Pues

Sj

son las las Matcheadas con

Tj

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)

( 17) Por las observacin 2.


( 18)

Tk+1 =

( 19) Unin Disjunta.


( 20) Por las observacin 1.

4.6. Teorema del Matrimonio


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

G = (X Y, E) : E 6= ,
W V con W X W Y

Prueba: sea
Dado

regular.

Denimos:

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

regular.

W Y
Observemos que por ser G bipartito: Ex = E = Ey
|Ex | = |Ey | |X| = |Y |
Como 6= 0 |X| = |Y |
Similar prueba si:

Por lo tanto para ver si existe un matching perfecto en


matching completo de

Por el teorema de Hall basta entonces con ver:


Sea entonces

G,

basta ver que existe un

Y.
|S| |(S)| S X

SX
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 = m
n
Ci,j

i=1
j : ij M
La solucin a este problema usa una idea sencilla: sea
obtiene de

una matriz de costos que se

restndole o sumndole una constante a una la o columna.

Entonces sea
Si a la

e
C

Mmn (C)

un Matching que minimiza la suma.

Ci,j
Si i 6=
i

Ci,j k Si i = i

Ci,j k , similar para


la
i le

k,

resto una constante

n
P

Est claro que:

ei,j =
C

n
P

i=1
j : ij M

las columnas.

i=1
j : ij M

Mmn (C)
Segunda Observacin: si

i.e.

ei,j
C

tambin minimiza

e
C

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 la inteligentemente hasta hallar un matching de ceros.
Ese matching automticamente minimiza la matriz original.

4.7.1.

Ejemplo de Matching que minimiza la Suma (A ojo)


I

II

III

IV

10

11

10

10

Restamos a cada la su mnimo

Restamos a cada columna su mnimo

II

III

IV

II

III

IV

Matching de

00 s.

Restamos 5 a la tercer la.


I

II

III

IV

-5

Existe Matching Pero tengo un nmero Negativo.

62

Sumamos 5 a la columna I
I

II

III

IV

14

Restamos el mnimo a cada la.

Hall un Matching de
I

II

III

IV

14

II

III

IV

14

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 la a cada la.
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.

S : |S| > |(S)|,


columnas de (S)

Sino tomar
a las

y restarle un cierto

a las las de S y sumarle

Cul m?
m = mn S (S)
Equivalentemente: restar

4.7.3.

S (S)

y sumar

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

S (S)

00 s.

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

3. Buscamos Matching de
I

II

III

IV

IV
2
3
6
0

00 s

II

III

IV

II

III

IV

6C

C
4. No hay matching perfecto
I

II

III

IV

6I
6

6C
Tengo

S = {A, C}

(S) = I
Con

, las las etiqueteadas.

, las columas etiqueteadas.

|S| > |(S)|

5. Calculo:

m = mn S (S)
I

II

III

IV

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

C 0 3
6
D 11 0

6C
Referencias:

S (s)
S (s)
S (S)
S (S)

No lo modico
Sumo

No lo modico
Resto

64

III
3
0
4
3

IV
0
3
4
0

6. Busco Matching de

00 S
I

a)
b)

No encuentro:

A 0
B
6
C 0
D 11

II
1
5
3

III
3

IV
0
3
4
0

4
3

Intento extenderlo:
I

II

III

IV

11

*


II

III

IV

11

II

III

IV


0

11

*


II

III

IV

11

I
Extiendo el matching

*


I
A 0
B
6
C 0
D 11

II
1
5
3

7. Llegu al Matching de

00 s:

III
3
0

4
3

IV
0

4
0

A mano
1. Tachar las de

S,

y las columnas de

(S).

2. De lo no tachado, calcular el mnimo


3. Restar de lo no tachado

m.

m.
m.

4. Sumar, a lo tachado dos veces,

4.7.4.

Complejidad de algoritmo Hungaro

Restar el mnimo en cada la:

O(n2 ).

Restar el mnimo en cada columna:


Buscar Matching inicial:

O(n2 ).

O(n2 )

Extender matching en un lado:

Paso

65

hay

O(n)

pasos.

I
*


Complejidad de cada Paso


Buscar

m,

restarlo y sumarlo:

O(n2 ).

Buscar Matching en la nueva matriz


Cuntas veces buscamos

O(n3 ).

en un paso? No sabemos

Compl(Hungaro) = O(n) O(n3 ) (No


Llammosle  cambio

de matriz a buscar el

m,

sabemos)

restarlo y sumarlo.

Lema: luego de un cambio de matriz el matching parcial que se tena no se pierde.


Prueba: la idea est en jarse dnde est el matching.

AA
BC

S
S

(S) (S)
Referencias
A: puede haber ceros.
B: No hay ceros, no hay matching.
C: Ceros del Matching.

S (S)

S (S)

no cambian.

Por lo tanto cualquier 0 de matching ah permanece.


En

S (S)

no hay ceros, por lo tanto no hay matching.

Slo queda por ver:

S (S),

donde puede haber ceros, pero ninguno del matching,

pues supongamos que hubiera uno en la columna

j,

la

i.

i 6 S, j (s).
Cuando revisamos la columna
agregado la la

a S,

buscamos el elemento del matching,

hubieramos

absurdo.

Corolario: luego de un cambio de matriz, aumenta el matching, (i.e. se termina el paso)


o bien aumenta S.
Prueba:
En

S (S) habr un nuevo cero, digamos en la columna j, al revisar la j

si est libre

extendemos el matching.
Sino hay una la

con

{i, j} M :matching,

por lo tanto agregamos la la

a S.

Entonces S crece.
Observacin:

no formaba parte de

Corolario: hay a lo sumo

S,

pues por el lema anterior

debe estar en

S.

cambios de matriz en cada paso, pues S slo puede crecer

veces.

66

Por lo tanto:

Compl(Hungaro) = n Compl(paso)
Compl(paso) =

Compl(cambiar

n
|{z}

la matriz)

+ O(n2 )

cambio de matriz

Compl(cambiar

la matriz)

= O(n2 )

Compl(paso) = O(n3 )
Compl(Hungaro) = O(n4 )
Sin embargo, siendo truquero se puede reducir la complejidad a

O(n3 ).

Compl(Hungaro) = O(n3 )
1. Cmo restar m de

y sumar

(S)

en tiempo

O(n)?

Agregamos etiquetas: cada la y cada columna tiene una etiqueta que indica cunto
se le suma o resta.
Cambiar las etiquetas es:

O(n).

Costo: en vez de chequear

if(Ci,j

== 0)

hay que revisar:

Ac suponemos que el costo de sumar y restar es


2. Cmo calcular

mn{S (S)}

Tendremos una etiqueta

en tiempo

(Ci,j ETi + ETj == 0)

O(1).

O(n)?

que por cada columna guardar el mnimo, de la inter-

seccin de esa columna con S.

{S (S)} es simplemente calcular:


mn{(y) : (y) 6= 0} = O(n) ya que (y) == 0 y (S)

Vericar el mnimo de

Y los

4.7.5.

(y)

los vamos actualizando a medida que examinamos las las de S.

EJEMPLO DEL MEJORADO (FALTA)

67

5. Cdigos de correcin de errores


En general un cdigo, sobre un alfabeto A, de longitud
En general usaremos:

A = {0, 1}.

es un subconjunto de

An .

25

Llamaremos Cdigo, a un cdigo binario de bloque .


n
Denicin: dados x, y {0, 1} la distancia de Hamming entre

es:

dH (x, y) = d(x, y) = #{i : xi 6= yi }


x {0, 1}n es: W (x) = |x| = #{i : xi 6= 0} = d(x, 0n )
d(x, y) = d(x y, 0) = |x y| (x y)i = xi yi i.e. = suma

El peso de Hamming de
Claramente:
Con

xor denido de la siguiente manera:

00=0
01=1
10=1
11=0
es decir la suma mdulo
Propiedad

2.

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

A = {i : xi = yi }, B = {i : xi = zi }, C = {i : yi = zi }.

xi = zi
xi = y i
yi = zi

Sean:
Si

i B C i A,
Aplico De morgan:

es decir

(B C) A

(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

en

Zn2

Deniciones

Br (x) = {y Zn2 : d(x, y) r}


Un cdigo

detecta

Un cdigo

corrige

Notacin:

errores si:
errores si:

C Br (x) = {x} x C
Bt (x) Bt (y) = x, y C : x 6= y

= 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

000
011
110

(C2 ) = 2

101

3.

C3 = {000000, 010101, 101010, 111111}


HH C3
C3 HHH

000000

000000

010101

101010

111111

010101
101010

111111

69

(C3 ) = 3

Teorema: sea C cdigo binario y


1. C detecta

d1

errores y no detecta

2. C corrige

b d1
c
2

errores y no corrige

d = (C)

entonces:

errores.

b d1
c+1
2

errores.

Prueba:
1. Detecta

d 1:

Recordemos que
Sea

es la menor distancia entre palabras del cdigo 

x C, y Bd1 (x) C x = y

d(x, y) 1 <
x=y
Pero x, y C
No detecta d:
Sean

x, y C : x 6= y
d(x, y) =

2. Corrige
Sea

c
b d1
2

y Bd (x) C

Como y 6= x


no

detecta d errores.

errores:

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) Ya que

x 6= y

y las dos estn en

(22)

(23)

C.

( 23) Ya que z est en las dos Bolas.


No corrige
Sean

c+1
b d1
2

errores:

x, y C : d(x, y) = d,

Entonces

tiene

d1
0
Sea e con b
c
2
0
Sea z = x e
Quiero ver que

sea

e=xy

unos.

+1

unos de estos.

z Bb d1 c+1 (x) Bb d1 c+1 (y)


2

y ya est porque justamente la in-

teseccin 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

Demostracin de

d1
c+1
2

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
Si

Suposiciones acerca del medio de transmisin


1. No se pierden ni agregan bits.

26

2. Sean:

Ei+

el evento Bit

cambia de

0 1.

Ei

el evento Bit

cambia de

1 0.

Entonces:



P Ei+ = P Ei .

3.

Ei

4.

0 < P (Ei ) = P (Ej ) <

es independiente de

Denotamos

Ei

al evento: cambia el Bit

Ej i 6= j

1
2

5.1. Cota de Hamming


Teorema: sea

cdigo de longitud

|C|

Como

que corrija

2n
1 + n + ... +

errores entonces:

n
t

Bt (x)
xC
corrije t errores, esa unin es disjunta.

Prueba: sea

A=

|A| =

|Bt (x)|

xC
Calculemos

|Bt (x)|:

Para ello denamos:

Sr (x) = {y Zn2 : d(x, y) = r}


26 Slo hay ips de bits.

71

i.

Bt (x) =

t
S

Sr (x)

unin disjunta.

r=0
t
X

|Bt (x)| =

|Sr (x)|

r=0

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

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


Luego

n ubicaciones

|Sr (0)| = nr

De las

e Sr (0)

hay que elegir las

|A| =

tiene

r 10 s

n r 00 s

donde irn los

10 s.

|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

Denicin: un cdigo se dice perfecto si

27

Recordemos que un subespacio vectorial


1.

C 6=

2. Si
3.

x, y C x y C

x C, k Z2 k x C

27 SEV.

72

es un subespacio vectorial de
se da si:

Zn2

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
Teorema: C lineal

n
o
= mn |x| : x C, x 6= 0

Prueba:

w = mn{|x| : x C, x 6= 0}
Sean x, y C : x 6= y con d(x, y) =

Sea

= |x y|
x y C y x y 6= 0, pues x 6= y w
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

Como C es lineal
Sea ahora

=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

es lineal

denotar la dimensin de

Corolario: si
Prueba: obvio pues

C.

es lineal de dimensin

k |C| = 2k

k = Dim(C) C ' Zk2 |C| = 2k

73

5.2. Matriz generadora


Denicin: una matriz generadora

G para C

es una matriz cuyas las forman una base

de C.
Por lo tanto si C es de dimesin k y longitud n y G es generadora
Kx N .
G generadora G es Kx N, con k = Dim(x) y C = EF (G)
n
k
Recordemos que: EF (G) = {x Z2 : U Z2 : x = U G}

1 0 0 1 1 1
Sea G = 0 1 0 1 0 1
0 0 1 1 0 0

de C entonces

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

es

5.3. Matriz de chequeo


Una matriz

se dice matriz de chequeo si

C = N u(H) = {x Zn2 : Hxt = 0}

Propiedad

I
|{z}
kx k

}|

{
A
|{z}

es generadora de

nk

 t
A
C n k |{z}
k

I
|{z}


es de chequeo.

nk

Todo cdigo tiene una matriz de chequeo.



EF [I A] = N u [At I]

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

Prueba: Hay que ver que

Sea

Ut
[A |I]x = [A |I]
(U.A)t
t

Entonces

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

= At U t (U A)t
= At U t At U t
=0
x N u([At I])

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

x6 = x1 x2
75

tena antes.

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

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
0

G.

en este caso

=3

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


Supongamos

=2

= 1.

Como C es lineal
Como

( < 3) = 1

x C : |x| = 1 i : x = ei 28

x C Hxt = 0

0 = Hxt = Heti = H (i)


Supongamos
Entonces
Entoces

Columna

de H.

H (i) = 0

0
0
0
1

1
1
0
1

absurdo.

= 2.

x C : |x| = 2

i,j : i 6= j : x = ei ej

0 = Hxt = Heti Hetj = H (i) H (j)


H (i) = H (j)

absurdo.

Ejemplo

Sea

1
0
H=
0
0

0
1
0
0

0
0
1
0

1
0
1
1

1
1
1
0

1
1
H
1
1

es

4x 9

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
(1)
Como H
+ H (5) = H (9)

28 Recordemos

ni columnas repetidas

ei = 0 . . . 0 |{z}
1 0 . . . 0.
i

76

(C) 3

Entonces

x = 010001001 C (C) 3
(C) = 3

Una matriz que cumple esa condicin es una matriz


Con todas las columnas posibles no nulas de altura
Entonces

C=

r (2r 1)
r.

cdigo de Hamming



1 0 1
=H=
0 1 1

orden posible.



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.


Prueba: Hay que ver
r
Donde n = 2 1



r = 2n
1+n
1 + n = 2r


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

Algoritmo para corregir


Cuando

error

H (i) 6= 0, H (j)

Supongamos que el emisor manda

xC

y el receptor recibe

e=0
Hy y = Hxt = 0 y C
Si e = e
Si

Hy t = Hxt Heti
= 0 H (i)
= H (i)

77

y =xe

con

|e| 1.

El algoritmo es:

1. Calcular

Hy t .

2. Si

Hy t = 0

3. Si

Hy t = H (i)

4. Si

Hy t 6= 0, H (i) i

Aceptar

y.
y ei .

Aceptar

hubo

errores, pedir retrasmisin.

Ejemplo:

1
0
H=
0
0
Se recibe:

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

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

x = y e6 = 011001100
z = 000011000

La palabra enviada fue

Pero si recibo

Hz t = H (5) H (6)

0
1
1
1 0 1
(i)

=
1 1 = 0 6= 0, H i
1
1
0

Hubo

errores

Por ejemplo me pueden haber mandado: 000000000 110011000


t
(i)
En el caso del Hamming Hy siempre va a ser
 0 algn
 H
El algoritmo si se usa la matriz con

H (i) =

(i)
Binario

Es ms fcil:
1. Calcular
2. Si

Hy t

Hy t = 0

3. Sino tomar

aceptar

i:

(representacin binaria

i)= Hy t

78

y acepto

y ei

Ejemplo

n = 25 1 = 31 k = 31 5 = 26
= 226

5
Supongamos que llega y = e1 e2 e11 e27 e31
5 tiene

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
y = e2 e7 e17

Si hubiese sido


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


Teorema: sea

C = N u(H) (C) = mn{j : j

errores.

Prueba:

x : |x| = (C) = d
Entonces i1 , i2 , . . . , id : x = ei1 . . . eid
Sea

0 = Hxt
= Heti1 . . . Hetid
= H (i1 ) . . . H (id )
{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
Entonces

29 LD: Linealmente dependientes.

79

29

columnas L.D. de H}

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

Denicin: un Cdigo con

=nk+1

30

se llama un cdigo MDS

5.5. Cdigos Cclicos


Denicin: sea
Denicin: un

W = w0 w1 . . . wn1 denimos Rot(W ) = wn1 w0 w1 . . . wn2


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, 100, 010, 001}


lineal: C[1] + C[2] 6 C
C = {000, 100, 011, 111}

C = {000, 110, 101, 011}

es invariante por rotacin pero no cclico ya que no es

es lineal pero no es cclico.

w0 w1 . . . wn1 w0 + w1 x + . . . + wn1 xn1


P (x), H(x) son polinomios.

Identicacin:
Denicin: si

P (x) mod H(x)


Teorema: si

tiene longitud

es el resto de dividir

P (x)

por

H(x).

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)

( 24)

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


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

(24)
(25)

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 }

w = 1010 Rot(w) = 0101


1 + x x(1 + x2 ) = x + x3 mod (1 + x4 ) = x + x3 0101

Tomo

w = 0101 Rot(w) = 1010


x + x x(x + x3 ) = x2 + x4
x2 + x4 mod (1 + x4 ) = x2 + 1 = 1 + x2 1010
Tomo

Corolario:
Sea

cclico de longitud

n,

W (x) C
Q(x) Z2 (x)

Propiedad: sea C lineal entonces

W (x)Q(x) mod (1 + xn ) C

polinomio no nulo de grado mnimo.

Denicin: si C es cclico, el nico polinomio no nulo de grado mnimo se llama el

polinomio Generador de C, y usualemente se lo denomina G(x).


Prueba:

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
g1 + g2 = 0 g1 = g2
Sean

el menor grado.

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

n, G(x) su polinomio generador entonces:


n
o
C = P (x) Z2 (x) : Gr(P (x)) n 1 y G(x)|P (x)

Teorema: sea C un cdigo cclico de longitud

Prueba:

Si G(x) dividide a P(x):

G(x)|P (x)
Como

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

clase pasada

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:

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

Sean

Entonces por

Q(x)G(x) C
R(x) = P (x) + Q(x)G(x) C
| {z } | {z }
C

por ser lineal.


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,

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

+g1 (x) + . . .

i.e.

g0 = 1

Prueba
1. Sea

P (x) : Gr(P (x)) n 1

Por el teorema anterior


Si

P (x) C Q(x) : P (x) = Q(x)G(x)

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

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

con

Gr(Q(x)) n t 1

Gr(P (x)) n t 1 + t = n 1

P (x) C


Esto da una



Gr(Q(x)) n t 1
C = P (x) : Q(x) :
P (x) = Q(x)G(x)
n
o
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
Multiplico por

1.

sabemos que es de esa manera.

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


Como

Como

G(x)

es cclico y

en

Z2 ,

que es lo mismo que sumar

0.

G(x) C Rotk (G(x)) C

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

G(x)|1 + xn

1 + xn = V (x)G(x) 1 = v0 g0 g0 = 1

Esto da origen a un mtodo para codicar:


Primer mtodo:
Simplemente dada
Tomo

m(x)

de grado

k 1.

V (x) = m(x)G(x)

Ejemplo:

G(x) = 1 + x2 + x3 : n = 7
Cunto vale

k = Dim(C)

n k = Gr(G(x)) 7 k = 3 k = 4
Por lo tanto el cdigo tiene

24 = 16

palabras.

Supongamos que queremos codicar:

m = 1011 m(x) = 1 + x2 + x3

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

Mando

1000101

84

Otra:

m = 0110 x + x2

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

gnk1
...
gnk1
..

..

g1
0
1
0
0

1
0
1
0

1
1
0
1

0
1
1
0

..

g2
0
0
1
1

0
0
1

...
...
...
.

..

. . . gnk1

0
0

0
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

En denitiva

Gr(m(x)) k 1 Gr(xnk m(x)) n 1

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


2
3
2
3
Truco: G(x) = 1 + x + x 1 + x + x 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:

mod G(x) + xnk


mod G(x) + xnk1

.
.
.
.
.
.

.
.
.
n1
mod G(x) + x

xnk
xnk1

G = ..
.
xn1
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

0
1
1
1

1
1
0
1

1
0
0
0

0
1
0
0

0
0
1
0

0
0

0
1

Es decir obtenemos la matriz G con identidad a derecha.


Una matriz de chequeo H es:

1 0 0 1 1 1 0
H = 0 1 0 0 1 1 1
0 0 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
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


Asuma que se manda
Con

|E| t,
Sean

Si

0
1
0
0

V (x)

y llega

n que corrige t errores, con G(x) =


W (x) : E(x) = V (x) W (x)

generador.

error corregible.

Si

los sndromes:

Si (x) = xi W (x) mod (G(x)) : 0 i n 1

i : |Si | t
E(x) = Rotni (Si )
= xni Si

mod (1 + xn )

Prueba de Error Trapping :

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


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

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

W (x) = V (x) + E(x)


Rot (W (x)) = Roti (V (x)) + Roti (E(x))
i
Y |Rot (E(x)| = |E(x)| t
Roti (W (x)) Bt (Roti (V (x))
| {z }
Pero

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


| {z }
| {z }
C

P (x)G(x) = Rot (V (x))


i
Entonces por y y Si (x) = Rot (E(x))
E(x) = Rotni Si
Ejemplo

G(x) = 1 + x4 + x6 + x7 + x8 : n = 15

con

t=2

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
Llega

x8

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

x9

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

(los encuadrados).

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

Denicin:

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
Denicin: un problema de decisin es un problema cuyas nicas respuestas posibles
son S o No (alternativamente 1 0).
Ejemplos

Matching: dado un grafo

nN

Primo: dado un

K-color: dado un grafo

es

tiene

es

un matching perfecto?

primo?

(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
En general, dado

xI

S I.

tenemos una medida del tamao de

En general, # de bits necesarios para representar a

|x|.
I = {G : G es un grafo nito},
N |n| = dlog(n)e = #bits de n

x,

x.

o algo ligado a eso.

Lo denotaremos
Por ejemplo si
Si I =

podemos tomar

|G| = #de

vrtices.

6.1. La clase P
P = clase de problemas de decisin tal que existe un polinomio

tal que

resuelve el problema para

xI

en tiempo


Resolver es que:
O bien en la forma  {I,S}

A(x) =

A(x) =

P (x),

y un algoritmo

O(P (x))

Si (x) = S
N o Si (x) = No
S

xS

Ejemplos:

2 color P
Matching bipartito: como Matching con instancia reducida a grafos bipartitos.

31

Vimos que Matching bipartito

6.2. La Clase NP
NP

no signica No Polinomial. (de hecho

P N P ).

NP signica: Non deterministic Polynomial.


Otra forma de denir esta clase que es la clase de problemas de decisin para los cuales
existen certicados que verican la respuesta S en tiempo polinomial.

31 Edmonds prob que Matching

P.
90

Formalmente

(I, S) N P j, t Ix J
1.

P (x)

tales que:

(Ix J, T ) P


2. Dado

xI

vale

x S y J :

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

6.3. Co-NP
Denicin:

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

Ejemplo: Primo

Co-NP

Certicado para NO una factorizacin.


(En 1976 se prob que Primo

NP) y en 2002 se prob que PRIMO

Complemento de


Es

b
(x)
=

N o Si (x) = S
S
Si (x) = N o
k-color

Certicado: dado un coloreo con

P.

(I, S) (I, I S)

NP k

colores ver que es propio es:

O(m) = O(n2 )

Observacin:
Claramente

P NP .

El problema del milln es P=NP?

6.4. SAT
Un problema importate: SAT
Una variable booleana

es una variable que slo puede tomar dos valores

Dado un conjunto de variables Booleanas:

1.

x1 , . . . , x n .

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

32

Una expresin Booleana en forma Conjuntiva Normal

, es una conjuncin ( ) de

clasulas.
Ejemplo:

(x1 x2 ) (x1 x3 x7 ) (x2 x3 x4 )


SAT es:

33

dada

en CNF:

un asignamiento de valores a las variables que la vuelva verdadera?

32 CNF: Conjuctive Normal Form.


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

91

SAT N P

: Certicacin una valuacin.

Otras formas de SAT estn en P.

DN F SAT P : 0 s
Xor SAT P : 0 s

de

de

0 s

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

Denicin: dados dos problemas de decisin


Diremos que

Polinomio

1. Calcular
2.

= (I, S) , (J, T )

se reduce a ( P ) si:
P (x) y una funcin : I J :

(x)

es

O(P (x))

x S (x)

i.e.

(x)

(x) =

S

es polinomial en

x.

((x)) =S.

Ejemplos sencillos:
Tonto y no del todo correcto:

Dada

ax2 + bx + c = 0

Dado

tR

Entonces:

es

tiene solucin

R?

t 0?

tomando

t = b2 4 a c

Otro ejemplo

Dado

P
6.4.2.

Dada A

tQ

tomando

Qnn
es

A es invertible?

t 6= 0?

Det(A) = t.

k color P SAT

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

C = C1 C2 . . . Cn

92

tal que:

Di =

xi,j xi,r

j, r
j<r
j, r = 1, . . . , k
D = D1 . . . Dn
Fi,j,l = xi,j xl,j
k
n
V
V
Fi,j,l
F =
j=1
i, l = 1
il E
Sea

Tomo
Ahora hay que probar que

B =C DF

es

O(n + m)

(G) k B es satisfactible.
k colores de G.

Sea C un coloreo propio con

Debemos construir un asignamiento de valores a las variables.

xi,j x
bi,j {0, 1}

Denimos

x
bi,j =

Debemos ver que :

1 Si C(i) = j
0 c.c.
b = B(b
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


x
bi,j con B

C
bi,j = 1 (?)
b = 1 i, j : x
b
b
B = 1 D = 1 i, !j : x
bi,j = 1 denimos 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.

Ahora sabemos que existe

N P P SAT
SAT P P = N P

Observacin: Cook prob


Corolario:

6.5. NP Completo
Denicin: un problema
1.

NP

2.

N P P

es

NP completo si:

Un ao despus de Cook, Karp di otros


hay ms de

23 problemas NP completos, en la actualidad

2000.

La clave es lo siguiente: Si

Entonces es NP Completo.

NP

Completo y

La demostracin sale del hecho que

P ,

P : N 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
Es decir dada

3-SAT (por Cook).

en CNF debemos construir polinomialmente una

tenga exactamente 3 literales por clasula y tal que

b
B

sea satisfactible

B = D1 . . . Dm : Di clasulas.
B = x1 , . . . , x n
clasula D arbitraria, deniremos una conjuncin

en CNF pero que

B0

lo es.

Supongamos que
Variables de
Dada una

de clasulas E (con ms

variables), y luego tomaremos:

B 0 = E1 E2 . . . Em

donde

94

Ei

corresponde a

Di .

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

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
Tomamos

Viceversa:
Si

{xb1 , . . . , x
cn , yb}

Tal que

c1 L
c2 yb) (L
c1 L
c2 yb) = 1
(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
L
D

tiene

i.e. cualquier

yb1 , yb2

literales.

D = L1 L2 . . . Lk
Entonces tomamos

k3

variables nuevas:

y1 , y2 , . . . , yk3

polinomial en

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
D

Supongamos ahora
Denamos:

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
Veamos la vuelta: supongamos que

b=1
E

b = 1. Supongamos que no.


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
Queremos ver que

Como

b=1
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

P 3-color.
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
Prueba: veremos que 3-SAT

Es decir necesitamos :

en

Ya damos la construccin en general, primero un ejemplo.

96

n, m

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:
G tiene:

2 + 2n + 6m vrtices, polinomial.
1 + 3n + 3m + 9m = 1 + 3n + 12m
Hay que ver

(Como

tiene tringulos

lados, polinomial.

satisfactible

(G) 3

(G) 3 (G) = 3)

97

1jm
k = 1, 2, 3

Veamos

primero:

Sea C un coloreo de G de
variables tal que:

colores queremos dar un asignamiento de valores a las

b) = 1
B(~x

Denamos:


xbk =

Queremos ver que

Si

C(xk ) = C(s)

Sino

b) = 1
B(~x
j

1
0

basta ver:

b1,j L
b2,j L
b3,j = 1
j L
Tj es un tringulo entonces

b) = 1
Dj (~x

Hay que probar


Veamos como

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

ej,k Lj,k E C(Lk,j ) 6=


E C(Lk,j ) 6= C(t)

Como

tLk,j

Por denicin

bk,j = 1
L

Fin

tercer color


C(Lk,j ) = C(s)

b : B(~x
b) = 1 debemos construir un coloreo
Dado un asignamiento de valores ~x
con 3 colores.
Denimos: 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
b) = 1
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


txi , txi

(N CP )

Como

de uno elijo alguno)

Coloreamos:

Como
Y coloreo:

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


Lk,j ej,k

(N CP )


ej,r Lr,j
98

(N CP )

propio

Como:

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

C(s) = 1

y los

sej,r

(N CP )

Finalmente coloreamos:

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

C(ij,r ) = 0


ej,k ij,k

(N CP )

1 : r 6= k

ij,r ej,r
|{z} |{z}

(N CP )

0 1 =2

Finalmente el tringulo:

ij,1
Tiene un vrtice de color

}}
}}
}
}
}}

ij,2

AA
AA
AA
AA
_ ij,3

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

99

(N CP )

6.5.4.

2-SAT

D[j] =

Clasula j-sima, un par de nmeros

Registros

x[0]

Representan

x
b1

, ...

, x[n-1]

, ...

; x[n]

x
bn

b1
x

(L, R).
, ...,

x[2n-1]

, ...,

bn
x

2-SAT

1
2
3
4
5
6
7
8
9

V ariables : x0 , . . . , xn1
SET EAR(v) : //M ACRO
X[v] = 1;
X[2n 1 v] = 0;
Q = Q P [v] P [2n 1 v]
N = { 0 , . . . , n 1} ;
M = { 0 , . . . , m1} ;
Q = ;

// Variables no seteadas
// Disjunciones no s a t i s f e c h a s

for

( i

= 0

i < 2n ,

10

x[ i ]

11

P[ i ]

= {j

i ++){

M :

aparece

en D[ j ] } ;

12 }
13
14

for ( j
while (

15
16
17

= 0

j < m,

j ++){

Sat [ j ]

18

L ,R:

if

19

D( j ) = {L , R } ;

( ( x [ L ] == 1 )

20

Sat [ j ]

21
23

if (

| | ( x [ R ] == 1 ) ) {

= 1;

Remover

} else

22

de Q ;

x [ R] < 0 ) {

//Pero no de M

SETEAR(R) ;

/ Si X[R] < 0 , debe ser x [ i ] = 0 entonces debo asignar x [R]


= 1 /

24

} else

25
26

if (x [

i ] <0) {

SETEAR( L )

/ Este estado es cuando queda el caso 00 , por lo tanto nos


equivocamos coon el seteo de x [ i ]= 1 , por lo tanto hay
que cambiar /
} e l s e i f ( x [ i ] == 1 ) { //Anular todos

27

28

t N, s M {

29
30

SAT( s ) = 0 ;

31

x[ t ]

= x [ 2 n1 t ]

32

33

Q =

34

SETEAR[ 2 n1 i ]

1;

} else

35

return

36
37

38

i N, j : SAT [j] = 1 {

39
40

= 0;

6= )
Tomar i N, SETEAR( i ) ;
while (Q 6= ) {
E l e j i r j Q;
N

Borrar

"NO SAT"

de P [ i ]

y P [ 2 n1 i ]

41 }
42 R e t u r n

"SAT"

100

6.5.5.

HORN-SAT

HORN-SAT es como CNF-SAT pero donde cada clasula tiene a lo sumo un literal

xi positivo y xi
Teorema: HORN -SAT P

positivo :

negativo

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.

true true true


F alse ? true
true f alse f alse
Recordamos:

Entonces todas las disjunciones de la forma:

x x2 . . . xk xk+1
{z
}
|1
|{z}
f alse

van a ser

true

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 todas
x1 . . . xk xk+1
donde x1 , . . . , xk sean true.

Luego de eso se hacen


forma:
En

true

(permanentemente).

las variables

xk+1

que estn en una disjuncin de la

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 Articial


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

34

Los algoritmos genticos

Interaccin entre individuos.

, se basan ms o menos en la evolucin biolgica.

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

35

(TSP)

R3

la codicacin puede ser una cadena de 3 nmeros.

ciudades que no repita ninguna y minimice la distancia

. Codica una cadena con el nombre de cada ciudad (sin repetir).

34 AG.

35 Travel Salesman Problem.

102

36

En todo AG necesitamos una funcin a maximizar, llamada funcin de  Fitness

.

En los ejemplos anteriores:


1.

es la funcin.

2. Sera la

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

ciudades cualesquiera, asignndole, un peso muy grande si no existe en

la realidad. Pero en otros problemas esto es ms delicado.

Es la primera caracterstica de un AG.

1) Una poblacin de individuos con cromosomas y una funcin de tness adecuada.


Otra caracterstica es:
2) Seleccin de individuos a reproducirse mediante la tness.
Un AG tendr lo que se llaman Generaciones.
Poblacin Inicial (generacin 0)

Algo

Poblacin nueva (generacin 1)

Algo

Poblacin nueva (generacin 2)

7.4.1.

Seleccin

Los individuos a reproducirse se seleccionan de a pares y luego viene lo esencial:


3) Los progenitores producen nuevos individuos ( ospring) por medio del cruzamiento
( crossover) de genes.
4) Los ospring son sometidos a mutaciones al azar. Operador
Esto depende de una tasa de mutacin, generalmente baja

mutacin.

0, 001

5) Debe haber un operador de Seleccin entre Progenitor 1, Progenitor 2, ospring 1


y ospring 2. (es decir tengo que matar a 2).
6) Debe haber una condicin de terminacin.
Por ejemplo, un nmero mximo de generaciones.

7.5. Ejemplo de un AG
Problema: dado un nmero natural escribirlo como suma, resta, producto y divisin
de los dgitos:

0, 1, . . . , 9

quizs repetidos (asociando a izquierda).

36 Adaptabilidad.

103

7.5.1.

Codicacin del ejemplo

Una posibilidad sera una cadena de smbolos del alfabeto


que debe tener:

Smbolo

n
o
A = 0, . . . , 9, +, , / pero

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

1011
1100

.
.
.

1101 /
1110 N ada
1111 N ada

1001 9
1010 +

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

y se requiere un Smbolo lo descartamos.

Si es un Smbolo y se requiere un

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

si

 

si

P
F enotipo 6= 31
P
F enotipo = 31

Entrecruzamiento del ejemplo

Crossover: Singled Point Crossover

b1 b2 b3 . . . b400
Progenitor 2: bb1 bb2 bb3 . . . b
b400
Elijo al azar un nmero x : 0 < x < 400
Por ejemplo x = 127
Ospring 1: b1 b2 b3 . . . b127b
b128 . . . . . . bb400
b
b
b
b
Ospring 2: b1 b2 b3 . . . b127 b128 . . . . . . b400
Progenitor 1:

7.5.4.

y obtengo:

Mutacin del ejemplo

Para cada bit lo cambio con probabilidad

p.

104

7.5.5.

Seleccin del ejemplo

Mato a los padres, me quedo con los osprings.

7.5.6.

Operadores de Seleccin

Asumimos que cada individuo tiene una tness


Queremos seleccionar de los
cuenta las

Fi

calculada.

individuos, quines se van a reproducir, tomando, en

Fi .

Hay varios mtodos, los ms usados caen en un categora llamada:


Fitness Proportional Selection
n
P

Sea

F =

Fi

i=1

la tness promedio.

Fi
= # esperado de veces que el individuo
F
acuerdo a su tness.

Sea

Ei =

i,

debera ser seleccionado de

Fi
Ei = n P
n
Fj
j=1
Queremos seleccionar

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

i:

Ruleta.

Elijo un nmero al azar y elijo ese nmero.


0
Calculando las Ei s se toma un nmero al azar A entre
i
P

y se toma el primer

Ej > A

j=1
Ejemplo: 6 individuos.
Fitnesses

F1
F2
F3
F4
F5
F6

= 17,118
= 9,51
= 36,138

= 22,824

6
P

Fj = 190, 200

j=1

= 91,296
= 13,314

Lo ms simple es tomar un nmero al azar entre

r (0, 1)

y calculo

que por ejemplo tomando

r 190, 2.

Para entender mejor otros conceptos, haremos el clculo sin embargo con los

E1

E2

Fi
E3
6
Ei =
E4

190, 2

5
E6
105

= 0, 54
= 0, 30
= 1, 14
= 0, 72
= 2, 88
= 0, 42

Ei0 s

# 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
Ruleta:

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

medidas de un operador de seleccin:

Bias.
Spread.
Eciencia computacional.

Fi
y el valor esperado de veces que el individuo ser selecFi
cionado con el mtodo propuesto.
Bias: es la diferencia entre

Bias(Ruleta) = 0.
Spread: rango de ospring que un individuo puede tener:

Ruleta(Spread(i)) = [0, n].


Conclusin: ruleta tiene Bias = 0 y Spread Mximo (malo).
Eciencia: buena, pero se necesitan

randoms.

Alternativa a Ruleta: Stochastic Universal Sampling (SUS), usa un slo nmero al


azar, digamos

y toma los puntos:

r, r + 1, r + 2, . . . , r + (n 1).

En nuestro caso:

r = 0, 15

0,15

1,15

2,15

3,15

4,15

5,15

I1

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.

bEi c veces.
n
P
n bEi c posibles

Se toma
Los

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
Entonces me quedan

R1
R2
R3
R4
R5
R6

= 0, 54
= 0, 30
= 0, 14
= 0, 72
= 0, 88
= 0, 42

slots, por ejemplo uso ruleta para asignarlos.

Elijo 3 nmeros al azar:

r = 0, 15|0, 7|0, 22.


Multiplico por

0, 45

I1

2, 1

I5

n=3
0, 6

I2

Orden

El asignamiento nal nos queda:

7.5.8.

0,54

0,54

0,30

0,84

0,14

0,98

0,72

1,7

0,88

2,58

0,42

11

21

31
40

53

60

y luego apareo al azar.

Otros mtodos Fitness Proportional

Los mtodos que hemos visto con

BIAS = 0

o casi pueden producir que al principio

cuando hay gran disparidad de Fitness, un grupo de individuos con alta tness relativa,
cope la poblacin.
Impidiendo una bsqueda exhaustiva, de todo el espacio de bsqueda, por otro lado,
luego de que se estabilice la poblacin es difcil para un individuo con mayor Fitness
inuenciar la bsqueda produciendo un estancamiento.
Por esto se han propuesto alternativas.

107

7.5.9.

Sigma Scaling

En este mtodo se calculan las


Se dene

ci =
E

Ventaja: al principio,

1+

Ei

en forma distinta

Fi F
2

=
6 0
:=
=0

ci
E

desvo estndar de los

Fi .

suele se grande, entonces se evita Crownding, al nal

0.

Entonces el mejor individuo se va a reproducir mucho ms.


Ejemplo: con las Fitness de antes obtengo
Y voy calculando los

= 30, 627

ci
E

Primero:

c1 = 1 + 17, 118 31, 7 = 0, 762


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

eT
P rj : T temperatura, inicialmente alta y luego se enfra
eT
Otros mtodos no usan Fitness Proporcion

bi =
E

Por ejemplo: mtodos de Rango, se usan las

Fi

para ordenar los individuos y luego se

elije por algn mtodo.


Basndonos slo en la posicin en ese ordenamiento.
Otras Selecciones: no tan basadas en Fitness.

108

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

LR(pos) = (2 SP ) + 2(SP 1)

SP parmetro en

pos1
n1

[1, 2]

SP es por Selective Pressure


Estas tomaran el lugar de los
i.e. sera:

Ei

Ei = LR(P os(i))

SP = 1 LR(pos)
 = 1pos,
SP = 2 LR(pos) = 2 pos1
n1
SP (1; 2), por ejemplo SP = 1, 2

Por ejemplo

no hay presin.


LR(pos) = 0, 8 + 0, 4

pos 1
n1

SP no tiene que ser jo, podra ir aumentando para aumentar la presin.


Ejemplo: con las Fitness del ejemplo anterior

Tomando

F2

< F6

< F1

< F4

< F3

< F5

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

(usualmente 2) individuos y quedarse con el mejor, en un torneo de-

terminsticamente 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 =
P2 =

109

Obtengo:

O1 = 2, 2, 3, 2, 5, 3, 1, 8, 5, 8
O2 = 4, 9, 7, 6, 6, 3, 9, 6, 0, 9
Partial Map Crossover
Qu pasa con codicacin del problema que depende de la posicin?

P1 = BIGAECJF DH
P2 = DJBF ECIGAH
Corta en dos lugares:

O1 = BIG|JECA|F DH
O2 = DJB|F IEC|GAH
Tambin se puede hacer con mscaras. Order Based
Cyclic Crossover
VERRRRRRRRRRRRRRRR

7.5.11.

Mutacin

Strings de bits: cambiar cada bit con probabilidad

p 0.

Strings de enteros o reales: tambin se puede hacer algo as, pero en el caso en que
haya fronteras se hace otra cosa.
Por ejemplo supongamos que la frontera es:

|Ii | 10

es

I = 0, 5|7, 8|5
Ie = 0, 5|10|5
O bien:

7.5.12.



5
Ie = 0, 5 10+7,8
2

Mutaciones con Permutaciones

Mutacin para codicaciones basadas en posiciones TSP.


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

110

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

7.6. No Free Lunch


Todos los algoritmos que optimizan

37

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

Вам также может понравиться