Vous êtes sur la page 1sur 110

Fundamentos de Inform atica II

ILI-153
Horst H. von Brand
2 Semestre 2009
Resumen
Este documento presenta el resumen de las clases de Fundamentos de Inform atica II, dictada durante el 2
semestre de 2008 y 2009. Hay material adicional en estos apuntes, que no se vio en clase.
1. Funciones generatrices
En lo que sigue veremos como usar series de potencias (una herramienta del analisis, vale decir matematicas de
lo continuo) para resolver una variedad de problemas discretos. La idea de funciones generatrices permite resolver
muchos problemas de forma simple y transparente. Incluso cuando no da soluciones puede iluminar, indicando
relaciones entre problemas que a primera vista no son obvias. El aplicar herramientas analticas (especialmente la
teora de funciones de variables complejas) permite deducir resultados que de otra forma seran muy difciles de
obtener.
Mas que exponer la teora tras las tecnicas, mostraremos aplicaciones. Para detalles de la teora (y mucho mas
al respecto) vease [12]. Muchos de nuestros ejemplos llevan a resultados de interes independiente.
Sea una secuencia a
n

0
= a
0
, a
1
, a
2
, . . . , a
n
, . . .. La funcion generatriz (ordinaria) de la secuencia es la serie
de potencias:
A(x) =

0n
a
n
x
n
El punto es que la serie representa en forma compacta y manejable la secuencia innita. Como veremos, en muchos
casos resulta bastante mas sencillo manipular la serie que trabajar directamente con la secuencia.
Para un primer ejemplo, volveremos al problema de la Competencia de Ensayos de la Universidad de Miskatonic,
que llevo a la relacion:
b
2r+1
= b
2r1
+r + 1 b
1
= 1
con lo que tenemos, como antes (arbitrariamente dando el valor cero a los que no quedan denidos por la recurrencia):
b
n

0
= 0, 1, 0, 3, 0, 6, 0, 10, 0, 15, . . .
Contar con algunos valores sirve para vericar (y para sentir como se comportan).
Denamos la serie:
B(x) =

r0
b
2r+1
x
r
Si multiplicamos nuestra recurrencia por x
r
y sumamos sobre r 1 nos queda:

r1
b
2r+1
x
r
=

r1
b
2r1
x
r
+

r1
(r + 1)x
r
Expresando lo anterior en terminos de B(x), reconocemos:

r1
b
2r+1
x
r
=

r0
b
2r+1
x
r
b
1
= B(x) 1

r1
b
2r1
x
r
=

r0
b
2r+1
x
r+1
= x

r0
b
2r+1
x
r
= xB(x)
Por el otro lado, sabemos que para [x[ < 1 vale la serie geometrica:
1
1 x
=

r0
x
r
Derivando la serie geometrica respecto de x termino a termino, lo que es valido dentro de su radio de convergencia,
nos queda:
d
dx
_
1
1 x
_
=

r0
d
dx
x
r
1
(1 x)
2
=

r1
rx
r1
=

r0
(r + 1)x
r
Tambien:

r1
(r + 1)x
r
=

r0
(r + 1)x
r
1
Uniendo las anteriores queda:
B(x) 1 = xB(x) +
1
(1 x)
2
1
Despejando B(x):
B(x) =
1
(1 x)
3
Conociendo la funcion B(x), de cierta forma sabemos los valores b
2r+1
que nos interesan. Para algunas aplicaciones
basta llegar hasta aca, pero nos interesa obtener una formula explcita (ojala simple) para los coecientes, de forma
de poder determinar el tama no requerido de las tarjetas.
Derivando la serie geometrica por segunda vez:
d
2
dx
2
_
1
1 x
_
=

r1
d
dx
rx
r1
2
(1 x)
3
=

r2
r(r 1)x
r2
=

r0
(r + 2)(r + 1)x
r
Con esto se sigue:
B(x) =
1
2

r0
(r + 2)(r + 1)x
r
2
y tenemos nuevamente la formula explcita:
b
2r+1
=
1
2
(r + 1)(r + 2)
La ventaja frente al desarrollo anterior es que no tuvimos que adivinar esta solucion y nos ahorramos la demos-
tracion por induccion.
Receta
Para resolver recurrencias se debe:
1. Plantear la recurrencia.
2. Recopilar valores iniciales.
3. Aclarar para que valores de n vale la recurrencia.
4. Denir la funcion generatriz de interes
5. Multiplicar la recurrencia de (1) por x
n
y sumar sobre todos los valores (3)
6. Expresar (5) en terminos de la funcion generatriz.
7. Despejar.
8. Extraer los coecientes.
1.1. Algunas series utiles
Al trabajar con funciones generatrices es importante tener algunas expansiones en serie conocidas a la mano.
Las mas comunes en aplicaciones son las siguientes.
1.1.1. Serie geometrica
Es la serie m as com un en aplicaciones. Si [x[ < 1, se cumple:

n0
x
n
=
1
1 x
Una variante importante es la siguiente, expansion valida para [x[ < 1/a:

n0
a
n
x
n
=
1
1 ax
1.1.2. Teorema del binomio
Una de las series mas importantes es la expansion de la potencia de un binomio:

n0
_

n
_
x
n
= (1 +x)

Esto vale no solo para valores reales de , sino incluso para C siempre que [x[ < 1, donde
_

k
_
=

1

1
2

2
3

k + 1
k
y (consistente con la convencion que productos vacos son 1) siempre es:
_

0
_
= 1
3
Esta expansion es facil de demostrar por el teorema de Maclaurin.
Si es un entero positivo, la serie se reduce a un polinomio y la relacion es valida para todo x. Ademas, en caso
que n N podemos escribir:
_
n
k
_
=
n!
k!(n k)!
Notese la simetra:
_
n
k
_
=
_
n
n k
_
Casos especiales notables de coecientes binomiales para , N son los siguientes:
= 1/2: Tenemos, como siempre:
_
1/2
0
_
= 1
Cuando k 1:
_
1/2
k
_
=
1
2
(
1
2
1) (
1
2
k + 1)
k!
=
1
2
k

1 (1 2)(1 4) . . . (1 2k + 2)
k!
k 1
=
(1)
k1
k!2
k
(1 3 (2k 3))
=
(1)
k1
k!2
k

1 2 3 4 (2k 3)(2k 2)
2 4 6 (2k 2)
=
(1)
k1
2
k
k!

(2k 2)!
2
k1
(k 1)!
=
(1)
k1
2
2k1
k

(2k 2)!
(k 1)!(k 1)!
=
(1)
k1
2
2k1
k

_
2k 2
k 1
_
Hay que tener cuidado, la ultima formula no cubre el caso k = 0.
= 1/2: Mucha de la derivacion es similar a la del caso anterior. Tenemos, para k > 0:
_
1/2
k
_
=
(1/2) (1/2 1) . . . (1/2 k + 1)
k!
= (1)
k
1
2
k

1 3 . . . (2k 1)
k!
= (1)
k
1
2
k

(2k)!
k!2
k
k!
= (1)
k
1
2
2k
_
2k
k
_
Esta formula con k = 0 da:
_
1/2
0
_
= 1
as no se necesita hacer un caso especial aca.
4
= n: Cuando es un entero negativo, podemos escribir:
_
n
k
_
=
(n) (n 1) . . . (n k + 1)
k!
= (1)
k
n (n + 1) . . . (n +k 1)
k!
= (1)
k
(n +k 1)!
k!(n 1)!
= (1)
k
_
n +k 1
k
_
= (1)
k
_
n +k 1
n 1
_
Notense los casos particulares:
_
2
k
_
= (1)
k
(k + 1)
_
3
k
_
= (1)
k
(k + 1)(k + 2)
2
En general, resulta:
1
(1 x)
n+1
=

k0
_
n +k
n
_
x
k
1.1.3. Otras series
Otra serie com un es la exponencial:
e
x
=

n0
x
n
n!
con su variante:
e
x
=

n0
(1)
n
x
n
n!
A veces aparecen funciones trigonometricas:
sin x =

n0
(1)
n
x
2n+1
(2n + 1)!
cos x =

n0
(1)
n
x
2n
(2n)!
Una relacion util es la formula de Euler:
e
ix
= cos x +i sin x
Es frecuente la serie para el logaritmo:
d
dx
ln(1 x) =
1
1 x
=

n0
x
n
ln(1 x) =

n1
x
n
n
Muchos ejemplos adicionales de series utiles se hallan por ejemplo en [12].
5
1.2. Notaci on para coecientes
Com unmente extraeremos el coeciente de un termino de una serie. Para esto, dada la serie:
f(x) =

n0
a
n
x
n
usaremos la notacion:
[x
n
] f(x) = a
n
Considerando esto como lo que multiplica lo indicado en la serie, tenemos tambien:
[x
n
] f(x) =
a
n

[x
n
] x
k
f(x) =
_
x
nk

f(x)
[x
n
] (f(x) +g(x)) = [x
n
] f(x) + [x
n
] g(x)
En terminos de esta notacion el teorema de Maclaurin queda expresado como:
[x
n
]f(x) =
1
n!
d
n
dx
n
f(x)

0
1.3. Series de potencias: Teora formal
Nuestro interes en las series de potencias no es en su capacidad de denir funciones, sino simplemente como una
representacion compacta de una secuencia innita. Si dejamos de lado el requerimiento de que la serie converja (y
dena una funcion), podemos darle sentido incluso a series como

n0
n!x
n
que solo convergen para x = 0, y para las que el analisis no tiene ning un uso. Parte de lo que sigue viene de [8].
Sea la serie:

n0
a
n
x
n
donde los elementos a
n
pertenecen a un anillo R. Puede considerarse como una construccion puramente formal,
sin darle sentido a x ni preocuparse por convergencia. La unica restriccion que impone esto es que toda vez que se
calcula un coeciente deben efectuarse un n umero nito de operaciones (en un anillo arbitrario no son aplicables
las ideas de lmite y convergencia, necesarias para darle sentido a un n umero innito de operaciones).
Denimos la igualdad entre series formales:

n0
a
n
x
n
=

n0
b
n
x
n
cuando a
n
= b
n
para todo n 0
Denimos adem as las operaciones:

n0
a
n
x
n
+

n0
b
n
x
n
=

n0
(a
n
+b
n
)x
n
_

k0
a
k
x
k
_

i0
b
i
x
i
_
=

i 0
k 0
a
k
b
i
x
i+k
=

n 0
0 k n
a
k
b
nk
x
n
=

n0
_

0kn
a
k
b
nk
_
x
n
6
Es rutina vericar que las series formales de potencias sobre el anillo R con variable x forman un anillo, con
0 =

n0
0 x
n
y 1 = 1 + 0 x + 0 x
2
+ . . . A este anillo lo llamaremos Rx (recuerdese que llamamos R[x]
al anillo de polinomios en x sobre R). Si R es conmutativo, tambien lo es Rx. Para evitar distinciones in utiles
consideramos que R[x] es un subanillo de Rx de la forma natural. Podemos tambien considerar series en mas de
una variable, si las variables son x e y anotaremos Rx, y. Esto es, por ejemplo:
S(x, y) =

m 0
n 0
a
m,n
x
m
y
n
Es simple (aunque engorroso) demostrar que Rx, y es isomorfo a Rxy y a Ryx, pero no nos detendremos
en tales detalles. Salvo situaciones excepcionales, en lo que sigue consideraremos series con elementos tomados de
alg un campo, normalmente C (o R).
1.3.1. Unidades y recprocos
Sea F un campo. En el anillo de series formales Fx hay unidades que no son simplemente constantes (como
ocurre en el correspondiente anillo de polinomios formales). Por ejemplo, en Cx:
1
1 x
= 1 +x +x
2
+. . .
(1 x) (1 +x +x
2
+x
3
+. . .) = 1
Si a
0
= 0 la serie no puede tener recproco, ya que no hay forma de crear un termino constante del producto en tal
caso.
Por otro lado, supongamos que a
0
,= 0:
_

n0
a
n
x
n
_

n0
b
n
x
n
_
= 1

n0
_

0kn
a
k
b
nk
_
x
n
= 1
Para n = 0 debe ser a
0
b
0
= 1, o sea, b
0
= 1/a
0
; luego para n > 0:

0kn
a
k
b
nk
=

0kn
a
nk
b
k
= 0
b
n
=
1
a
0

0kn1
a
nk
b
k
Con esto ultimo se obtiene la secuencia de todos los b
n
, que es la secuencia de coecientes del recproco de la serie
A(x). Las sumas indicadas son siempre nitas.
1.3.2. Derivadas formales
Denimos:
d
dx
_

n0
a
n
x
n
_
=

n1
na
n
x
n1
=

n0
(n + 1)a
n+1
x
n
Esta es una denicion puramente formal, no intervienen lmites ni el signicado de la serie como funcion. Debe
interpretarse (n + 1)a
n
como lo denimos para anillos, vale decir, sumar n + 1 veces el valor a
n
. Debe tenerse
cuidado con situaciones en las cuales ma = 0 para alg un elemento a del anillo de base con m ,= 0. Nos interesa mas
que nada el caso en que el anillo es un campo innito (normalmente R o C) en el cual esta situacion no se da, y
supondremos eso de ahora en adelante salvo que se indique explcitamente lo contrario.
7
1.4. Manipulaci on de series formales
Sea una secuencia a
n

0
= a
0
, a
1
, a
2
, . . . , a
n
, . . .. La funcion generatriz (ordinaria) de la secuencia es la serie
de potencias:
A(x) =

0n
a
n
x
n
Anotaremos A(x)
ops
a
n

0
en este caso (ops es por ordinary power series).
La funcion generatriz exponencial de la secuencia es la serie:
E(x) =

0n
a
n
x
n
n!
Anotaremos E(x)
egf
a
n

0
en este caso (egf es por exponential generating function).
Las siguientes resumen operaciones comunes sobre las secuencias y como se reejan en las funciones generatrices
del caso.
1.4.1. Reglas OPS
Las siguientes resumen propiedades de las funciones generatrices ordinarias. Donde no son directamente las
deniciones del caso son muy simples de demostrar, y sus justicaciones detalladas quedaran de ejercicios.
Secuencia desplazada a la izquierda: Si f
ops
a
n

0
, entonces:
f(x) a
0
a
1
x . . . a
k1
x
k1
x
k
ops
a
n+k

0
Multiplicar por n: Consideremos:
f
ops
a
n

0
x
d
dx
f(x)
ops
na
n

0
Esta ultima operacion la expresamos en terminos del operador xD (D por derivada). Ademas:
(xD)
2
f
ops

n
2
a
n
_

0
Notese que x
2
D
2
corresponde a x
2 d
2
dx
2
; lo que es bien distinto de (xD)
2
, o sea, x
d
dx
_
x
d
dx
_
.
Multiplicar por un polinomio en n: En general, si p(n) es un polinomio, entonces:
p(xD)f
ops
p(n)a
n

0
Convolucion: Si f
ops
a
n

0
y g
ops
b
n

0
entonces:
f g
ops

_

0kn
a
k
b
nk
_

0
Sea k un entero positivo y f
ops
a
n

0
, entonces:
f
k
ops

_

n1+n2+...+n
k
=n
(a
n1
a
n2
. . . a
n
k
)
_

0
Sumas parciales: Supongamos:
f
ops
a
n

0
Entonces, por convolucion:
f(x)
1 x
ops

_

0kn
a
k
_

0
8
1.4.2. Reglas EGF
Las siguientes resumen propiedades de las funciones generatrices exponenciales. Son simples de demostrar, y las
justicaciones detalladas quedaran de ejercicios.
Secuencia desplazada a la derecha: Si f
egf
a
n

0
entonces D
k
f
egf
a
n+k

0
Multiplicacion por un polinomio en n: Si f
egf
a
n

0
, y p es un polinomio, entonces p(xD)f
egf
p(n)a
n

0
Convolucion: Si f
egf
a
n

0
y g
egf
b
n

0
entonces:
f(x) =

n0
a
n
x
n
n!
g(x) =

n0
b
n
x
n
n!
f(x) g(x) =

n0
_

0kn
a
k
k!
b
nk
(n k)!
_
x
n
=

n0
_

0kn
_
n
k
_
a
k
b
nk
_
x
n
n!
Vale decir:
f(x) g(x)
egf

_

0kn
_
n
k
_
a
k
b
nk
_

0
1.5. El truco xDlog
Los logaritmos ayudan a simplicar expresiones con exponenciales y potencias. Pero terminamos con el logaritmo
de una suma si el argumento es una serie, que es algo bastante feo de contemplar. Eliminar el logaritmo se logra
derivando:
d ln(f)
dx
=
f

f
Esto es mucho mas decente. Multiplicamos por x para reponer la potencia perdida al derivar.
Receta:
1. Aplicar xDln
2. Multiplicar para eliminar fracciones
3. Igualar coecientes
1.6. Algunos ejemplos
Un primer ejemplo de aplicacion de las ideas planteada es obtener la suma de los primeros N cuadrados:
1 +x +x
2
+ +x
N
=
1 x
N+1
1 x
(xD)
2
_
1 +x +x
2
+. . . +x
N

= (xD)
2
1 x
N+1
1 x
_
0
2
+ 1
2
x + 2
2
x
2
+. . . +N
2
x
N

x=1
= lm
x1
(xD)
2
1 x
N+1
1 x
9
El resto es derivar, calcular lmites y algebra:

1kN
k
2
=
N(N + 1)(2N + 1)
6
Esta claro que la misma idea sirve para otras potencias. La maquinaria de funciones generatrices permite obtener
en forma rutinaria resultados que de otra forma seran complicados de sospechar, y luego deberan ser demostrados
por induccion.
Otra aplicacion es obtener la serie para A(x)

, una potencia arbitraria ( C) de una serie A(x) que ya


conocemos. Sea entonces
A(x) =

n0
a
n
x
n
Denimos:
B(x) = A

(x) =

n0
b
n
x
n
Aplicando la receta para xDlog se tiene:
xB

(x)
B(x)
= x
A

(x)
A(x)
xB

(x) A(x) = xA

(x) B(x)
_

n0
nb
n
x
n
_

n0
a
n
x
n
_
=
_

n0
na
n
x
n
_

n0
b
n
x
n
_

n0
_

0in
ib
i
a
ni
_
x
n
=

n0
_

0in
ia
i
b
ni
_
x
n
De aca se sigue, igualando coecientes:

0in
a
i
(n i)b
ni
=

0in
ia
i
b
ni
Nuevamente, esto involucra solo operaciones nitas. Finalmente:

0in
_
a
i
(n i)b
ni
ia
i
b
ni
_
= 0

0in
(n i i)a
i
b
ni
= 0
na
0
b
n
=
_

1in
(n i i)a
i
b
ni
_
b
n
=
1
na
0

1in
(n i i)a
i
b
ni
Para comenzar la recurrencia, usamos:
b
0
= a

0
2. Aplicaciones
Veremos varias aplicaciones de la maquinaria de funciones generatrices, hallando funciones generatrices y tambien
derivando (y demostrando) identidades.
10
2.1. N umeros harm onicos
Un caso interesante es la funcion generatriz de los n umeros harmonicos, denidos como:
H
n
=

1kn
1
k
Ademas denimos H
0
= 0 (consistente con que sumas vacas son cero). Esta secuencia es importante en teora de
n umeros, y aparece en formulas para calcular una variedad de funciones especiales.
Los primeros valores son:
_
1,
3
2
,
11
6
,
25
12
,
137
60
,
49
20
,
363
140
,
761
280
,
7 129
2 520
, . . .
_
Buscamos una expresion para:
H(x) =

n0
H
n
x
n
Esto se reduce a:
H(x) =

n1
_

1kn
1
k
_
x
n
= x

n1
_

0kn1
1
k + 1
_
x
n1
= x

n0
_

0kn
1
k + 1
_
x
n
Como tenemos una suma entre manos, intentamos:
H(x) =
1
1 x
x

k0
x
k
k + 1
=
1
1 x
ln
1
1 x
Aca usamos la suma para el logaritmo derivada en la seccion 1.1.3.
2.2. N umeros de Fibonacci
Consideremos la secuencia 0, 1, 1, 2, 3, 5, . . ., que se obtiene de la recurrencia valida para n 0:
F
n+2
= F
n+1
+F
n
F
0
= 0, F
1
= 1
Esta la encontramos al analizar el algoritmo de Euclides. Tiene muchas aplicaciones, como en el metodo de optimi-
zacion que se conoce como b usqueda de Fibonacci. Muchos fenomenos naturales, como el crecimiento de los arboles
y las espirales que se observan en los girasoles siguen esta secuencia.
Denimos:
f(x) =

n0
F
n
x
n
11
Se tiene que:
F
n+2
= F
n+1
+F
n
F
n+2
x
n
= F
n+1
x
n
+F
n
x
n

n0
F
n+2
x
n
=

n0
F
n+1
x
n
+

n0
F
n
x
n
f(x) F
0
F
1
x
x
2
=
f(x) F
0
x
+f(x)
f(x) x
x
2
=
f(x)
x
+f(x)
f(x) x = xf(x) +x
2
f(x)
f(x) =
x
1 x x
2
Se busca factorizar de la siguiente manera:
1 x x
2
= (1 r
+
x)(1 r

x)
Para obtener esta factorizacion realizamos el cambio de variable y = 1/x y se tiene que:
y
2
y 1 = (y r
+
)(y r

)
r

=
1

5
2
y se denotara a r
+
= ( es la seccion aurea). Podemos expresar:
y
2
y 1 = (y r
+
)(y r

)
= y
2
(r
+
+r

)y +r
+
r

Comparando coecientes resulta r

= 1/ = 1 . Luego mediante el uso de fracciones parciales se tiene:


f(x) =
1

_
1
1 r
+
x

1
1 r

x
_
De esto ultimo se reconocen dos series geometricas. Continuando:
f(x) =

n0
1

5
r
n
+
x
n

n0
1

5
r
n

x
n
=

n0
r
n
+
r
n

5
x
n
Esto da la sorprendente relacion, conocida como formula de Binet, que expresa los n umeros de Fibonacci (enteros)
en terminos de n umeros irracionales:
F
n
=

n
(1 )
n

5
=
(1 +

5)
n
(1

5)
n
2
n

5
Ahora bien:
= 1, 618 . . .
1 = 0, 618 . . .

5
= 0, 75 . . .
1

5
= 0, 27 . . .
12
Para todo n 0:

(1 )
n

< 0, 5
Por lo tanto, F
n
=
n
/

5, redondeado al entero mas cercano.


2.3. Fibonacci RECARGADO
Recordando que:
F
n+2
= F
n+1
+F
n
F
0
= 0, F
1
= 1
Entonces con:
F(x) =

n0
F
n
x
n
n!
Se tiene que:

n0
F
n+2
x
n
n!
=

n0
F
n+1
x
n
n!
+

n0
F
n
x
n
n!
F

(x) = F

(x) +F(x)
donde F(0) = 0 y F

(0) = 1.
Esto ultimo no es mas que una notacion c omoda para F
0
y F
1
en terminos de la serie. Si ademas comparamos
la ecuacion diferencial con la recurrencia original, esta claro que obtener una de la otra es inmediato.
Resolvemos esta ecuacion diferencial ordinaria de segundo orden, homogenea y de coecientes constantes por el
metodo de la ecuacion caracterstica:
r
2
= r + 1
r
2
r 1 = 0
Sabemos que las soluciones a esta ecuacion son r
+
= y r

= 1 , con lo que tenemos:


F(x) = e
x
+e
(1)x
de donde:
F(0) = + = 0
F

(0) = +(1 ) = 1
La solucion de estas ecuaciones es:
=
1

5
=
1

5
y nalmente resulta la misma formula anterior:
F
n
=
1

5
_
x
n
n!
_
_
e
x
e
(1)x
_
=
1

5
__
x
n
n!
_
e
x

_
x
n
n!
_
e
(1)x
_
=

n
(1 )
n

5
Si comparamos las derivaciones, obtener la ecuacion y sus condiciones de borde es mas simple aca, debemos resolver
una ecuacion diferencial, pero obtener el resultado de su solucion es inmediato. En la derivacion anterior obtener la
ecuacion era algo mas trabajo, y tuvimos que usar fracciones parciales para poder obtener la secuencia; pero tratar
la ecuacion misma era mas simple.
13
2.4. Recurrencias lineales de coecientes constantes
Un caso particularmente importante es el de recurrencias de la forma:
a
k
u
n+k
+a
k1
u
n+k1
+. . . +a
0
u
n
= f(n)
donde los a
i
son constantes y f(n) es una funcion cualquiera. Esto se llama una recurrencia lineal de coecientes
constantes (de orden k, si a
k
,= 0). Si f(n) = 0, se dice homogenea. Se requieren k condiciones adicionales para
jar la solucion, que generalmente toman la forma de condiciones iniciales dando los valores de u
0
hasta u
k1
. La
recurrencia de Fibonacci que resolvimos antes es una recurrencia de segundo orden, lineal de coecientes constantes,
homogenea.
Tratar el caso general es bastante engorroso, mostraremos el procedimiento mediante un ejemplo. De forma
similar a la aplicacion de funciones generatrices ordinarias presentada aca pueden aplicarse funciones generatrices
exponenciales como lo hicimos en la seccion 2.3 para los n umeros de Fibonacci. Cual se usa en un caso particular
dependera de lo que resulte mas simple.
Consideremos la recurrencia:
u
n+2
+ 4u
n
= 5n
2
u
0
= 1, u
1
= 3
Los primeros valores son
1, 3, 12, 53, 232, 973, 3972, 16013, . . .
Aplicando nuestra estrategia general, denimos:
U(x) =

n0
u
n
x
n
Siguiendo la receta:

n0
u
n+2
x
n
+ 4

n0
x
n
= 5

n0
n
2
x
n
U(x) 3x 1
x
2
+ 4 U(x) = 5(xD)
2
_
1
1 x
_
= 5
x(1 +x)
(1 x)
3
Despejando y expresando en fracciones parciales:
U(x) =
2x
4
+ 13x
3
6x
2
+ 1
(1 x)
3
(1 + 4x
2
)
=
82x + 37
24(1 + 4x
2
)
+
2
(1 x)
3

19
5(1 x)
2
+
33
25(1 x)
14
Luego basta leer los coecientes en esto. Puntos interesantes los ponen los terminos:
1
1 + 4x
2
= 1 4x
2
+ 16x
4
. . .
=

n0
(4)
n
x
2n
x
1 + 4x
2
= x 4x
3
+ 16x
5
. . .
=

n0
(4)
n
x
2n+1
1
(1 x)
3
=

n0
_
3
n
_
(1)
n
x
n
=

n0
(n + 2)(n + 1)
2
x
n
1
(1 x)
2
=

n0
_
2
n
_
(1)
n
x
n
=

n0
(n + 1)x
n
Podemos entonces expresar la solucion como:
u
2n
=
37
24
(4)
2n
+ 2
(2n + 2)(2n + 1)
2

19
5
(2n + 1) +
33
25
=
37
24
(16)
n
+ 4n
2

8
25
n
12
25
u
2n+1
=
82
24
(4)
2n+1
+ 2
(2n + 3)(2n + 2)
2

19
5
(2n + 2) +
33
25
=
41
6
(16)
n
+ 4n
2
+
12
5
n
7
25
Esta separacion en terminos pares e impares es incomoda. Usando n umeros complejos podemos factorizar mas:
1 + 4x
2
= (1 2ix)(1 + 2ix)
1
1 + 4x
2
=
1
2
_
1
1 + 2ix
+
1
1 2ix
_
x
1 + 4x
2
=
i
4
_
1
1 + 2ix

1
1 2ix
_
y podemos entonces expresar:
u
n
=
82
24

i
4
_
(2i)
n
(2i)
n
_
+
37
24

1
2
_
(2i)
n
+ (2i)
n
_
+ 2
(n + 2)(n + 1)
2

19
5
(n + 1) +
33
25
=
_
37 + 82i
96
(i)
n
+
37 82i
96
i
n
_
2
n
+n
2

4
5
n
12
25
Es bien poco probable que hubieramos adivinado esta solucion. . .
2.5. Dividir y conquistar
Una de las estrategias mas fructferas para dise nar algoritmos es la que se llama dividir y conquistar [1]. La
idea es resolver un problema grande por la va de expresarlo en terminos de varios problemas menores del mismo
tipo, resolver estos (recursivamente) y luego combinar los resultados. Ejemplos tpicos son el ordenamiento por
intercalacion y b usqueda binaria. Un ejemplo menos conocido es el algoritmo de Karatsuba para multiplicacion.
15
La idea es que si se desean multiplicar n umeros de 2n dgitos, llamemosles A y B, los dividimos en mitades mas y
menos signicativas. Si la base es B, escribimos:
A = a B
n
+b
B = c B
n
+d
donde 0 a, b, c, d < B
n
, y tenemos:
A B = ac B
2n
+ (ad +bc) B
n
+bd
Si denimos:
u = ac
v = bd
w = uv
= ac +ad +bc +bd
podemos expresar
A B = u B
2n
+ (w u v) B
n
+v
Esta formula signica usar tres (no cuatro) multiplicaciones, a costa de mas operaciones de suma.
Si el tiempo de ejecucion de un algoritmo de este tipo para una entrada de tama no n lo denotamos por t(n), el
problema se reduce a a problemas de tama no n/b, y el costo de reducir el problema y luego combinar las soluciones
es f(n), al sumar el tiempo para resolver los subproblemas y las otras operaciones obtendremos recurrencias de la
forma:
t(n) = at(n/b) +f(n) t(1) = t
1
El restringir el analisis a potencias de b es v alido ya que nos interesa el comportamiento asintotico de la solucion
a la recurrencia. Intuitivamente es claro que los algoritmos considerados se ejecutan en un tiempo intermedio para
tama nos intermedios, y en el peor caso podemos rellenar los datos hasta completar la potencia respectiva. Hacer
esto no cambia nuestras conclusiones mas abajo.
En el caso de ordenamiento por intercalacion, dividimos en dos partes iguales que se procesan recursivamente.
El proceso de dividir puede implementarse va tomar elementos alternativos y ubicarlos en grupos separados, el
combinar las partes ordenadas toma tiempo proporcional a su tama no. Por lo tanto, el crear los subproblemas y
combinar sus soluciones toma un tiempo proporcional al n umero de elementos a ordenar. As tenemos que a = b = 2,
f(n) = cn para alguna constante c. Para b usqueda binaria, se divide en dos partes iguales de las cuales se procesa
recursivamente solo una, y el proceso de division es simplemente ubicar el elemento medio y comparar con el, y no
hay combinacion de subproblemas; todo esto toma un tiempo constante. En este caso es a = 1, b = 2, f(n) = c
para alguna constante. En el algoritmo de Karatsuba, las tareas adicionales son dividir los n umeros en mitades y
efectuar varias sumas y restas de n umeros de n dgitos. El costo de estas operaciones es simplemente proporcional
a n. Estos ejemplos son bastante representativos, y el analisis resulta simple si f(n) = cn
d
. Para b usqueda binaria
tenemos d = 0, para ordenamiento por intercalacion d = 1.
Consideramos entonces la recurrencia, valida para n una potencia de b:
t(bn) = at(n) +cn
d
t(1) = t
1
Efectuamos el cambio de variables:
n = b
k
k = log
b
n
t(n) = T(k) t(bn) = T(k + 1)
En estos terminos, dadas las condiciones del problema para constantes c > 0 (el costo de dividir y combinar no es
nulo) y t
1
> 0 (el resolver un problema de tama no mnimo tiene alg un costo) tenemos para k 0:
T(k + 1) = aT(k) +c(b
d
)
k
T(0) = t
1
16
Para resolver la recurrencia denimos la funcion generatriz
g(x) =

k0
T(k)x
k
y aplicamos nuestra tecnica

k0
T(k + 1)x
k
=

k0
T(k)x
k
+c

k0
(b
d
)
k
x
k
g(x) t
1
x
= g(x) +c
1
1 (b
d
)x
g(x) =
t
1
((b
d
)t
1
c)x
1 (b
d
+a)x +a(b
d
)x
2
=
t
1
((b
d
)t
1
c)x
(1 (b
d
)x)(1 ax)
Veamos primero el caso en que hay races repetidas (a = b
d
), donde la expansion en fracciones parciales toma la
forma siguiente, para constantes y :
g(x) =

(1 ax)
2
+

1 ax
Resultan ser:
=
c
a
=
at
1
c
a
T(k) = ka
k
+ ( +)a
k
t(n) =
_
b
log
b
a
_
log
b
n
log
b
n + ( +)
_
b
log
b
a
_
log
b
n
=
_
b
log
b
n
_
log
b
a
log
b
n + ( +)
_
b
log
b
n
_
log
b
a
= n
log
b
a
log
b
n + ( +)n
log
b
a
=
c
a
n
log
b
a
log
b
n +
t
1
a
n
log
b
a
Es claro que ninguno de los coecientes se anula. Como el primer termino domina asintoticamente al segundo,
podemos decir que en este caso:
t(n) = O(n
log
b
a
log n)
El otro caso es cuando a ,= b
d
, y la expansion en fracciones parciales toma la forma siguiente con constantes y :
g(x) =

1 ax
+

1 b
d
x
donde ahora:
=
(b
d
a)t
1
c
b
d
a
=
c
b
d
a
Nuevamente, si ninguna de estas expresiones se anula resulta mediante una derivacion similar a la anterior:
T(k) = a
k
+(b
d
)
k
t(n) = n
log
b
a
+n
d
17
Dependiendo de los valores relativos de log
b
a y d, o lo que es lo mismo, a y b
d
, es el termino que domina esta
expresion, siempre que ,= 0.
Resumiendo:
t(n) =
_

_
O(n
log
b
a
) si a > b
d
O(n
log
b
a
log n) si a = b
d
O(n
d
) si a < b
d
En nuestro caso, esto nos dice que el tiempo de ejecucion de b usqueda binaria es O(log n), el de ordenamiento por
intercalacion es O(nlog n), y el algoritmo de Karatsuba toma O(n
log
2
3
) = O(n
1,58...
). Usar las cuatro multiplica-
ciones implicadas en nuestra formula original lleva a O(n
log
2
4
) = O(n
2
), lo que no es mejora sobre el algoritmo
tradicional.
2.6. N umeros de Bernoulli
Denamos
S
m
(n) =

1kn1
k
m
En estos terminos, Bernoulli noto los siguientes:
S
0
(n) = n
S
1
(n) =
1
2
n
2

1
2
S
2
(n) =
1
3
n
3

1
2
n
2
+
1
6
n
S
3
(n) =
1
4
n
4

1
2
n
3
+
1
4
n
2
S
4
(n) =
1
5
n
5

1
2
n
4
+
1
3
n
3

1
30
n
S
5
(n) =
1
6
n
6

1
2
n
5
+
5
12
n
4

1
12
n
3
Estos podemos expresarlos:
S
0
(n) =
1
1
_
1
0
_
n
S
1
(n) =
1
2
__
2
0
_
n
2

_
2
1
_
1
2
n
_
S
2
(n) =
1
3
__
3
0
_
n
3

_
3
1
_
1
2
n
2
+
_
3
2
_
1
6
n
_
S
3
(n) =
1
4
__
4
0
_
n
4

_
4
1
_
1
2
n
3
+
_
4
2
_
1
6
n
2

_
4
4
_
1
30
_
S
4
(n) =
1
5
__
5
0
_
n
5

_
5
1
_
1
2
n
4
+
_
5
2
_
1
6
n
3

_
5
4
_
1
30
n
_
S
5
(n) =
1
6
__
6
0
_
n
6

_
6
1
_
1
2
n
5
+
_
6
2
_
1
6
n
4

_
6
4
_
1
30
n
2
_
Parece entonces que se puede expresar:
S
m
(n) =
1
m+ 1

0km
_
m+ 1
k
_
B
k
n
m+1k
para alguna secuencia B
k
que comienza 1, 1/2, 1/6, 0, 1/30, 0, . . ..
18
Para atacar este problema, como aparece una convolucion binomial denamos la funcion generatriz exponencial

S(x, n) =

m0
S
m
(n)
x
m
m!
mediante la cual buscamos hallar

B(x) =

k0
B
k
x
k
k!
Podemos expresar:

S(x, n) =

m0
_

0kn1
k
m
_
x
m
m!
=

0kn1
_

m0
(kx)
m
m!
_
=

0kn1
e
kx
=
e
nx
1
e
x
1
Por el otro lado tenemos

S(x, n) =

m0
_
1
m+ 1

0km
_
m+ 1
k
_
B
k
n
m+1k
_
x
m
m!
=
_

m0
B
m
x
m
m!
_

_

m0
n
m+1
x
m
(m+ 1)!
_
=

B(x)
e
nx
1
x
Comparando ambas expresiones resulta

B(x) =
x
e
x
1
e interesa evaluar sus coecientes.
Primeramente, tenemos:
e
x
1
x
=

n0
x
n
(n + 1)!
Nuestra formula para el recproco ahora da:
B
0
= 1
B
n
= n!

0kn1
1
(n + 1 k)!
B
k
k!
=

0kn1
_
n
k
_
B
k
n + 1 k
Vale decir, se conrma nuestra sospecha de que las sumas de potencias podan expresarse de la forma indicada,
y hemos obtenido una recurrencia para los coecientes involucrados. La secuencia de coecientes (los n umeros de
Bernoulli) es muy importante, aparece en una amplia gama de situaciones diferentes. Debe tenerse cuidado, hay
autores que denen la secuencia (bajo el mismo nombre e incluso con la misma notacion) de forma que todos son
positivos.
19
De los valores dados antes pareciera ser que los valores para ndices impares son todos cero, salvo B
1
=
1
2
.
Consideremos la funcion:
x
e
x
1
+
x
2
=
x
2

e
x
+ 1
e
x
1
=
x
2
coth
x
2
Esta funcion es par, y hemos demostrado nuestra sospecha de que los coecientes impares (salvo B
1
) son todos cero.
2.7. Potencias factoriales
Denamos:
G(z, u) =

n0
u
n
z
n
n!
Como
u
n
n!
=
_
u
n
_
tenemos
G(z, u) =

n0
_
u
n
_
z
n
= (1 +z)
u
Esto implica:
G(z, u) G(z, v) = G(z, u +v)
Evaluando el producto de funciones generatrices exponenciales

n0
_

0kn
_
n
k
_
u
k
v
nk
_
z
n
n!
=

n0
(u +v)
n
z
n
n!
Comparando los coecientes de z
n
resulta
(u +v)
n
=

0kn
_
n
k
_
u
k
v
nk
Curioso equivalente de la formula para la potencia normal de un binomio.
3. Aplicaciones combinatorias
Las funciones generatrices tienen muchas aplicaciones en combinatoria, por las razones que quedaran claras a
traves de los siguientes ejemplos.
3.1. Coecientes binomiales
Hagamos como que nada sabemos. . . Cuantos subconjuntos de k elementos podemos obtener de un conjunto
de n elementos? Obviamente, exactamente que conjunto de n elementos tomemos da lo mismo, podemos usar
el conjunto 1, 2, . . . , n sin perdida de generalidad. Llamese f(n, k) a dicha cantidad. Podemos descomponer los
f(n, k) subconjuntos en dos grupos:
Aquellos conjuntos que no contienen a n: Corresponden simplemente a tomar k elementos de los restantes
n 1, de estos hay f(n 1, k).
20
Aquellos conjuntos que contienen a n: Estamos tomando n, y k1 elementos mas de entre los restantes n1,
de estos hay f(n 1, k 1).
Como estas dos posibilidades son excluyentes, y corresponden a todas las formas de armar subconjuntos de k
elementos:
f(n, k) = f(n 1, k) +f(n 1, k 1)
Hay una unica manera de obtener un subconjunto de cero elementos (subconjunto vaco), o sea, f(n, 0) = 1.
Siguiendo con nuestra receta, denimos:
B
n
(x) =

k0
f(n, k)x
k
Partiremos de k + 1 para poder sumar desde k = 0.
f(n, k + 1) = f(n 1, k + 1) +f(n 1, k)
f(n, k + 1)x
k
= f(n 1, k + 1)x
k
+f(n 1, k)x
k

k0
f(n, k + 1)x
k
=

k0
f(n 1, k + 1)x
k
+

k0
f(n 1, k)x
k
Luego, en terminos de la funcion generatriz, y teniendo en cuenta que f(n, 0) = 1, se tiene:
B
n
(x) 1
x
=
B
n1
(x) 1
x
+B
n1
(x)
B
n
(x) = B
n1
(x)(1 +x)
Finalmente es claro que B
0
(x) =

k0
f(0, k)x
k
= 1, por lo que:
B
n
(x) = (1 +x)
n
Aplicando el teorema de Maclaurin a B
n
(x):
d
k
dx
k
B
n
(x)

x=0
= n (n 1) . . . (n k + 1)(1 +x)
nk

x=0
= n (n 1) . . . (n k + 1)
Hemos demostrado nuevamente la relacion entre los coecientes binomiales y el n umero de maneras de elegir k
elementos de entre n:
f(n, k) =
n(n 1) . . . (n k + 1)
k!
=
n!
k!(n k)!
=
_
n
k
_
La recurrencia para los coecientes binomiales da el famoso triangulo de Pascal:
n = 0: 1
n = 1: 1 1
n = 2: 1 2 1
n = 3: 1 3 3 1
n = 4: 1 4 6 4 1
n = 5: 1 5 10 10 5 1
n = 6: 1 6 15 20 15 6 1
21
1 2,3,4
1,2 3,4
1,3 2,4
1,4 2,4
1,2,3 4
1,2,4 3
1,3,4 2
3.2. N umeros de Stirling de segunda especie
Se desea partir el conjunto 1, 2, 3, 4 en 2 clases:
Esto muestra que hay 7 particiones de 4 elementos en 2 clases. El n umero de formas de particionar un conjunto
de n elementos en k clases se llama n umero de Stirling de segunda especie, se anota
_
n
k
_
para el n umero de formas de
particionar un conjunto de n elementos en k particiones. Por ejemplo, para determinar el n umero de funciones sobre
de [n] a [k], esto corresponde a particionar el dominio en las preimagenes de cada elemento del rango, y podemos
asignar valores de la funcion a cada una de las k particiones de k! maneras, con lo que
_
n
k
_
k! es el valor buscado.
Cabe hacer notar que esta notacion es com un (uno de sus campeones es Knuth, p.ej. [3]), aunque hay una variedad
de ellas.
Para obtener
_
n
k
_
, consideremos dos grupos de particiones:
Aquellas en que n esta solo: Corresponden a tomar k 1 particiones de los demas n 1 elementos, hay
_
n1
k1
_
de estas.
Aquellas en que n esta con otros elementos: Se construyen en base a k clases de los restantes n1 elementos
va agregar n a cada clase, hay k
_
n1
k
_
de estas.
Nuevamente, estas dos opciones son excluyentes y exhaustivas, y:
_
n
k
_
=
_
n 1
k 1
_
+k
_
n 1
k
_
Donde:
_
n
0
_
= 0, n ,= 0
_
0
0
_
= 1
Si ademas decretamos:
_
n
k
_
=
_

_
0 n < 0
0 k < 0
0 k > n
la recurrencia siempre se cumple.
Tenemos varias opciones de funciones generatrices:
A
n
(x) =

k0
_
n
k
_
x
k
B
k
(y) =

n0
_
n
k
_
y
n
C(x, y) =

n 0
k 0
_
n
k
_
x
k
y
n
22
De estas tres opciones, la primera involucra derivadas (por el termino k
_
n1
k
_
x
k
), la tercera involucra trabajar con
dos variables (lo cual siempre es complicado), ademas que involucra derivadas igual que el caso A. Por lo tanto la
segunda opcion parece ser la mas facil. Primeramente, tenemos por lo anterior:
B
0
(y) = 1
B
k
(0) =
_
0
k
_
= 0 si k > 0
Aplicando ahora nuestra receta para manejar recurrencias, bajo el entendido que k > 0, y recordando que la
recurrencia como esta escrita es valida para n 1:

n1
_
n
k
_
y
n
=

n1
_
n 1
k 1
_
y
n
+

n0
k
_
n 1
k
_
y
n
B
k
(y)
_
0
k
_
= y

n1
_
n 1
k 1
_
y
n1
+y

n1
_
n 1
k
_
y
n1
B
k
(y) = y

n0
_
n
k 1
_
y
n
+ky

n0
_
n
k
_
y
n
= yB
k1
(y) +kyB
k
(y)
Despejando:
B
k
(y) =
y
1 ky
B
k1
(y)
=
y
k
(1 y) (1 2y) . . . (1 ky)
B
0
(y)
=
y
k
(1 y) (1 2y) . . . (1 ky)
Descomponiendo en fracciones parciales:
1
(1 y) (1 2y) . . . (1 ky)
=

1ik

i
1 iy
Multiplicando todo por 1 ry, y luego haciendo y 1/r (este es un truco estandar para obtener los coecientes
de expansiones en fracciones parciales):

r
=
1
__
1
1
r
_

_
1
2
r
_
. . .
_
1
r1
r
__

__
1
r+1
r
_
. . .
_
1
k
r
__
=
r
k1
(r 1) . . . (r r + 1) (r r 1) . . . (r k)
=
r
k1
(r 1)! (1)
kr
(k r)!
=
(1)
kr
r
k1
(r 1)!(k r)!
23
Con esto tenemos:
B
k
(y) =

1rk
(1)
kr
r
k1
(r 1)!(k r)!

y
k
1 ry
[y
n
] B
k
(y) =

1rk
[y
n
]
(1)
kr
r
k1
(r 1)!(k r)!

y
k
1 ry
_
n
k
_
=

1rk
(1)
kr
r
k1
(r 1)!(k r)!
[y
n
]
y
k
1 ry
=

1rk
(1)
kr
r
k1
(r 1)!(k r)!

_
y
nk

1
1 ry
=

1rk
(1)
kr
r
k1
(r 1)!(k r)!
r
nk
=

1rk
(1)
kr
r
n
r!(k r)!
Esta es la formula explcita que buscabamos.
Una tabla de los n umeros de Stirling de segunda especie en forma de triangulo (como el triangulo de Pascal)
comienza:
n = 0: 1
n = 1: 0 1
n = 2: 0 1 1
n = 3: 0 1 3 1
n = 4: 0 1 7 6 1
n = 5: 0 1 15 25 10 1
n = 6: 0 1 31 90 65 15 1
3.2.1. Potencias y n umeros de Stirling
Tenemos el siguiente problema: Tomando la serie geometrica y derivando n veces, queda simplemente:
d
n
dx
n
1
1 x
=
n!
(1 x)
n
=

kn
k
n
x
kn
=

k0
(n +k)
n
x
k
Esta es la funcion generatriz de un polinomio de grado n en k, y combinando apropiadamente varios de estos
podemos construir las funciones generatrices de cualquier polinomio. Pero hacerlo es bastante engorroso, busquemos
una forma de expresar la funcion generatriz de k
n
, conociendo estas es simple construir la de un polinomio dado.
Lo que nos interesa entonces es conocer los coecientes s
n,k
en la expansion siguiente:
x
n
=

0kn
s
n,k
x
k
Esta claro que s
n,k
= 0 si k < 0 o k > n, con lo que los lmites en realidad son superuos. Ademas, para n = 0
resulta s
0,0
= 1
24
Para hallar los s
n,k
usamos x
k+1
= x
k
(x k), que nos da x x
k
= x
k+1
+kx, de donde:
x

k
s
n1,k
x
k
=

k
s
n1,k
x x
k
=

k
s
n1,k
x
k+1
+

k
s
n1,k
kx
k
=

k
s
n1,k1
x
k
+

k
ks
n1,k
x
k
=

k
(s
n1,k1
+ks
n1,k
) x
k
Comparando coecientes de esto con:
x
n
=

k
s
n,k
x x
k
vemos que debe ser:
s
n,k
= s
n1,k1
+ks
n1,k
y tenemos las condiciones:
s
0,0
= 1
s
n,0
= 0 si n > 0
El lector astuto reconocera esto simplemente como la recurrencia que obtuvimos para los n umeros de Stirling de
segunda especie, y tenemos:
x
n
=

k
_
n
k
_
x
k
Esto cumple la promesa dada por el ttulo.
3.3. N umeros de Bell
El n umero de Bell b(n) es el n umero total de particiones posibles de un conjunto de n elementos. Claramente:
b(n) =

0kn
_
n
k
_
Esta formula da b(0) = 1, los primeros valores son 1, 1, 2, 5, 15, 52, 203, . . .. Para n > 0 podemos omitir el primer
termino (esto simplica lo que sigue). En consecuencia, supondremos n 1 de ahora en adelante.
Pero resulta que la suma monstruosa que da los n umeros de Stirling de segunda especie sabe que
_
n
k
_
= 0
si k > n (por su derivacion cumple la recurrencia de los n umeros de Stirling de segunda especie) as que podemos
escribir para todo M n (as solo trabajamos con sumas nitas por ahora, y no nos meteremos en problemas).
b(n) =

1kM
_
_

1rk
(1)
kr
r
n1
(r 1)!(k r)!
_
_
El siguiente paso es intercambiar las sumas. Si combinamos las condiciones de ambas sumas resulta 1 r k M,
que podemos descomponer en r recorriendo el rango 1 r M mientras k recorre r k M (mucho mas detalle
sobre manipulacion de sumas se encuentra en [3]). Obtenemos:
b(n) =

1rM
r
n1
(r 1)!

rkM
(1)
kr
(k r)!
=

1rM
r
n1
(r 1)!

0kMr
(1)
k
k!
25
La suma interna huele a e
1
. . . Si ahora hacemos M :
b(n) =
1
e

r1
r
n1
(r 1)!
=
1
e

r0
r
n
r!
En esto multiplicamos por r en el numerador y denominador, y luego agregamos el termino para r = 0, que se
anula. Esta formula vale para n 1. Muy bonito, aunque bien poco util para calcular b(n).
Denamos la funcion generatriz exponencial:
E(x) =

n0
b(n)
x
n
n!
Mas adelante veremos otras situaciones en las cuales conviene introducir factores extra.
Como la formula para b(n) es valida para n 1:
E(x) b(0) =

n1
b(n)
x
n
n!
E(x) 1 =

n1
x
n
n!
1
e

r0
r
n
r!
=
1
e

n1

r0
(rx)
n
r!n!
=
1
e

r0
e
rx
1
r!
=
1
e
_

r0
e
rx
r!

r0
1
r!
_
E(x) 1 =
1
e
_
e
e
x
e
_
E(x) = e
e
x
1
Simplemente notable.
Podemos aplicar el truco xDlog a esto. Aplicando nuestra receta:
xDln(E(x)) = xD
_
e
e
x
1
_
xDE(x)
E(x)
= xe
x
xDE(x) = xe
x
E(x)

n0
nb(n)
x
n
n!
= x
_

n0
x
n
n!
_

n0
b(n)
x
n
n!
_

n1
b(n)
x
n
(n 1)!
= x

n0
_

0kn
_
n
k
_
b(k)
_
x
n
n!
=

n1
_

0kn1
_
n 1
k
_
b(k)
_
x
n
(n 1)!
Igualando coecientes se obtiene la recurrencia:
b(n) =

0kn1
_
n 1
k
_
b(k) b(0) = 1
Esto es denitivamente mas util para calcular los valores de b(n) que la ecuacion anterior.
26
3.4. Derangements
Un punto jo de una permutacion ocurre cuando el elemento n umero k es k. Un derangement (desordena-
miento?) es una permutacion sin puntos jos. Llamamos D
n
al n umero de derangements de n elementos. Por
ejemplo, D
0
= 1 (hay una unica manera de ordenar cero elementos, y en esa ning un elemento esta en su posicion),
D
1
= 0 (un elemento puede ordenarse de una manera solamente, y ese siempre esta en su posicion), D
2
= 1 (solo
21), D
3
= 2 (312 y 231).
Ejemplo Consideremos una permutacion de 7 elementos:
N elemento 1 2 3 4 5 6 7
Valor 2 6 3 4 1 5 7
Esta permutacion tiene tres puntos jos: El 3 esta en la posicion 3, el 4 en la posicion 4 y el 7 en la posicion 7. Luego
hay D
73
formas de ordenar los demas sin introducir puntos jos adicionales, y esos 3 puntos jos se pueden
elegir de
_
7
3
_
formas diferentes.
En general, si hay k puntos jos en una permutacion, estos pueden elegirse de
_
n
k
_
maneras; por lo tanto hay
exactamente
_
n
k
_
D
nk
permutaciones con k puntos jos. Toda permutacion tiene puntos jos (0, 1, . . . , n de ellos)
y hay un total de n! permutaciones:
n! =

0kn
_
n
k
_
D
nk
Esta recurrencia es valida para n 0 si denimos D
0
= 1 (hay una unica permutacion de 0 elementos, que no tiene
puntos jos y por tanto es un derangement).
En la recurrencia se observa que el lado derecho se parece al producto de funciones generatrices exponenciales
(por el coeciente binomial). En consecuencia denimos:
D(x) =

n0
D
n
x
n
n!
Multiplicando la recurrencia por x
n
/n! y sumando sobre n 0 tenemos:

n0
n!
x
n
n!
=

n0
_

0kn
_
n
k
_
D
nk
_
x
n
n!
1
1 x
=
_

n0
x
n
n!
_

n0
D
n
x
n
n!
_
= e
x
D(x)
D(x) =
e
x
1 x
=

n0
_

0kn
(1)
k
1
k!
_
x
n
En esto usamos la formula para el producto de funciones generatrices exponenciales, y luego el que multiplicar por
(1 x)
1
nos da la funcion generatriz de las sumas parciales.
De lo ultimo:
D
n
=
_
x
n
n!
_
d(x)
= n!

0kn
(1)
k
k!
La suma es la de la serie para e
1
truncada, y esta ultima converge muy rapidamente, por lo que se podra decir
que:
D
n

n!
e
27
Algo as como un 37 % de las permutaciones no tienen puntos jos. Es curioso que este resultado dependa tan poco
de n.
Otra manera de resolver esto es partir derivando una recurrencia para los D
n
. Considere un derangement de
1, 2, . . . , n. Entonces para alg un 1 k n 1 tenemos (k) = n. Si intercambiamos k con n para obtener una
nueva permutacion

, hay dos posibilidades:

(k) ,= k: Al eliminar el ultimo elemento, los primeros elementos de

forman un derangement de 1, 2, . . . , n1.


Por ejemplo, si tomamos k = 4 tenemos 312645 (31254)6.

(k) = k: Podemos intercambiar

(k) con

(n 1), para obtener un derangement

de 1, 2, . . . , n 2 en las
primeras n 2 posiciones de

. Al tomar nuevamente k = 4 queda sucesivamente 512634 (51243)6


(4123)56
Estas dos transformaciones en conjunto son una biyeccion para cada valor de k, que podemos elegir de n1 maneras.
Otra manera de verlo es considerar n personas que eligen entre n sombreros de manera que ninguna se lleva el
suyo. Numeramos a las personas 1, 2, . . . , n, y los respectivos sombreros de la misma forma. La persona 1 puede
elegir el sombrero equivocado de n 1 maneras, supongamos que elige el sombrero i. Ahora hay dos posibilidades:
Si la persona i toma el sombrero 1, podemos eliminar a 1 e i, y el problema se reduce a distribuir los n2 sombreros
restantes entre las otras n 2 personas. Si la persona i no toma el sombrero 1, podemos renumerar ese como i (no
lo tomara i porque le corresponde) y quedan por distribuir los otros n 1 sin que a nadie le toque el suyo.
De cualquier forma obtenemos:
D
n
= (n 1)(D
n1
+D
n2
)
Para completar la recurrencia, nuevamente tomamos D
0
= 1. Esto es consistente ya que da D
2
= 1 (D
1
+D
0
).
Para resolver esta recurrencia, denimos la funcion generatriz exponencial. La razon de intentar una funcion
generatriz exponencial en este caso es que el factor n se compensa parcialmente con n! en el denominador.

D(x) =

n0
D
n
x
n
n!
De la recursion tenemos para n 1:
D
n+1
n!
=
nD
n
n!
+
D
n1
(n 1)!
Entonces:

n1
D
n+1
x
n
n!
=

n1
nD
n
x
n
n!
+

n1
D
n1
x
n
(n 1)!
Notese que:

n1
D
n+1
n!
x
n
=
d
dx

n0
D
n+1
x
n1
(n + 1)!
=

D

(x)

n1
nD
n
n!
x
n1
=
d
dx

n1
D
n
x
n
n!
=

D

(x)

n1
D
n1
x
n1
(n 1)!
=

n0
D
n
x
n
n!
=

D(x)
28
y tenemos:

(x) = x

(x) +x

D(x)

(x)

D(x)
=
x
1 x
ln

D(x) =
_
x
0
x
1 x
dx
= ln
1
1 x
x

D(x) =
1
1 x
e
x
D
n
n!
=

0kn
(1)
k
k!
Igual que antes.
Queda de ejercicio intentar con una funcion generatriz ordinaria.
3.5. Cuantos strings de 2n parentesis balanceados hay?
Llamemos C
n
al n umero de strings de 2n parentesis balanceados. Estos son los n umeros de Catalan, que aparecen
con bastante frecuencia en aplicaciones combinatorias. Todo string de parentesis balanceados se puede dividir en
dos partes: El 2k-esimo parentesis cierra el primer parentesis (1 k n), y el resto. Por ejemplo, marcando este
comienzo con negrillas esta el string (()())(()(()))()(()()()). Los primeros valores son 1 (hay una unica forma de
tener cero parentesis balanceados), 1 (una forma de tener dos parentesis balanceados), 2 (tenemos las opciones ()()
y (()) aca), . . .
Llamamos perfecto a un string con n = k. Cuantos strings perfectos de largo 2n hay? Hay C
n1
, como muestra
la siguiente biyeccion:
Tomar un string balanceado cualquiera de largo 2n 2, y encerrarlo entre parentesis da un string perfecto de
largo 2n.
Tomar un string perfecto, y eliminar los ( ) de mas afuera da un string balanceado
Por lo anterior, un string balanceado de largo 2n se obtiene combinando:
Un string perfecto de largo 2k, para 1 k n: Hay C
k1
de estos.
Un string balanceado de largo 2n 2k: Hay C
nk
de ellos.
Sabemos que C
1
= 1, y hay una unica manera de tener ning un parentesis balanceado, o sea C
0
= 1 tambien. Luego,
como todo string se puede dividir de esta forma, y las mitades se pueden elegir en forma independiente:
C
n
=

1kn
C
k1
C
nk
=

0kn1
C
k
C
nk1
Esta recurrencia es valida para n 1.
La suma corresponde a una convolucion (el coeciente en el producto de series de potencias). Denimos
C(x) =

n0
C
n
x
n
29
para luego aplicar nuestra receta:

n1
C
n
x
n
=

n1
_

0kn1
C
k
C
nk1
_
x
n
C(x) 1 =

n0
_

0kn
C
k
C
nk
_
x
n+1
= x

n0
_

0kn
C
k
C
nk
_
x
n
= xC
2
(x)
Esto nos da:
xC
2
(x) C(x) + 1 = 0
Tenemos dos posibles valores para resolver la ecuacion:
C(x) =
1

1 4x
2x
Como ambas opciones son indeterminadas en x = 0, calculamos lmites, y debe ser C(0) = C
0
= 1. Resulta comodo
expandir la raz mediante el teorema del binomio:
lm
x0
1 +

1 4x
2x
=
lm
x0
1

1 4x
2x
= lm
x0
1 (1
1
2
(4x) . . .)
2x
= 1
La opcion correcta es el signo menos:
C(x) =
1

1 4x
2x
y solo queda obtener los coecientes. A esta se le ha llamado la funcion generatriz mas famosa de la combinatoria.
Usaremos la expansion en serie de la raz y simplicaremos el resultado luego. Este camino es mas sencillo
que obtener la serie directamente usando el teorema de Maclaurin (signicara obtener la n-esima derivada de esa
expresion complicada). Tenemos:
(1 4x)
1/2
=

n0
_
1/2
n
_
(4x)
n
= 1 +

n1
(1)
n1
2
2n1
n

_
2n 2
n 1
_
(4x)
n
= 1 +

n1
_
2n 2
n 1
_

_
2
2n
2
2n1

x
n
n
(1)
n1
(1)
n
_
= 1

n1
2
n
_
2n 2
n 1
_
x
n
Reemplazando esto en la expresion para la funcion generatriz se tiene:
1

1 4x
2x
=

n1
1
n
_
2n 2
n 1
_
x
n1
=

n0
1
n + 1
_
2n
n
_
x
n
30
con lo que:
C
n
=
1
n + 1
_
2n
n
_
Veremos varios ejemplos adicionales donde aparecen los n umeros de Catalan mas adelante.
Ejemplo Cuantas palabras de largo n formadas unicamente por las 5 vocales pueden formarse, si deben contener
un n umero par de vocales fuertes (a, e y o)?
De las solicitadas podemos formar 1 de largo 0, 2 de largo 1, 2 2 + 3 3 = 13 de largo 2, . . . Estos valores
sirven para vericar luego.
Podemos denir u
n
como el n umero de palabras de largo n con un n umero par de vocales fuertes, y v
n
como
el n umero de palabras de largo n con un n umero impar de vocales fuertes. Entonces tenemos que u
0
= 1, v
0
= 0.
Como una palabra con un n umero par de vocales fuertes puede obtenerse va agregar una vocal debil a una palabra
del mismo tipo (hay dos formas de hacer esto) o va agregar una vocal fuerte a una con un n umero impar de vocales
fuertes (de tres maneras). Podemos razonar de forma similar para palabras con un n umero impar de vocales fuertes,
y obtenemos:
u
n+1
= 2u
n
+ 3v
n
v
n+1
= 3u
n
+ 2v
n
Usando nuestra estrategia para resolver recurrencias, denimos funciones generatrices:
U(x) =

n0
u
n
x
n
V (x) =

n0
v
n
x
n
Multiplicamos las ecuaciones anteriores por x
n
y sumamos sobre n 0, obteniendo:

n0
u
n+1
x
n
= 2

n0
u
n
x
n
+ 3

n0
v
n
x
n

n0
v
n+1
x
n
= 3

n0
u
n
x
n
+ 2

n0
v
n
x
n
Expresado en terminos de las funciones generatrices denidas antes:
U(x) u
0
x
= 2U(x) + 3V (x)
V (x) v
0
x
= 3U(x) + 2V (x)
Con los valores iniciales y reorganizando:
U(x) = 2xU(x) + 3xV (x) + 1
V (x) = 3xU(x) + 2xV (x)
Resolvemos el sistema de ecuaciones para U(x), que es lo unico que realmente nos interesa, y descomponemos en
fracciones parciales:
U(x) =
1 2x
1 4x 5x
2
=
1
2

1
1 +x
+
1
2

1
1 5x
Podemos leer los u
n
de esto ultimo, que son simplemente dos series geometricas:
u
n
=
1
2
(5
n
+ (1)
n
)
Esto coincide con los valores obtenidos antes.
31
3.6. Particiones de enteros
Una de las areas de investigacion importantes en teora de n umeros en el siglo XX fue la teora de las particiones
de enteros. Aca veremos solo un par de resultados curiosos, que se conocen hace mucho.
3.6.1. Particiones en general
Sea p(n) el n umero de formas de escribir n como suma. Tenemos:
p(1) = 1 1
p(2) = 2 1 + 1 = 2
p(3) = 3 1 + 1 + 1 = 2 + 1 = 3
p(4) = 4 1 + 1 + 1 + 1 = 2 + 1 + 1 = 2 + 2 = 3 + 1 = 4
.
.
.
Si denimos la funcion generatriz:
P(x) =

n0
p(n)x
n
A la suma 1 puede aportar 0, 1, 2, . . . , lo que queda expresado en la serie geometrica 1/(1 x); de la misma forma
2 aporta 1/(1 x
2
); . . . ; y en general n aporta 1/(1 x
n
). La serie entonces se puede expresar como:
P(x) =

n0
1
1 x
n
3.6.2. Sumandos diferentes e impares
Analizando ahora la serie anterior pero poniendo como condicion que los sumandos no se pueden repetir el
aporte de n es 0 o n, lo que se reeja en un factor 1 + x
n
. Llamamos al n umero de estas particiones p
d
(n), por
dierent, y distinguimos as la funcion generatriz tambien:
P
d
(x) =

n0
p
d
(n)x
n
=

n0
(1 +x
n
)
Este producto podemos expresarlo de otra forma:
P
d
(x) =

n0
1 x
2n
1 x
n
=

n0
1
1 x
2n+1
Este producto corresponde a sumandos impares, y si escribimos p
o
(n) por el n umero de particiones en sumandos
impares (por odd), tenemos:
p
d
(n) = p
o
(n)
Curioso resultado, obtenido unicamente considerando las funciones generatrices del caso. Y ni siquiera evaluamos
ninguna de ellas.
32
3.7. Obtener funciones generatrices directamente
Supongamos que A(x) es la funcion generatriz ordinaria para las secuencias de 0, 1. Esta la podemos expresar
como:
A(x) =

secuencia s
x
largo de s
O sea, consideramos un x como marcando cada elemento de s. Mirando las cosas de esta forma, podemos expresar:
A(x) = 1 + 2xA(x)
Esto se interpreta como A(x) representando todas las secuencias, mientras 1 representa la secuencia de largo 0 (hay
una sola), y 2xA(x) corresponde a que dada una secuencia cualquiera obtenemos dos nuevas de largo uno mayor
agregando 0 y 1, respectivamente. Tenemos:
A(x) =
1
1 2x
a
n
= 2
n
Esto ya lo sabamos, pero esta derivacion es muy sencilla.
Sea ahora B(x) la funcion generatriz de secuencias de 0, 1 sin ceros adyacentes. Razonado en forma similar a
antes, una secuencia de estas es una secuencia que termina en uno (en cuyo caso, lo que viene antes es una de las
secuencias que nos interesa) o termina en cero (en este caso el pen ultimo smbolo es un uno, y lo que viene antes
de ese es una de las secuencias que nos interesa). Resulta:
B(x) = 1 +x +xB(x) +x
2
B(x)
=
1 +x
1 x x
2
Esta es casi la funcion generatriz de los n umeros de Fibonacci:
f(x) =
x
1 x x
2
Sabemos que F
0
= 0:
B(x) = f(x) +
f(x) F
0
x
[x
n
]B(x) = [x
n
]f(x) + [x
n
]
f(x) F
0
x
= F
n
+F
n+1
= F
n+2
y resulta b
n
= F
n+2
. Podemos vericar directamente que:
B(x) =
f(x) F
1
x F
0
x
2
Sea ahora C(x, y) la funcion generatriz de secuencias de 0, 1 sin ceros adyacentes, donde x marca el largo de
la secuencia e y marca los unos. Si c
n,k
es el n umero de secuencias de largo n que tienen k unos, entonces:
C(x, y) =

n 0
0 k n
c
n,k
x
n
y
k
De forma similar a antes, obtenemos:
C(x, y) = 1 +x +xyC(x, y) +x
2
yC(x, y)
33
La justicacion es que una de las secuencias que nos interesa o es vaca (aporta 0 en largo y 0 en unos, lo que se
traduce en x
0
y
0
= 1), o es un cero (aporta x
1
y
0
= x), o es una de las secuencias que nos interesa seguida por un
uno (ademas de esa secuencia aporta 1 en largo y 1 en unos, dando xyC(x, y)), o es una de las secuencias que nos
interesa seguida por uno cero (ademas de la secuencia base aporta 2 en largo y 1 en unos, vale decir, x
2
yC(x, y)).
Despejando y expandiendo una serie geometrica:
C(x, y) =
1 +x
1 xy x
2
y
=
1 +x
1 xy(1 +x)
= (1 +x)

k0
x
k
y
k
(1 +x)
k
=

k0
x
k
y
k
(1 +x)
k+1
De lo anterior:
c
n,k
=
_
x
n
y
k

i0
x
i
y
i
(1 +x)
i+1
= [x
n
] x
k
(1 +x)
k+1
=
_
x
nk

(1 +x)
k+1
=
_
k + 1
n k
_
Viendo esta curiosa formula, podemos interpretarla considerando que al haber k unos hay k + 1 posiciones en las
cuales podemos ubicar los n k ceros (antes del primer uno, entre los primeros dos unos, . . . , despues del ultimo
uno).
Otra manera de obtener la ecuacion para C(x) (la funcion generatriz de los n umeros de Catalan) es razonar
directamente como sigue: Sea C(x) nuestra funcion generatriz. Para obtener una de las secuencias que nos interesa,
hay dos posibilidades: La secuencia vaca (aporta 1), o una secuencia perfecta y una arbitraria cuyos tama nos suman
n 1. La secuencia perfecta es una arbitraria y un par de parentesis extra (aporta xC(x)) y resulta:
C(x) = 1 +xC
2
(x)
Se buscan las formas de obtener un canasto de n frutas si:
El n umero de manzanas tiene que ser par.
El n umero de platanos debe ser un m ultiplo de 5.
Hay a lo mas 4 naranjas.
Hay a lo mas 1 pera.
Por ejemplo tomemos un canasto de 6 frutas: En total hay 7 posibilidades.
Tipo (1) (2) (3) (4) (5) (6) (7)
Manzanas 6 4 4 2 2 0 0
Platanos 0 0 0 0 0 5 5
Naranjas 0 2 1 4 3 1 0
Peras 0 0 1 0 1 0 1
Para ver como aplicar funciones generatrices, veamos primero la situacion en que tenemos solo manzanas y
platanos. Consideremos que x marca el n umero total de frutas, y que m
k

0
es la secuencia de formas de obtener
k manzanas mientras p
k

0
corresponde a los platanos; y f
k

0
la secuencia de las maneras de obtener k frutas.
Para un total de 4 frutas es:
f
4
= m
0
p
4
+m
1
p
3
+m
2
p
2
+m
3
p
3
+m
4
p
0
34
Esta es exactamente la forma en que calcularamos el coeciente de x
4
en la serie:
_

k0
m
k
x
k
_

k0
p
k
x
k
_
Vale decir, la funcion generatriz ordinaria de f
k

0
es el producto de las funciones generatrices de m
k

0
y p
k

0
.
Podemos extender esto a los demas tipos de frutas, y las funciones generatrices correspondientes a nuestro
problema son:
Para manzanas se tiene:
1 +x
2
+x
4
+. . . =
1
1 x
2
Para platanos se tiene:
1 +x
5
+x
10
+. . . =
1
1 x
5
Para las naranjas:
1 +x +x
2
+x
3
+x
4
=
1 x
5
1 x
Las peras aportan:
1 +x
Combinando las anteriores:
g(x) =
1
1 x
2

1
1 x
5

1 x
5
1 x
(1 +x)
=
1
(1 x)
2
Por lo tanto hay (1)
n
_
2
n
_
=
_
n+1
1
_
= n+1 maneras diferentes de llenar el canasto con n frutas, lo que es consistente
con el resultado que obtuvimos antes.
Esta forma de ver las cosas da una aproximacion adicional al teorema del binomio. Cada uno de los n elementos
queda representado por 1+x, con lo que la funcion generatriz del n umero de maneras de elegir k elementos de entre
n, debe ser simplemente (1 +x)
n
:

0kn
_
n
k
_
x
k
= (1 +x)
n
Si tenemos 10 libros de tapa negra y 7 de tapa roja, e interesa saber de cuantas formas pueden elegirse 3 libros,
esto sera una de las siguientes posibilidades:
N R Opciones Totales
0 3 1 35 1 35 = 35
1 2 10 21 10 21 = 210
2 1 45 7 45 7 = 315
3 0 120 1 120 1 = 120
Gran total 680
Si n
i
y r
i
son los n umeros de maneras de elegir libros negros y rojos, respectivamente, entonces:

0i3
n
i
r
3i
que es precisamente la forma en que se calculara el coeciente de x
3
en el producto de las funciones generatrices
ordinarias de las secuencias n
i

0
y r
i

0
.
Si ahora consideramos diferente el orden en que se ubican 6 de los libros, tendremos para el caso de elegir 4
libros negros y 2 rojos:
35
Los libros negros se pueden elegir en 10 9 8 7 = 5 040 ordenes diferentes
Los libros rojos se pueden elegir en 7 6 = 42 ordenes diferentes
Una vez elegidos los libros (1
er
libro negro, 2
o
libro negro, . . . ; 1
er
libro rojo, 2
o
libro rojo, . . . ), queda por
decidir en que posiciones de las 6 se ubican los 4 libros negros, cosa que se puede hacer de
_
6
4
_
= 15 formas.
Al hacer esto los libros rojos se ubicaran en las posiciones restantes.
En resumen, hay 15 5 040 42 = 3 175 200 opciones.
En total, en este caso si N
i
y R
i
son los n umeros de maneras de elegir en orden i libros negros y rojos, respectiva-
mente, las maneras de ordenar 6 libros son:

0i6
_
6
i
_
N
i
R
6i
Esto corresponde precisamente a la forma de multiplicar las series generatrices exponenciales de las secuencias
N
i

0
y R
i

0
.
Ejemplo Supongamos la tpica mezcla coctel: Man, pasas y almendras. Nos interesa saber de cuantas formas
puedo tener un total de n de estas.
Si tengo una almendra y un man, la forma de representar las combinaciones posibles esta dada por:
(1 +x) (1 +x) = 1 + 2x +x
2
El primer factor 1 +x indica que hay 1 forma de tener 0 almendras en nuestra mezcla (1 x
0
) y 1 forma de tener 1
almendra (1 x
1
). De forma analoga se tiene 1 +x para el man. En el resultado, los coecientes indican que hay 1
manera de tener nada, 2 maneras de tener 1 (1 almendra o 1 man) y 1 manera de tener 2 (1 almendra y 1 man).
Ahora si hay innitos componentes de cada tipo, y solo nos interesa la cantidad de cada uno de ellos, la
secuencia es 1

0
(hay 1 manera de tener 0 mans, 1 manera de tener 1 man, 1 manera de tener 2 mans, . . . ), y
nos enfrentamos con la serie:
1 +x +x
2
+x
3
+. . . =
1
1 x
Por lo tanto, las maneras de obtener n items en total (pasas, man y almendras) tiene la funcion generatriz ordinaria:
g(x) =
1
(1 x)
3
=

n0
_
2
n
_
(1)
n
x
n
=

n0
(n + 1)(n + 2)
2
x
n
lo que nos da la respuesta que hay [x
n
]g(x) = (n + 1)(n + 2)/2 maneras de obtener n pasas, man y almendras.
Ejemplo Si ahora nos interesara no solo la cantidad de cada tipo de tem, sino nos interesa el orden en que
ingerimos los ingredientes, nuevamente la secuencia que describe cada uno de ellos es 1

0
(hay solo una forma de
ordenar n mans identicos), y las funciones generatrices exponenciales correspondientes son:

n0
x
n
n!
= e
x
Para los tres ingredientes tenemos entonces:
G(x) = e
x
e
x
e
x
= e
3x
=

n0
3
n
x
n
n!
y la respuesta es 3
n
.
36
Ejemplo Otra variante del mismo tema es cuando interesa el orden en que viene cada ingrediente (ya no son
identicos, sino cada uno viene numerado). En tal caso, cada ingrediente queda representado por la secuencia n!

0
(hay n! maneras de ordenar n mans), con funcion generatriz exponencial:

n!0
n!
x
n
n!
=
1
1 x
y la funcion generatriz exponencial para los ordenamientos respectivos es (1 x)
3
. As tenemos
1
(1 x)
3
=

n0
_
n + 2
2
_
x
n
=

n0
n!
_
n + 2
2
_
x
n
n!
El n umero buscado es:
n!
_
n + 2
2
_
=
(n + 2)!
2
Ejemplo Cambio de monedas
Cuantas formas hay de dar US$ 2?
Analizando el aporte de los cambios de monedas se tiene:
1 1 +x +x
2
+. . . =
1
1 x
5 1 +x
5
+x
10
+. . . =
1
1 x
5
10 1 +x
10
+x
20
+. . . =
1
1 x
10
25 1 +x
25
+x
50
+. . . =
1
1 x
25
50 1 +x
50
+x
100
+. . . =
1
1 x
50
La funcion generatriz del n umero de maneras de entregar n centavos es entonces
1
1 x

1
1 x
5

1
1 x
10

1
1 x
25

1
1 x
50
Luego bastara calcular la serie hasta obtener el coeciente de x
200
para responder a la consulta. . .
3.8. Cuando usar funciones generatrices ordinarias o exponenciales
Resumiendo las observaciones anteriores, podemos decir lo siguiente: Supongamos que tenemos objetos de tipo
A, de los cuales hay a
n
de tama no n, y objetos de tipo B, de los cuales hay b
n
de tama no n. Si se crean los objetos
de tipo C de tama no m + n combinando un objeto A de tama no m y uno B de tama no n de todas las formas
posibles, esto corresponde a c
n
objetos de tipo C, donde
c
n
=

0kn
a
k
b
nk
Esto resulta de considerar todas las combinaciones posibles de tama nos de los objetos A y B que conforman el C.
Si denimos funciones generatrices ordinarias:
A(x) =

n0
a
n
x
n
B(x) =

n0
b
n
x
n
C(x) =

n0
c
n
x
n
37
resulta:
C(x) = A(x) B(x)
Si ahora los objetos A de tama no n tienen n partes numeradas 1, 2, . . . , n, y similarmente los objetos de tipo
B y D, ademas de combinar los objetos mismos tenemos que distribuir los m + n n umeros que corresponden al
objeto D que es la combinacion entre la parte A (le tocan m n umeros) y la parte B (queda con los n restantes).
Esto puede deberse a posiciones que ocupan las partes del objeto A en el objeto D o pueden ser rotulos asignados a
las partes. As, con un objeto de tipo A de tama no m y uno B de tama no n hay
_
m+n
m
_
combinaciones que pueden
construirse, y sumando sobre todos los posibles tama nos de los objetos A y B nos queda para el n umero de objetos
D que pueden construirse:
d
n
=

0kn
_
n
k
_
a
k
b
nk
Si denimos funciones generatrices exponenciales:

A(x) =

n0
a
n
x
n
n!

B(x) =

n0
b
n
x
n
n!

D(x) =

n0
d
n
x
n
n!
resulta:

D(x) =

A(x)

B(x)
Estas relaciones son las que hacen que la herramienta de funciones generatrices sea de importancia fundamental en
combinatoria.
4. Principio de inclusi on y exclusi on
Habamos considerado antes la situacion de contar los elementos contenidos en la union entre dos conjuntos,
concluyendo que
[A B[ = [A[ +[B[ [A B[
La situacion se complica rapidamente cuando se consideran mas conjuntos y sus intersecciones. Por ejemplo, para
calcular [AB B[, comenzamos con [A[ +[B[ +[C[. Pero hemos incluido las intersecciones dos veces (como en el
caso de dos conjuntos), y debemos restar [AB[ +[AC[ +[B C[. Pero esto a su vez hace que hayamos restado
[A B C[ demas, y debemos restituirlo:
[A B B[ =
_
[A[ +[B[ +[C[
_

_
[A B[ +[A C[ +[B C[
_
+[A B C[
Al resultado general se le llama principio de inclusion y exclusion, porque incluimos demas, y luego corregimos
excluyendo.
En lo que sigue atacaremos el caso general. El tratamiento que sigue es denitivamente no tradicional, segui-
mos [12]. Tomamos un conjunto universo, y los conjuntos que consideramos se representan mediante propiedades
(un elemento pertenece a uno de los conjuntos si tiene la propiedad que representa a ese conjunto). Las diversas
intersecciones quedan expresadas a traves de los elementos que tienen todas las propiedades correspondientes a los
conjuntos intersectados.
Sean:
: El universo. Un conjunto de objetos.
P: Un conjunto de propiedades que los objetos pueden tener
38
S: Un subconjunto de las propiedades, S P.
N( S): N umero de objetos con las propiedades en S (esto no quiere decir que no puedan tener otras).
Buscamos la forma de calcular cuantos objetos tienen exactamente t de las propiedades.
Para r 0 jo denimos:
N
r
=

|S|=r
N( S)
Esto corresponde a la suma del tama no de los conjuntos de objetos con al menos r de las propiedades, lo que
perfectamente puede ser mayor que [[. Estos n umeros en general no tienen signicado claro, N
2
corresponde a
una suma como [A B[ + [A C[ + [B C[ que aparece en el calculo de la union de tres conjuntos visto antes.
Notese eso s que N
0
= [[, ya que considera todos los conjuntos de objetos con a lo menos cero propiedades, y eso
es simplemente el universo mismo. De la misma forma, si hay r propiedades en total, entonces N
r
es simplemente
el n umero de objetos con todas las propiedades, ya que hay un unico conjunto a considerar en este caso. Ilustrando
esto en el ejemplo con tres conjuntos, tenemos que N
3
= [A B C[.
Denote un objeto cualquiera, y llamemos P() al conjunto de propiedades de . Entonces:
N
r
=

|S|=r
N( S)
=

|S|=r
_


S P()
1
_
=

_

S P()
|S| = r
1
_
=

_
[P()[
r
_
En espa nol dice: Si el objeto tiene un total de [P()[ propiedades, puedo elegir r de sus propiedades de
_
|P()|
r
_
formas.
Ahora sea e
t
el n umero de objetos con exactamente t propiedades, es decir
e
t
=

|P()|=t
1
Expresando N
r
como una suma sobre el n umero de propiedades de los objetos, como cada uno de los e
t
objetos
con exactamente t propiedades aporta lo mismo (se considera en N
r
una vez por cada subconjunto de r de sus
propiedades):
N
r
=

_
[P()[
r
_
=

t0
_
t
r
_
e
t
De lo anterior (un sistema de lineal de ecuaciones) se busca despejar los e
t
. Para esta tarea denimos las funciones
generatrices:
E(x) =

t0
e
t
x
t
N(x) =

r0
N
r
x
r
39
Siguiendo la receta vista antes:

r0
N
r
x
r
=

r0
_

t0
_
t
r
_
e
t
_
x
r
=

t0
e
t
_

r0
_
t
r
_
x
r
_
=

t0
e
t
(1 +x)
t
O sea:
N(x) = E(1 +x)
E(x) = N(x 1)
De la expresion anterior podemos extraer el e
t
que se quiera:
e
t
=
_
x
t

E(x)
=
_
x
t

N(x 1)
=
_
x
t

r0
N
r
(x 1)
r
=

r0
N
r
_
x
t

(x 1)
r
=

r0
(1)
tr

_
r
t
_
N
r
Esta formula expresa el celebrado principio de inclusion y exclusion. Ademas de ser mucho mas simple que la
demostracion tradicional, la ventaja de nuestro desarrollo es que no hace necesario recordar esta engorrosa formula,
nos da las herramientas para deducirla sin mayor esfuerzo cada vez que la necesitemos, y en muchos casos obtener
los resultados buscados directamente sin tener que recurrir a ella.
Tpicamente interesa saber cuantos objetos no tienen ninguna de las propiedades:
e
0
= E(0) = N(1)
Si hay t propiedades en total, entonces e
t
= N
t
, ya que suma los tama nos de todos los conjuntos de objetos que
tienen a lo menos t de las propiedades, y eso considera exactamente al unico conjunto de los que tienen todas las
propiedades. En nuestro ejemplo de tres conjuntos, e
0
es el tama no del complemento de A B C, mientras e
3
es
el tama no de la interseccion entre los tres, e
3
= [A B C[. Tenemos tambien que
[A B C[ = [[ e
0
= e
1
+e
2
+e
3
Esto era lo que buscabamos originalmente.
Si solo nos interesa calcular el n umero promedio de propiedades por objeto, como t =
_
t
1
_
resulta:

t =

t0
te
t
/

t0
e
t
=
N
1
N
0
Receta
1. Denir y P, expresar lo que se busca en terminos de e
t
2. Calcular los N( S)
40
3. Calcular los N
r
, y en consecuencia obtener N(x).
4. e
t
= [x
t
] N(x 1).
Hay que tener cuidado con esto, aca las series deben converger para que nuestras operaciones tengan sentido.
Normalmente el n umero de propiedades y objetos de interes es nito, as que en realidad estamos manipulando
polinomios y no hay problemas.
Ejemplo Un curso rinde pruebas con los profesores Ellery, Upham y Atwood. Sabemos que 12 pasaron la prueba
de qumica, 15 la de matematicas y 10 la de fsica; 8 pasaron qumica y matematicas, 5 pasaron qumica y fsica, 6
pasaron matematicas y fsica. Sabemos que el total de estudiantes que pasaron al menos una prueba es 20. Cuantos
pasaron las tres pruebas?
Aplicamos nuestra receta:
1. El universo es el grupo de 20 estudiantes que aprobaron alguna de las pruebas, las propiedades son las pruebas
aprobadas (Q, F, M). Nos interesan los que aprobaron todas las pruebas, o sea e
3
.
2. Algunos de los N( S) estan dados en el enunciado del problema. Por ejemplo, dice que N( Q, F) = 5.
3. Para calcular los N
r
tenemos:
N
0
= [[ = 20
N
1
= N( Q) +N( M) +N( F)
= 12 + 15 + 10
= 37
N
2
= N( Q, M) +N( Q, F) +N( M, F)
= 8 + 5 + 6
= 19
N
3
= N( Q, M, F)
Como se comento antes, al haber 3 propiedades es N
3
= e
3
. Sabemos tambien que e
0
= 0 (entre los consi-
derados no hay nadie que no haya aprobado al menos una prueba). La funcion generatriz de los N
r
resulta
ser:
N(x) = 20 + 37x + 19x
2
+e
3
x
3
4. Sabemos que nuestro universo no incluye estudiantes que no han aprobado al menos una de las pruebas,
as que:
e
0
= 0 = E(0) = N(1) = 2 e
3
Con esto resulta e
3
= 2.
Pero tambien tenemos:
E(x) = N(x 1)
= 5x + 13x
2
+ 2x
3
lo que nos dice que 5 aprobaron una unica prueba y que 13 aprobaron dos.
Ejemplo Determinar cuantos n umeros de largo n escritos en decimal tienen un n umero par de ceros.
Aca nuestro universo es el conjunto de todos los n umeros con n dgitos. La propiedad i es que el dgito i-esimo
es cero. Lo que nos interesa entonces es:
e
0
+e
2
+. . . =

r0
e
2r
41
Podemos extraer unicamente los terminos con potencia par mediante:
E(x) +E(x)
2
=

t0
e
2t
x
2t
y nuestra suma no es mas que:
E(1) +E(1)
2
Un n umero decimal de n dgitos comienza con un dgito no cero, los demas n 1 dgitos pueden ser cualquiera.
En este caso podemos calcular los e
r
directamente, observando que hay r posiciones para los ceros, elegidas de entre
n 1 posiciones, los otros n r dgitos (incluyendo el primero) pueden tomar uno de los 9 valores restantes:
e
r
=
_
n 1
r
_
9
nr
E(x) = 9

r0
_
n 1
r
_
9
n1r
x
r
= 9 (9 +x)
n1
y el n umero buscado resulta ser:
1
2
(E(1) +E(1)) =
1
2
_
9 (9 + 1)
n1
+ 9 (9 1)
n1
_
=
9
2
_
10
n1
+ 8
n1
_
Ejemplo Puntos jos de permutaciones.
Este es un tema que ya hemos visto (derangements), pero aca obtendremos una vision adicional.
Siguiendo nuestra receta:
1. : Las n! permutaciones de n elementos. Una permutacion tiene la propiedad i si i es un punto jo de la
permutaci on. Nos interesa obtener e
0
.
2. Sea S 1, . . . , n. Entonces N( S) corresponde a las permutaciones para las cuales los elementos de S son
jos, solo se pueden mover los n [S[ restantes:
N( S) = (n [S[)!
3. Como r puntos jos pueden elegirse de
_
n
r
_
maneras, se tiene que:
N
r
=

|S|=r
N( S)
=

|S|=r
(n r)!
=
_
n
r
_
(n r)!
Con esto:
N(x) =

0rn
_
n
r
_
(n r)!x
r
=

0rn
n!
r!(n r)!
(n r)! x
r
= n!

0rn
x
r
r!
42
Denamos la funcion exponencial truncada en n como:
exp[
n
(x) =

0rn
x
r
r!
Entonces:
N(x) = n! exp[
n
(x)
4. Finalmente buscamos e
t
:
e
t
=
_
x
t

n! exp[
n
(x 1)
En particular, e
0
es el n umero de derangements de n, o sea D
n
= e
0
= E(0) = N(1):
D
n
= n! exp[
n
(1)
n!e
1
Este resultado ya lo habamos obtenido.
Mas en general, tenemos tambien:
e
t
= n!
_
x
t


0rn
(x 1)
r
r!
= n!
_
x
t


0rn

0kr
1
r!
_
r
k
_
x
k
(1)
rk
= n!

0rn
1
r!
_
r
t
_
(1)
rt
= n!

trn
(1)
rt
t!(r t)!
=
n!
t!

0rnt
(1)
r
r!
=
n!
t!
exp[
nt
(1)
El n umero promedio de puntos jos es:

t =
N
1
N
0
=
_
n
1
_
(n 1)!
n!
= 1
Curiosamente no depende de n.
El principio de inclusion y exclusion completa las herramientas elementales de la combinatoria vistas anterior-
mente.
5. La formula de inversi on de Lagrange
La formula de inversion de Lagrange es una herramienta notable para resolver ecuaciones de la forma:
u = t(u)
43
donde es una funcion dada de u. Esta relacion dene u en funcion de t, y estamos despejando u en terminos de
t. La utilidad en combinatoria resulta porque al derivar la ecuacion para la funcion generatriz G(x) tpicamente
tendremos un caso vaco (aporta 1) y x veces alguna expresion que involucra a G, que representa casos anteriores
y este. Con la substitucion u = G(x) 1 la ecuacion queda de la forma indicada. Veremos un par de ejemplos mas
adelante.
Teorema 5.1 (Formula de Inversion de Lagrange). Sean f(u) y (u) series formales de potencias en u, con
(0) = 1. Entonces hay una unica serie formal u = u(t) que cumple:
u = t(u)
Ademas, el valor f(u(t)) de f en la raz u = u(t), expandida en serie alrededor de t = 0, cumple:
[t
n
] f(u(t)) =
1
n
_
u
n1

(u)(u)
n

Dadas las funciones f y , esta formula nos da los coecientes de f(u(t)) en bandeja. No demostraremos este
resultado, ya que nos llevara demasiado fuera del rango de este ramo. La demostracion de esta forma del teorema
puede encontrarse en [12].
Ejemplo

Arboles binarios.
Un arbol binario es vaco, o es una raz y un subarbol binario izquierdo y un subarbol binario derecho. Denimos
b
n
como el n umero de arboles binarios con n nodos, con funcion generatriz ordinaria B(x). Directamente, ya que
obtenemos los arboles de tama no n de combinar un nodo con dos subarboles cuyos tama nos suman n 1:
B(x) = 1 +xB
2
(x)
Sabemos que esta relacion para la funcion generatriz nos lleva a los n umeros de Catalan (ver seccion 3.5), o sea
resulta b
n
= C
n
. Si ahora denimos u(x) = B(x) 1, queda:
u(x) = x(u(x) + 1)
2
Con (u) = (u + 1)
2
esta es la forma a la que es aplicable la formula de inversion de Lagrange, ya que (0) = 1.
Tenemos entonces, como en nuestro caso interesa f(u) = u:
[x
n
] u(x) =
1
n
_
u
n1

(u)(u)
n

=
1
n
_
u
n1

(u + 1)
2n
=
1
n
_
2n
n 1
_
=
1
n + 1
_
2n
n
_

Esto nos da unicamente los coecientes para n 1 (solo estos coecientes de B y de u = B 1 coinciden). Por
casualidad la formula nal, luego de simplicar, cubre correctamente el caso b
0
= 1. Casi indoloro.
Ejemplo

Arboles ternarios.
Son similares a los arboles binarios, pero cada nodo tiene tres descendientes. Vale decir, un arbol ternario es vaco,
o un nodo raz ademas de tres subarboles ternarios (el izquierdo, el central y el derecho) Nos interesa determinar
cuantos arboles ternarios de n nodos hay. Llamemos t
n
a esta cantidad. Claramente t
0
= 1. Aplicando nuestra
receta anti-recurrencias, denimos:
T(x) =

n0
t
n
x
n
De la denicion, un arbol ternario de n 1 nodos consta de un nodo raz y tres subarboles, cuyos tama nos suman
n 1. Como los tres subarboles pueden elegirse independientemente:
T(x) = 1 +xT
3
(x)
44
Usando la misma idea anterior, denimos u = T 1, (u) = (u + 1)
3
, f(u) = u, y la formula nos da:
[x
n
] u(x) =
1
n
_
u
n1

(u)(u)
n

=
1
n
_
u
n1

(u + 1)
3n
=
1
n
_
3n
n 1
_
=
1
2n + 1
_
3n
n
_
Seguir en este caso el camino que emprendimos originalmente en la seccion 3.5 cuando derivamos los n umeros de
Catalan lleva a la c ubica xT
3
(x) T(x) +1 = 0, resolviendo esta (maxima [6] ayuda mucho con las manipulaciones
rutinarias) da las tres soluciones:
T
1
=
_

3 i
2

1
2
_
_
_
_
27 x4
x
6

3 x

1
2 x
_
_
1/3
+

3 i
2

1
2
3 x
_

27 x4
x
6

3 x

1
2 x
_
1/3
T
2
=
_

3 i
2

1
2
_
_
_
_
27 x4
x
6

3 x

1
2 x
_
_
1/3
+

3 i
2

1
2
3 x
_

27 x4
x
6

3 x

1
2 x
_
1/3
T
3
=
_
_
_
27 x4
x
6

3 x

1
2 x
_
_
1/3
+
1
3 x
_

27 x4
x
6

3 x

1
2 x
_
1/3
Nos interesan soluciones reales, por lo que la rama correcta es T
3
(x). Extraer los coecientes (para vericar nuestros
resultados anteriores) debera quedar de ejercicio.
Ejemplo

Arboles ordenados
Un arbol ordenado es vaco, o consta de un nodo raz unicamente, o es un nodo raz y uno o mas subarboles no
vacos ubicados en un orden especco.
Sea a
n
el n umero de arboles ordenados de n nodos. Denimos la funcion generatriz:
A(x) =

n0
a
n
x
n
Directamente de la denicion anterior, como A(x) 1 representa arboles ordenados no vacos:
A(x) = 1 +x +x
_
(A(x) 1) + (A(x) 1)
2
+. . .
_
= 1 +x
_
1 + (A(x) 1) + (A(x) 1)
2
+. . .
_
= 1 +x
1
1 (A(x) 1)
Si denimos u = A(x) 1, resulta:
u = x
1
1 u
45
y la formula de inversion nos da para n 1 (sabemos que a
0
= 1):
a
n
= [x
n
]u(x)
=
1
n
[u
n1
](1 u)
n
=
1
n
(1)
n1
_
n
n 1
_
=
1
n

_
2n 2
n 1
_
De nuevo bastante indoloro.
El lector astuto reconoce inmediatamente que para n > 0 es a
n
= C
n1
, aparecen nuevamente los n umeros de
Catalan.
6. Aproximaciones
Nos interesa, por ejemplo, hallar una buena aproximacion para n!. Primero consideremos:
ln n! =

1kn
ln k

1kn
ln n
= nln n
con lo que n! n
n
.
Ahora demostraremos que nln n no es tan mala aproximacion. Consideremos:
i(n i + 1) n si 1 i n
Para demostrar esto, buscamos el valor mnimo de esta expresion en este rango.
f(x) = x(n x + 1)
f

(x) = n 2x + 1
f

(x) = 2
Como la raz de f

(x) esta al medio del rango, y f

(x) = 2 el punto crtico es un maximo. Por simetra se concluye


que los mnimos estan en los extremos:
f(1) = f(n) = n
En vista de lo anteriormente demostrado:

1in
i(n i + 1) n
n
(n!)
2
n
n
n! n
n/2
En resumen:
n
n/2
n! n
n
La aproximacion ln n! = nln n no es tan mala.
Otra forma de obtener una aproximacion de una suma la da la gura 1. La idea es acotar la suma (representada
por el area bajo la escalera) mediante integrales (areas bajo curvas que pasan por los vertices de la escalera). Las
46
0
0.5
1
1.5
2
2.5
1 2 3 4 5 6 7 8 9 10
log(floor(x))
log(x)
log(x - 1)
Figura 1: Cotas para el logaritmo natural de n!
areas bajo las curvas nos permiten concluir la siguiente relacion:
_
n+1
2
ln(x 1) dx ln n!
_
n+1
1
ln xdx
Calcular las integrales es rutina, y nos da las cotas:
e
_
n
e
_
n
n! e
_
n + 1
e
_
n+1
Un analisis mas preciso usando la formula de Euler-Maclaurin para aproximar la diferencia entre la sumatoria y la
integral lleva a la formula de Stirling:
n!

2n
_
n
e
_
n
7. Grafos
En matematicas, un grafo corresponde a una abstraccion de la situacion en la cual hay objetos (vertices), algunos
de los cuales estan conectados entre s (mediante arcos). El interes es razonar solo con el hecho que existen o no
conexiones entre los vertices. Aplicaciones de grafos son circuitos electricos, donde interesa como estan conectados
entre s los componentes (ver un ejemplo en la gura 2) y representaciones de redes de transporte. Muchas estructuras
de datos, particularmente las enlazadas, pueden representarse mediante grafos, y muchos problemas de optimizacion
importantes se modelan mediante grafos. Tambien sirven como notacion graca de algunos modelos de computacion.
Una advertencia: A pesar de ser un area bastante antigua de las matematicas, a un no hay consenso en la notacion
o la nomenclatura. En caso de duda, revise las deniciones dadas por el autor.
Formalmente:
Denicion Un grafo G = (V, E) consta de:
V: Conjunto nito de vertices. Por razones tecnicas se suele dejar fuera la posibilidad V = .
47
Figura 2: Diagrama de circuito de un ltro de paso bajo de tercer orden [4]
E: Conjunto de arcos, pares de vertices pertenecientes a V . Un arco a, b E consta de a, b V .
Consideramos en esta denicion que un arco conecta un par de vertices diferentes (sin importar el orden), y no
pueden haber varios arcos uniendo el mismo par de vertices.
Dos vertices contenidos en un arco se llaman adyacentes. Si de un grafo G = (V, E) se eliminan arcos o vertices
(con los arcos que los contienen) el resultado G

= (V

, E

) es un subgrafo.
Para nuestros efectos no interesa el caso de conjuntos innitos de vertices.
Variantes de grafos son multigrafos, en los cuales se permiten varios arcos entre el mismo par de vertices, e
incluso arcos que comienzan y terminan en el mismo vertice. Muchas de nuestras conclusiones se aplican a ellos
tambien, pero no los trataremos explcitamente.
Ejemplo Denicion de un grafo.
G dado por:
V = a, b, c, d, z
E = a, b, a, d, b, z, c, d, d, z
Gracamente esta dado por la gura 3. Notar que a conectado con b o b conectado con a, para el caso signica lo
d
z
a
c
b
Figura 3: Un grafo
mismo, sin importar la ruta o la distancia del arco. Solo el hecho que estan conectados importa.
7.1. Representaci on de grafos
El dibujo es util para seres humanos, pero bastante in util para razonar con el o para el uso en computadoras.
Veremos algunas opciones adicionales.
48
7.1.1. Lista de adyacencia
La lista de adyacencia es una tabla donde para cada vertice se listan los vertices adyacentes. Para el caso del
grafo de la gura 3 se tiene la lista de adyacencia en la tabla 1.
V Ady
a b, z
b a, z
c d
d a, c, z
z b, d
Cuadro 1: Lista de adyacencia para el grafo de la gura 3
7.1.2. Matriz de adyacencia
Representar un grafo mediante una matriz de adyacencia corresponde a denir una matriz conndices los vertices,
y los elementos son 1 o 0 dependiendo de si los vertices del caso estan conectados o no. El grafo de la gura 3 queda
representado en la tabla 2: Es claro que esta matriz es simetrica (vale decir, a[i, j] = a[j, i]), y los elementos en la
a b c d z
a 0 1 0 1 0
b 1 0 0 0 0
c 0 0 0 1 0
d 1 0 1 0 1
z 0 1 0 1 0
Cuadro 2: Matriz de adyacencia del grafo de la gura 3
diagonal son todos cero (porque no hay arcos que conectan vertices consigo mismos)).
7.1.3. Representacion enlazada
Una opcion natural es representar los vertices por nodos con punteros que lo conectan a sus vecinos. Como el
n umero de vecinos no necesariamente es el mismo (o siquiera razonablemente acotado) una opcion es que cada nodo
tenga una lista de punteros a los vecinos (termina siendo algo similar a las listas de adyacencia).
7.1.4. Representacion implcita
En muchas aplicaciones el grafo nunca existe como estructura de datos, se van generando (y descartando) los
vertices vecinos conforme se requieren. Un ejemplo de esta situacion se da cuando un programa juega al ajedrez:
Los nodos son posiciones de las piezas, y dos nodos son adyacentes si son posiciones relacionadas mediante una
movida. El grafo del caso es nito, pero tan grande que es totalmente impracticable generarlo completo (y a un
menos almacenarlo). Se van generando los vertices conforme los requiera el programa.
7.2. Isomorsmo entre grafos
Intuitivamente, si dos grafos pueden dibujarse de la misma forma, los consideraremos iguales. Sin embargo, como
los conjuntos de vertices (y en consecuencia, arcos) no seran los mismos, esta idea debe interpretarse de otra forma.
Denicion Si G
1
= (V
1
, E
1
) y G
2
= (V
2
, E
2
) son grafos se dice que son isomorfos si existe una biyeccion : V
1
V
2
tal que (u), (v) E
2
siempre que u, v E
1
.
Algunas reglas simples que resultan de la denicion es que al buscar isomorsmos solo deben considerarse como
candidatos vertices del mismo grado, y que vertices adyacentes deberan mapear a vertices adyacentes. En todo
caso, hallar un isomorsmo entre un par de grafos (o demostrar que no lo hay) es muy difcil en el caso general, no
se conocen (y se sospecha que no existen) algoritmos ecientes para ello.
49
Ejemplo Isomorsmo entre grafos
La gura 4 muestra un par de grafos isomorfos, indicando las correspondencias entre vertices.
a
b
c
d
e
f
e
c
a
f
d
b
Figura 4: Ejemplo de isomorsmo entre grafos
7.3. Algunos grafos especiales
Algunos grafos se repiten en aplicaciones, o son utiles para ejemplos y casos de estudio. Se les dan nombres y
notacion especiales.
K
n
: Grafo completo de n vertices cada uno conectado con todos los demas. La gura 5 muestra algunos
ejemplos.
Figura 5: Algunos grafos K
n
.
C
n
: Ciclo de n vertices, donde el vertice i esta conectado con los vertices i 1 e i +1 modulo n. Ver gura 6.
Figura 6: Algunos grafos C
n
.
W
n
: Rueda (wheel) de n vertices, que consiste en un grafo C
n
mas un centro conectado a cada vertice.
Algunas ruedas las muestra la gura 7.
Q
n
: Cubo de orden n. Donde:
Vertices: Strings de n smbolos 0, 1.
Arcos: Conectan a todos los pares de vertices que dieren en un smbolo.
Ejemplo La lista de adyacencia de un cubo de orden 3 la muestra la tabla 3.
50
Figura 7: Algunos grafos W
n
.
V Adyacentes
000 001, 010, 100
001 000, 011, 101
010 011, 110, 000
011 111, 010, 001
100 110, 101, 000
101 100, 111, 001
110 111, 101, 010
111 110, 011, 101
Cuadro 3: Lista de adyacencia del grafo Q
3
7.4. Grado de un vertice
Denicion Sea G = (V, E) un grafo. El grado de un vertice es el n umero de otros vertices conectados a el. Para
v V es (v) = [e E: v e[.
Teorema 7.1. Sea G = (V, E) un grafo, entonces:

vV
(v) = 2 [E[
Demostracion. Consideremos S V E tal que (v, e) S siempre que v e. Contando los elementos de S por
las y por columnas tenemos:
Por las: Cada vertice aparece una vez por cada arco en el cual participa:
[S[ =

vV
(v)
Por columnas: Cada vertice aparece dos veces (una por cada extremo del arco):
[S[ =

eE
2 = 2 [E[
Estas dos expresiones deben ser iguales, lo que corresponde precisamente a lo que se quera demostrar.
Lema 7.2 (Handshaking). El n umero de vertices de grado impar en un grafo es par.
Demostracion. Sean V
o
los vertices de grado impar y V
e
los vertices de grado par del grafo. Entonces:

vVo
(v) +

vVe
(v) = 2 [E[
El lado derecho de esta ecuacion es par. El segundo termino del lado izquierdo es una suma de n umeros pares, por
lo que es par. Entonces el primer termino debe ser par, pero es la suma de n umeros impares. La unica posibilidad
es que haya un n umero par de estos, que es exactamente lo que se quera demostrar.
Denicion Se le llama regular a un grafo en el cual (v) es el mismo para todos los vertices.
51
Ejemplo Es posible tener grafos con vertices de grados como los de esta lista?
1. 2 2 2 3
2. 1 2 2 3 4
3. 2 2 4 4 4
4. 1 2 3 4
Respuesta:
1. Sabemos que

vV
(v) = 2 [E[, aca

vV
(v) = 9. Por lo tanto es imposible. Recordar que por el lema 7.2
el n umero de vertices de grado impar siempre es par.
2. Es facil ver que es factible dibujar este grafo, ver gura 8.
3
2
4
2
1
Figura 8: Un grafo con grados 1, 2, 2, 3, 4
3. Hay 5 vertices, de los cuales 3 estan conectados con todos los demas (v) = 4. Ninguno de los otros vertices
pueden tener grado menor a 3. Por lo tanto es imposible este grafo.
4. Tenemos 4 vertices y uno conectado a 4 vertices, es decir, esta conectado al resto y a uno mas. Nos falta un
vertice. Este grafo es imposible.
Denicion G = (V, E) es un grafo. Entonces se dene:
Camino: Se llama camino a una secuencia de vertices v
1
, v
2
, . . . , v
n
tal que v
i
, v
i+1
son adyacentes (walk en
ingles).
Camino simple: Es un camino en los que los v
i
son todos distintos (en ingles, path).
Ciclo: Es un camino v
1
, v
2
, . . . , v
n
, v
1
, en el cual no se repite mas que el primer y ultimo vertice. Se llama r-ciclo
(ciclo de largo r) si tiene r arcos y r vertices. Algunos distinguen ciclos (pueden repetirse vertices fuera del
inicial, nosotros les llamamos circuitos) y ciclos simples (lo que nosotros llamamos ciclos).
Circuito: Un camino cerrado v
1
, v
2
, . . . , v
n
, v
1
(pueden repetirse vertices).
Denicion Sea G = (V, E) un grafo. Denimos la relacion entre vertices, tal que x y si x e y estan en un
camino de G, o sea x = v
1
, v
2
, . . . , v
k
= y es un camino.
Es facil notar que es una relacion de equivalencia:
(Reexiva) x x. Un camino de 0 arcos cumple con la denicion.
(Simetrica) x y y x: Esto es x = v
1
, . . . , v
k
= y y = v
k
, . . . , v
1
= x, que claramente es cierto.
(Transitiva) (x y) (y z) x y. Esto es decir:
x = v
1
, . . . , v
k
= y = u
1
, . . . , u
k
= z
O sea, x y z estan en un camino, y x z.
52
Denicion Sea G = (V, E) un grafo. Si V
1
V
2
V
k
son las clases de equivalencia de , y E
1
, E
2
, . . . , E
k
son
los conjuntos de arcos tales que E
i
contiene solo vertices de V
i
, a los grafos G
i
= (V
i
, E
i
) se les llama componentes
de G. Si G tiene un unico componente es llamado conexo.
Ejemplo Grafo no conexo
En el grafo de la gura 9 se distinguen vertices a los cuales no se puede acceder desde algunos de los otros
vertices. Este grafo tiene dos componentes.
Figura 9: Un grafo con dos componentes.
Un resultado simple es la relacion entre el n umero de vertices y arcos en grafos conexos.
Teorema 7.3. Todo grafo G = (V, E) tiene a lo menos [V [ [E[ componentes conexos.
Demostracion. Usamos induccion sobre el n umero de arcos.
Base: En un grafo con 0 arcos, cada vertice es un componente conexo por s mismo, y hay exactamente [V [0 = [V [
componentes conexos.
Induccion: Suponemos que la hipotesis vale para todo grafo de n arcos, y demostramos que vale para todo grafo de
n+1 arcos, con n 0. Considerese un grafo G = (V, E) con n+1 arcos. Eliminamos un arco arbitrario a, b
del grafo, dejando el grafo G

con n arcos. Por la hipotesis, G

tiene a lo menos [V [ n componentes conexos.


Reponemos el arco eliminado, con lo que tenemos de vuelta el grafo original G. Si a y b pertenecan al mismo
componente conexo de G, G tiene el mismo n umero de componentes conexos de G

, que es a lo menos [V [ n
por hipotesis. Si a y b pertenecen a componentes distintos de G

, G tiene un componente conexo menos que


G

, ya que el arco a, b une esos dos componentes de G

en uno solo en G. Como G

tena a lo menos [V [ n
componentes conexos, G tiene entonces a lo menos uno menos que esto, vale decir [V [ n1 = [V [ (n+1).
Esto demuestra el paso de induccion.
Algunos puntos se deben hacer notar de esta demostracion. Primeramente, usamos induccion sobre el n umero
de arcos. Esto es com un en demostraciones en grafos, al igual que induccion sobre el n umero de vertices. Solo si
ninguna de estas dos estrategias sirve vale la pena considerar otras opciones.
Por otro lado, usamos la tactica de eliminar un arco y reponerlo en nuestra demostracion. Esta es la forma mas
sencilla de evitar errores logicos comunes, ya que nos asegura que el arco que queremos agregar es posible y nos
lleva en la direccion correcta. Si se usa induccion en grafos (ya sea sobre arcos o vertices), siempre conviene usar
esta idea de encoger-expandir.
Corolario 7.4. Todo grafo conexo de n vertices tiene a lo menos n 1 arcos.
Demostracion. Como el grafo es conexo, sabemos por el teorema 7.3 que
[V [ [E[ 1
[V [ 1 [E[
que es exactamente lo que se quera probar.
Denicion Sea G = (V, E) un grafo. Entonces:
53
Un camino simple que visita todos los vertices es un camino hamiltoniano. Un ciclo que contiene todos los
vertices del grafo es llamado ciclo hamiltoniano.
Un camino que pasa por todos los arcos es denominado camino de Euler. Un circuito que pasa por todos los
arcos se llama circuito de Euler.
Determinar si hay un camino o ciclo hamiltoniano es difcil. En cambio, un camino (o circuito) de Euler es
sencillo de hallar. Si consideramos vertices cualquiera hay dos opciones:
1. Comienzo en un vertice, termino en otro.
2. Comienzo en un vertice, termino en el mismo.
Si inicio y n son diferentes (es un camino de Euler):
Inicio: Salgo una vez, paso por el (entro y salgo) varias veces, lo que signica que (inicio) es impar.
Fin: Llego una vez, paso por el (entro y salgo) varias veces, con lo que tambien (n) es impar.
Otros vertices: Paso por el (entro y salgo) varias veces, por lo que (otras) es par.
Si inicio y n son el mismo (es un circuito de Euler):
Inicio (y n): Salgo una vez, paso por el (entro y salgo) varias veces, llego una vez, y (inicio) es par.
Otros vertices: Paso por el (entro y salgo) varias veces, con lo que (otras) es par.
Estas dos son las unicas posibilidades, y por tanto es condicion necesaria para la existencia de un camino de Euler
en un grafo conexo el que o todos los vertices sean de grado par (en tal caso podemos comenzar en cualquiera
de ellos, terminamos en el mismo, es un circuito de Euler), o que hayan exactamente dos vertices de grado impar
(comenzamos en uno de ellos, terminamos en el otro, es un camino de Euler). Mas adelante demostraremos que
estas condiciones son sucientes, y daremos un algoritmo para encontrar un camino (o circuito) de Euler.
Ejemplo Puentes de Konigsberg
Supongase que se desea dar un paseo por la ciudad de Konigsberg, pasando una unica vez por cada uno de los
siete puentes, situados seg un la gura 10. Es posible realizar esta tarea?
La respuesta es no, como demostro Euler en 1735, dando inicio al estudio de lo que hoy es la teora de grafos.
Representando los sectores unidos por los puentes en un grafo como en la misma gura 10, se aprecia claramente
que hay un n umero impar de vertices de grado impar. Debido a esto no es posible que exista un camino de Euler que
permita cumplir con la tarea requerida. Si bien la representacion no es un grafo propiamente tal es un multigrafo
pues hay vertices que estan conectados por mas de un arco a un as los principios son aplicables.
(a) Konigsberg en tiempos de Euler (b) Konigsberg y sus puentes
5
3
3
3
(c) Puentes de Konigsberg
como multigrafo
Figura 10: Puentes de Konigsberg[7]
Teorema 7.5 (Euler). Sea G un grafo conexo. Entonces hay un camino de Euler si y solo si hay exactamente dos
vertices de grado impar (y todo camino de Euler comienza en uno de ellos y termina en el otro), y hay un circuito
de Euler si y solo si todos los vertices son de grado par.
54
Demostracion. Demostramos implicancia en ambas direcciones. Que las condiciones son necesarias ya lo vimos
antes, demostramos ahora que son sucientes por induccion fuerte sobre el n umero de arcos de G.
Si G tiene un unico arco, la conclusion es trivial.
Supongamos entonces que para todo grafo con a lo mas n arcos se cumple el teorema, y demostraremos que
vale tambien para n + 1. Sea entonces un grafo G con n + 1 arcos, todos cuyos vertices son de grado par o hay
exactamente dos vertices de grado impar. La estrategia general es eliminar un arco, y analizar por separado las
situaciones en las cuales esta operacion divide el grafo en dos componentes y las en que sigue siendo conexo.
Consideremos primero el caso en que todos los vertices de G son de grado par. Elijamos un vertice x y un arco
e = x, y. Si eliminamos el arco e, obtenemos un nuevo grafo G

, en el cual ahora x e y son los unicos vertices de


grado impar. Entonces G

es conexo, ya que si no fuera conexo x e y en G

perteneceran a componentes diferentes, y


en G

los vertices x e y seran los unicos de grado impar en sus respectivos componentes. Esto es absurdo, contradice
al lema 7.2. Por induccion, como G

es conexo y tiene n arcos, hay un camino de Euler que comienza en x y termina


en y; al reponer el arco x, y hay entonces un circuito de Euler (el camino anterior junto con este arco).
Supongamos ahora que G tiene exactamente dos vertices de grado impar, llamemosles x e y. Consideremos
primero el caso en que x e y son adyacentes. Eliminando el arco x, y tenemos un grafo G

con n arcos, y todos


sus vertices son de grado par. Si G

es conexo, tiene un circuito de Euler, y agregando el arco x, y a este tenemos


un camino de Euler que comienza en x y termina en y. Si G

no es conexo, tiene dos componentes, llamemosles G


1
y G
2
. Pero tanto G
1
como G
2
tienen solo vertices de grado par, y tienen menos de n arcos, con lo que cada uno de
ellos tiene un circuito de Euler, que podemos suponer comienza y termina en x (respectivamente y). Conectando
estos dos circuitos mediante el arco x, y obtenemos un camino de Euler para G, que comienza en x y termina en
y. Si no hay un arco que conecte a x e y, debe haber un arco x, z para alg un vertice z. Eliminando este arco,
tenemos un grafo G

con n arcos en el cual hay exactamente dos vertices de grado impar, z e y. Por induccion, si G

es conexo hay un camino de Euler que comienza en z y termina en y, reponiendo el arco x, z tenemos un camino
de Euler que comienza en x y termina en y. Si G

no es conexo, tendra componentes G


1
(que contiene a x) y G
2
.
Entonces z estara en G
2
(en caso contrario, G

sera conexo), e y estara en G


2
tambien (de otra forma, sera el unico
vertice de grado impar en G
1
). O sea, G
1
tiene solo vertices de grado par, y G
2
tiene exactamente dos vertices de
grado impar (y y z). Por induccion, hay un circuito de Euler en G
1
, que podemos suponer comienza y termina en
x, y un camino de Euler en G
2
, que comienza en z y termina en y. Reponiendo el arco x, z tenemos un camino
de Euler que comienza en x, recorre G
1
para volver a x, luego pasa a G
2
por x, z y sigue el camino de Euler en
G
2
para terminar en y.
Esta demostracion no da muchas luces sobre como hallar el camino (circuito) de Euler. Esto lo da el algoritmo
de Fleury: Si hay vertices de grado impar, comience en uno de ellos, en caso contrario elija uno cualquiera. En cada
paso, elija un arco desde el vertice actual y atravieselo, luego lo elimina del grafo. Al hacer esto, debe tener cuidado
que el grafo resultante sea conexo (salvo que no tenga alternativa).
Ejemplo El juego del dibujo en el papel. Se pide dibujar la gura 11 en un papel, de manera que el lapiz no se
Figura 11: Dibuja una casita.
levante en ning un momento del papel y no dibuje dos veces el mismo trazo. Es posible realizar esto?
La respuesta es si. Esto debido a que hay exactamente dos vertices de grado impar. Debemos elegir uno de ellos
como punto de partida, y terminaremos en el otro.
Ejemplo Un cubo de queso cortado en 3 3.
Un raton comienza en una de las esquinas, come ese cubito y sigue con uno de los vecinos (no en diagonal).
Puede comerse todo el queso terminando con el cubo del centro?
La respuesta a esto es No. Esto se debe a que no se cumple ninguno de estos casos:
55
Camino que visite todos los vertices comenzando con una esquina y nalizando en el centro (camino hamilto-
niano).
Ciclo hamiltoniano en el grafo si se conecta la esquina con el centro.
7.5.

Arboles
En muchas aplicaciones aparecen grafos conexos sin enlaces redundantes (sin ciclos). Esta idea es capturada por
la denicion siguiente.
Denicion El grafo T = (V, E) en un arbol si:
T1: T es conexo.
T2: No hay ciclos en T.
Aclaramos que los arboles binarios vistos en el ramo Estructuras de Datos, no son arboles. Aca no hay hijos ni
descendientes, y a un menos hijos izquierdos y derechos, solo vecinos.
Denicion En un arbol T = (V, E) un vertice v V se llama hoja si tiene grado uno. En caso contrario es un
vertice interno.
Buena parte de la importancia de los arboles reside en que tienen una coleccion de propiedades interesantes,
como las siguientes.
Teorema 7.6. Si T = (V, E) es un arbol entonces:
T3: Para cualquier par de vertices en V hay un unico camino simple entre ellos
T4: Al agregar un arco a T se forma un ciclo
T5: Al eliminar un arco de T, quedan dos componentes que son arboles.
T6: Un arbol con al menos dos vertices tiene al menos dos hojas
T7: [E[ = [V [ 1.
Demostracion. Demostramos cada una de las aseveraciones por turno.
T3: Supongamos que T = (V, E) es un arbol y que hay dos vertices x, y con mas de un camino simple que los
conecta, digamos:
x = v
1
, v
2
, . . . , v
r
= y
x = u
1
, u
2
, . . . , u
s
= y
Ahora sea i el menor ndice tal que v
i+1
,= u
i+1
; y sea j el mayor ndice tal que v
j1
,= u
k1
, pero v
j
= u
k
para alg un k. Vease la gura 12. De aqu se nota que v
1
, v
i+1
, . . . , v
j1
, v
j
, u
k1
, u
k2
, u
i+1
, u
i
son un ciclo,
x
u
1
v
1
u
i
v
i
u
i+1
v
i+1
u
j1
v
k1
u
j
v
k
y
u
r
v
s
Figura 12: Esquema de vertices en la parte T3 el teorema 7.6
pero siendo T un arbol no tiene ciclos. Esta contradiccion completa la demostracion de esta parte.
T4: Al agregar un arco x, y al arbol, este junto con el camino entre x e y (que existe porque T es conexo) forman
un ciclo.
56
T5: Consideremos un arco x, y del arbol. Si lo eliminamos del grafo, ya no hay caminos entre x e y (por T3 hay
un unico camino entre x e y, precisamente este arco). Luego el grafo resultante tiene dos componentes, cada
uno conexo y sin ciclos. Ambos son arboles.
T6: Consideremos un camino de largo maximo en T, que contiene vertices v
1
, v
2
, . . . , v
m
. Entonces m 2, dado
que un arbol con al menos dos vertices tiene que tener al menos un arco. No pueden haber arcos v
1
, v
i
para
i 2, ya que de otra forma tendramos un ciclo v
1
, . . . , v
i
, v
1
. Tampoco puede haber un arco u, v
1
, ya que
de haberlo tendramos un camino mas largo u, v
1
, . . . , v
m
. O sea, v
1
es una hoja. De forma similar, v
m
es una
hoja, y hay al menos dos hojas.
T7: Usamos induccion sobre el n umero de vertices. Queremos demostrar que [E[ = [V [ 1, En un arbol con un
unico vertice, la aseveracion se cumple. Supongamos ahora que la aseveracion se cumple para todos los arboles
con n vertices, (o sea, todos ellos tienen n1 arcos), y consideremos un arbol con n+1 vertices. Elijamos una
hoja x (por T6 sabemos que hay al menos dos hojas), hay un unico arco x, y que incluye a x. Al eliminar
el vertice x de T junto con el arco x, y queda un arbol de n vertices, que por induccion tiene n 1 arcos.
Al reponer el vertice y el arco, el n umero de arcos y de vertices aumenta en uno, y tenemos el resultado.
La parte T7 y el corolario 7.4 nos dicen que un arbol es el grafo conexo con mnimo n umero de arcos para ese
conjunto de vertices.
Ejemplo Se pide dibujar los arboles no isomorfos de 6 vertices.
La mejor forma de solucionar esto es empezar a dibujar los grafos, partiendo por el caso en que se encuentre
un vertice de grado maximo, es decir, de grado 5. Vease la gura 13a. Luego consideramos los arboles con grado
maximo 4 (gura 13b), los de grado 3 (gura 13c), y nalmente los de grado maximo 2 (gura 13d). Estos son la
(a) Grado maximo 5 (b) Grado maximo 4
(c) Grado maximo 3
(d) Grado maximo 2
Figura 13: Los 6 arboles con 6 vertices
solucion a nuestro problema. Hay un total de 6 arboles no isomorfos de 6 vertices.
7.6.

Arboles con raz
Veremos algunas aplicaciones de arbol con un vertice especial designado como raz. Esto aparece en aplicaciones
en las cuales hay una jerarqua, como al representar un organigrama. As no son iguales (isomorfos) los arboles
con raz (el vertice en blanco indica la raz) mostrados en la gura 14. Aparte de la raz distinguimos vertices
internos con (v) 2, y hojas con (v) = 1. Normalmente dibujaremos la raz y debajo de ella sus vecinos, y
as sucesivamente hasta llegar a las hojas.
57
Figura 14: Ejemplos de arbol con raz
En muchas aplicaciones nos encontraremos que la raz y los vertices internos tienen el mismo grado. Si tienen
grado m se habla de arboles m-arios.
Podemos enumerar los vertices de un arbol con raz, analizando su distancia desde la raz:
Nivel 0: La raz.
Nivel 1: Los vecinos de la raz.
Nivel 2: Los vecinos de vertices en el nivel 1, salvo los que estan en el nivel 0.
Nivel n: Los vecinos de los vertices en el nivel n 1, salvo los que estan en nivel n 2.
Esto motiva la siguiente denicion:
Denicion La altura del arbol con raz es el maximo k para el que el nivel k no es vaco.
La interpretacion como una jerarqua similar a una genealoga sugiere:
Denicion Sea T un arbol con raz r. Si hay un camino de r a v que pasa por u, se dice que u es ancestro de v, y
v es un descendiente de u. Si u y v son vecinos, se dice que u es el padre de v, y que v es hijo de u.
La enumeracion en niveles que da lugar a la denicion de altura sugiere el algoritmo 1 para recorrer un arbol
Algoritmo 1 Recorrer arboles con raz
procedure recorrer(v)
if v es hoja then
Visitar v
else
Visitar v en preorden
for hijo x de v do
recorrer(x)
end for
Visitar v en postorden
end if
con raz. Se invoca el procedimiento recorrer inicialmente con la raz. En este algoritmo podemos considerar visitar
(procesar de alguna forma) cada vertice la primera o a ultima vez que pasamos por el, dando lugar a recorridos en
preorden o en postorden. Como no hay orden denido entre los hijos de un vertice, en caso de haber varios elegimos
uno arbitrariamente.
Teorema 7.7. Si el n umero maximo de hijos de los vertices de un arbol con raz es d y su altura es h entonces el
arbol tiene a lo mas d
h
hojas.
Demostracion. La demostracion es por induccion fuerte sobre h.
Cuando h = 0 hay un unico vertice (raz = hoja) y hay 1 d
0
= 1 hojas.
Supongamos que todos los arboles de altura menor o igual a h tienen a lo mas d
h
hojas. Consideremos un arbol
de altura h +1. Este es la raz y a lo mas d arboles de altura a lo mas h, cada uno de los cuales aporta a lo mas d
h
hojas, para un total de a lo mas d d
h
= d
h+1
hojas.
Corolario 7.8. Un arbol en el cual cada nodo tiene a lo mas d hijos y que tiene r hojas tiene altura a lo mas de
log
d
r.
58
7.6.1.

Arboles de decision
Un arbol de decision representa una secuencia de decisiones y los resultados de estas. Se comienza en la raz,
cada vertice interno representa una decision, y las hojas son resultados nales. Un camino entre la raz y una hoja
representa una ejecucion del procedimiento, a traves de la secuencia de decisiones y sus resultados que el camino
representa.
Ejemplo B usqueda de monedas falsas.
Tenemos una moneda O (la sabemos buena) y r otras monedas, una de las cuales puede ser falsa (puede que
sea mas pesada o mas liviana que la moneda O).
Cual es el n umero mnimo de pesadas (comparar el peso de dos colecciones de monedas) para determinar si
hay una falsa y saber exactamente cual es?
Un nodo del arbol de decisiones puede representarse como en la gura 15, para cada pesada hay tres opciones:
a : b
<
=
>
Figura 15: Vertice del arbol de decision al pesar monedas
La izquierda es mas liviana, son iguales, la derecha es mas liviana.
Las hojas que debemos obtener (resultados nales del proceso) son las siguientes:
Todas buenas.
#1 Pesada.
#1 Liviana.
(Muchas alternativas omitidas)
#r Pesada.
#r Liviana.
Hay 2r + 1 resultados, lo que se requieren a lo menos ,log
3
(2r + 1)| pesadas. Pueden ser mas que esto, solo hemos
demostrado que es imposible hacerlo con menos.
7.6.2. Analisis de algoritmos de ordenamiento
Supongamos un metodo de ordenamiento basado en comparaciones. Una pregunta obvia es: Cuantas compa-
raciones requiere ordenar n elementos?
El suponer que todos los elementos son diferentes hace mas duro resolver el problema, con lo que nos concen-
tramos en ese caso. El ordenar n elementos involucra determinar en que orden estan (o, lo que es lo mismo, han
de ubicarse). En nuestro caso, cada vertice representa el resultado de comparar dos elementos con las opciones
<, >. No descartamos comparaciones redundantes en esto. Las hojas son ordenes de los n elementos de entrada
(aunque tambien es posible que aparezcan entre las hojas situaciones imposibles, al especicar el camino desde la
raz situaciones contradictorias).
Ejemplo Comparamos tres elementos a, b, c, todos distintos.
Como se ve en la gura 16, el arbol tiene 6 hojas, que corresponden a las 3! formas de ordenar 3 objetos.
Esto nos muestra que la altura del arbol de decision (el n umero de comparaciones requeridas en el peor caso) es
,log
2
n!|. Acotamos esto en la seccion 6 a traves de n! n
n
. Por nuestro analisis el n umero de comparaciones
requerido es entonces O(nlog n).
59
a : b
b : c
a, b, c a : c
a, c, b c, a, b
b : c
a : c
b, a, c c, b, a
b, c, a
Figura 16:

Arbol de decision al ordenar 3 objetos
7.6.3. Generar codigo
Una aplicaci on interesante de arboles con raz se da al representar expresiones aritmeticas para generar codigo.
Considerando un modelo de maquina que tiene cierto n umero de registros de proposito general, con operaciones
aritmeticas tradicionales que toman sus argumentos de dos registros cualquiera y dejan el resultado en alguno
cualquiera. Lo que nos interesa ahora es generar codigo optimo para expresiones aritmeticas en esta clase de
maquinas.
Por ejemplo, la expresion a x + b y + c ((u + v)) queda representada por el arbol de la gura 17. Los
+
3

2
a
1
x
1
+
3

2
b
1
y
1

2
c
1

2
+
2
u
1
v
1
Figura 17:

Arbol sintactico de una expresion
n umeros que adornan los vertices del arbol representan el n umero de registros requeridos para calcular el valor de
ese vertice (se les llama n umeros de Sethi, en honor al inventor del algoritmo que discutiremos).
Esta claro que al calcular una expresion vista de esta forma como un arbol nada puede ganarse calculando parte
de una subrama, seguir con otra, para luego volver a completar la primera. El caso mas simple es el de una variable
o constante, basta cargar el valor en un registro libre. Consideremos ahora una operacion cualquiera dentro del
arbol, suponiendo operaciones con dos argumentos (las ideas se pueden extender sin problemas a casos en que hay
mas de dos argumentos). Toma los valores de sus argumentos de dos registros. Para calcular estas expresiones mas
complejas, supongamos que evaluar los operandos requiere m y n registros respectivamente. Se dan dos casos:
m = n: De ser as, la estrategia consiste en calcular el argumento izquierdo (se usan m registros en el proceso,
queda el resultado en uno de ellos). Luego calculamos el argumento derecho, usando m registros mas, lo que
hace un total de m+ 1 registros. Finalmente calculamos el valor buscado, sin usar registros adicionales.
m ,= n: Consideremos m < n, el otro caso es totalmente simetrico. En este caso calculamos primero aquel argumento
que requiere mas registros, (el derecho en nuestro caso), usando n registros, y dejando el resultado en uno
de ellos. Luego calculamos el otro argumento (el izquierdo en nuestro caso), para lo que se requieren m < n
registros, reusando los que quedaron libres del calculo anterior. En total, se requieren n registros.
El algoritmo para generar codigo optimo en este caso particular (este tipo de arquitecturas y expresiones sin
subexpresiones repetidas) resulta inmediato de la discusion anterior:
60
1. Calcule los n umeros de Sethi para los vertices del arbol en un recorrido en postorden.
2. Considere cada vertice en un recorrido en postorden. Si es una variable o constante, cargue su valor en alg un
registro libre. Si es una operacion, calcule primero aquel argumento que requiere mas registros, luego el otro,
y efect ue la operacion.
Si faltan registros, la solucion es guardar en una variable temporal el contenido de aquel registro que no se usara por
mas tiempo, para reponerlo cuando se necesite. Esto resulta optimo, ya que minimiza el n umero de instrucciones
adicionales (cada operacion requiere al menos una instruccion, y nuestro algoritmo usa exactamente una instruccion
por operacion si no quedamos cortos de registros). Notese tambien que basta con operaciones que trabajen entre
dos registros (origen y destino), no hacen falta operaciones con dos orgenes y un destino para el resultado. Eso
s pueden hacer falta operaciones simetricas, con efectos por ejemplo a ab y a ba (aunque pueden obtenerse
sus efectos con una secuencia de dos operaciones, por ejemplo calculando a a b y cambiando el signo).
Para el arbol de la gura 17 resulta el codigo del listado 1. El formato de las instrucciones da la operacion
misma, el resultado y sus dos argumentos. Por ejemplo, sub r0, r1, r2 signica r0 r1 r2.
mov r0 , u
mov r1 , v
mul r0 , r0 , r 1
mov r1 , c
add r0 , r0 , r 1
mov r1 , b
mov r2 , y
mul r1 , r1 , r 2
add r0 , r0 , r 1
mov r1 , a
mov r2 , x
mul r1 , r1 , r 2
add r0 , r0 , r 1
Listado 1: Codigo para la expresion ejemplo
Lamentablemente en situaciones mas realistas (registros de uso especco, instrucciones que no solo operan entre
registros, subexpresiones comunes, aplicar identidades algebraicas) la situacion es bastante mas compleja y no hay
algoritmos tan simples y ecientes.
7.7. Grafos planares
Ejemplo Tres servicios y tres casas.
1
B C
2
A
Figura 18: Dos casas conectadas a tres servicios.
Suponga que se tienen 3 casas 1, 2, 3 y 3 servicios A, B, C. Pueden conectarse los servicios a las casas sin
que estos se lleguen a cruzar?
Como se ve en la gura 18, es imposible ya que despues de ubicar dos casas no existen zonas libres en las cuales
colocar la tercera sin que las lineas de servicios se crucen.
61
7.8. Algoritmos de b usqueda en grafos
En muchas aplicaciones se requiere recorrer un grafo en forma completa (visitar cada uno de sus vertices), o
al menos encontrar alg un vertice que cumpla ciertas condiciones especiales. Esto lleva a considerar algoritmos de
b usqueda en grafos (aunque tal vez un mejor nombre sera algoritmos de recorrido).
7.8.1. B usqueda en profundidad
La idea de este algoritmo es partir de un vertice, visitar alg un vecino de este y continuar de all hasta llegar
a un vertice ya visitado o no poder continuar, para luego retornar al vertice anterior y continuar con su siguiente
vecino. Se le llama b usqueda en profundidad porque la estrategia esbozada avanza a traves de grafo todo lo que
puede antes de considerar alternativas. En ingles se llama Depth First Search, abreviado DFS.
Sea G = (V, E) un grafo conexo. Apliquemos el siguiente algoritmo:
Elegir un vertice v V como punto de partida.
Marcar v como visitado, y considerar (recursivamente) los vecinos de v. La recursion termina al llegar a un
vertice ya visitado o no poder continuar.
Esta tecnica es llamada en profundidad porque avanza todo lo que puede antes de considerar las demas alterna-
tivas.
Ejemplo B usqueda en profundidad
Consideremos el grafo de la gura 19. El grafo de la gura 20 fue recorrido siguiendo el algoritmo b usqueda en
Figura 19: Grafo para ejemplos de recorrido
profundidad. Se partio desde el vertice 1, y desde all se recorrio y enumero el resto de los vertices, eligiendo uno al
azar como vecino a considerar luego. En rojo quedan registrados los arcos por lo cuales se paso.
Denicion Sea G = (V, E) un grafo conexo. Al arbol T = (V, E

), donde E

E se le llama un arbol recubridor


(en ingles, spanning tree) de G.
B usqueda en profundidad recorre un arbol recubridor del grafo. En general entrega un componente del grafo,
para encontrar todos los componentes basta con repetir la b usqueda partiendo cada vez de un vertice a un no visitado
hasta agotar los vertices. Ver el algoritmo 2 para una version recursiva, que se invoca como DFS(v) para un vertice
del grafo. El algoritmo 3 es una version que usa un stack explcitamente (resultado de eliminar la recursion).
7.8.2. B usqueda a lo ancho
Aca se visitan los vecinos del punto de partida, y recien cuando se han visitado todos ellos se avanza a los vecinos
de estos. Por la forma en que avanza en el grafo se le llama b usqueda a lo ancho, en ingles Breadth First Search,
que se abrevia BFS.
Sea G = (V, E) un grafo conexo. Apliquemos el siguiente algoritmo:
62
1
2
3
4
5
6
7
8
9
10
11
12
Figura 20: El grafo de la gura 19 recorrido en profundidad
Algoritmo 2 B usqueda en profundidad (Depth First Search), version recursiva
procedure DFS(x)
if x no visitado then
Marque x visitado
while hay y no visitado adyacente a x do
DFS(y)
end while
end if
Algoritmo 3 B usqueda en profundidad (Depth First Search), version no recursiva
procedure DFS(x)
variable S: Stack de vertices
push(S, x)
while S no vaco do
x pop(S)
if x no visitado then
Marque x como visitado
if hay y no visitado adyacente a x then
push(S, y)
end if
end if
end while
63
1
2
3
4
5
6
7
8
9
10
11
12
Figura 21: El grafo de la gura 19 recorrido en a lo ancho
Elegir v V como punto de partida.
Marcar v como visitado, luego visitar cada uno de los vecinos no visitados de v, y recien entonces los vecinos
de estos
Ejemplo B usqueda a lo ancho
Tomando el mismo grafo que en ejemplo de b usqueda en profundidad (ver gura 21), ahora se enumeran los
vertices y se marcan los arcos recorridos, pero ahora con el metodo de b usqueda a lo ancho. Vease la gura 21
Mas formalmente el algoritmo para buscar a lo ancho es el 4.
Algoritmo 4 B usqueda a lo ancho (Breadth First Search)
procedure BFS(x)
variable Q: Queue de vertices
enqueue(Q, x)
while Q no vaco do
x dequeue(Q)
if x no ha sido visitado then
Marque x como visitado
if hay y no visitado adyacente a x then
enqueue(Q, y)
end if
end if
end while
7.8.3. B usqueda a lo ancho v/s b usqueda en profundidad
Si comparamos los dos procedimientos (algoritmos 3 y 4) se ve que la unica diferencia es el orden en que se
procesan los vertices. Podemos resumir las caractersticas de ambos algoritmos como sigue:
Ambos llegan a todos los vertices del componente.
Los programas son similares, aunque b usqueda en profundidad (recursivo) es un tanto mas simple de progra-
mar.
64
Complejidad (equivalente a tiempo de ejecucion) similares.
La pregunta entonces es como elegir entre los dos.
Si interesa una solucion cualquiera: Usar b usqueda en profundidad
Si interesa la mejor (por lo general referida a cercana de vertices): Usar b usqueda a lo ancho
Pero un analisis mas profundo de los dos algoritmos muestra que tienen una estructura com un: Guardan vertices
para considerarlos mas adelante en alguna estructura, la unica diferencia es si se procesan en orden de llegada (al
buscar a lo ancho) o se atiende primero al ultimo en llegar (b usqueda en profundidad). Claramente podemos usar
alg un otro criterio para elegir el siguiente vertice a considerar, no solamente el momento en que nos encontramos
con el por primera vez. Esto da lugar a una gama de metodos de b usqueda heursticos.
7.9. Colorear vertices
Hay muchas situaciones en las cuales interesa encontrar una asignacion que respeta restricciones dadas. Una
forma de representar estas es haciendo que las entidades a recibir asignaciones se los modela como vertices, las
restricciones como arcos entre esos vertices, y buscamos asignar colores a los vertices de forma que vertices vecinos
siempre tengan colores diferentes.
Ejemplo Consideremos la situacion en que deseamos programar seis charlas, cada una de una hora. Hay interesados
en asistir a varias de ellas, en particular, hay interesados en las charlas 1 y 2, en las 1 y 4, en 1 y 6, en 2 y 6, en 3
y 5, en 4 y 5, en 5 y 6. Nos interesa programar las charlas en el mnimo n umero de horas.
Podemos modelar esto mediante un grafo, conectando las charlas que tienen asistentes en com un. Vease la
gura 22. Por ejemplo, podemos asignar las charlas v
1
y v
3
a la hora 1, v
2
y v
4
a la hora 2, v
5
a la hora 3, y
v
3
v
2
v
1
v
6
v
5
v
4
Figura 22: Grafo representando charlas
nalmente v
6
a la hora 4. Si representamos la hora 1 con color azul, la 2 con rojo, la 3 con amarillo y la 4 con verde,
se obtiene lo que muestra la gura 23.
v
3
v
2
v
1
v
6
v
5
v
4
Figura 23: Asignacion de horas a charlas como colores
En terminos matematicos, hemos particionado los vertices del grafo en cuatro, de forma que no hayan vertices
adyacentes en ninguna de las partes. Una forma de representar esta situacion usa la funcion c: V [4] que a
cada vertice (charla) le asigna una hora. Generalmente hablamos de colores de los vertices, no de horas asignadas,
aunque claramente la naturaleza exacta de los objetos 1, 2, 3, 4 es irrelevante. Podemos hablar de colores azul,
rojo, amarillo, verde, o de hora 1, hora 2, hora 3, hora 4. Lo unico que importa es que vertices vecinos tienen colores
diferentes.
65
Denicion Un coloreo de vertices de un grafo G = (V, E) es una funcion c: V N tal que c(x) ,= c(y) siempre
que x, y E.
Denicion El n umero cromatico de un grafo G = (V, E), escrito (G), es el mnimo entero k tal que el grafo tiene
un coloreo de k colores
Volviendo a nuestro ejemplo, la asignacion de horas de la gura 23 corresponde a un coloreo con 4 colores. Pero
probando un poco con 3 horas vemos que podemos asignar v
1
y v
5
a la hora 1, v
2
y v
3
a la hora 2, y dejar v
4
y v
6
para la hora 3. Ver la gura 24. Por lo demas, se requieren al menos 3 colores ya que v
1
, v
2
y v
6
estan conectados
v
3
v
2
v
1
v
6
v
5
v
4
Figura 24: Otra asignacion de horas a charlas
entre s. Hemos demostrado que el n umero cromatico de este grafo es 3.
En general, para demostrar que el n umero cromatico de un grafo es k se requiere:
1. Encontrar un coloreo con k colores
2. Demostrar que es imposible hacerlo con menos de k colores
Ejemplo N umeros cromaticos
Analicemos cuantos colores se necesitan para colorear el grafo de la gura 25.
Figura 25: Grafo a colorear
Dado que el grafo presenta ciclos de largo impar (por ejemplo el en la gura 26), inmediatamente se desprende
la necesidad de 3 colores o mas para colorear el grafo. La gura 27 muestra un coloreo con 3 colores, por lo que el
n umero cromatico del grafo es precisamente 3.
Ejemplo N umeros cromaticos: Otro caso.
Consideremos el grafo de la gura 28.
Dado que son 6 vertices, el n umero de colores es a lo mas 6. En la gura 29a se marca un ciclo impar en rojo,
lo que nos indica que necesitan a lo menos 3 colores. Pero se ve en azul en la gura 29b que el grafo tiene K
4
como
subgrafo, lo que indica que el n umero de colores tiene que ser a lo menos 4. La gura 30 muestra un coloreo con
4 colores, y el n umero cromatico es 4.
Como se comento antes, muchos problemas de asignacion de recursos pueden modelarse mediante coloreo de
grafos. Por esta razon el encontrar soluciones optimas (coloreo usando (G) colores) o al menos buenas (pocos mas
que (G) colores) tienen inmensa importancia practica.
66
Figura 26: Un ciclo de largo impar en el grafo de la gura 25
Figura 27: Un coloreo con tres colores del grafo de la gura 25
7.9.1. El algoritmo voraz para colorear grafos
Encontrar el n umero cromatico de un grafo es un problema difcil. No se conoce ning un algoritmo que tome
tiempo polinomial, y se cree generalmente que tal algoritmo no existe. Sin embargo, hay una forma simple de
construir un coloreo de vertices usando un n umero razonable de colores. La idea es ir asignando colores a los
vertices de forma de usar siempre el primer color que no produce conictos. Por ejemplo, el coloreo de la gura 23
resulta aplicando el algoritmo 5 a los vertices del grafo de la gura 22 en orden del n umero del vertice. El coloreo de
la gura 27 resulta de asignar colores azul, rojo, amarillo mediante el algoritmo voraz partiendo del vertice superior
y avanzando en sentido contrareloj.
El algoritmo 5 es corto de vista, por lo que el coloreo que entrega no necesariamente es bueno. Sin embargo,
puede producir el coloreo con el mnimo n umero de colores, dependiendo del orden en que se consideren los vertices.
Lo malo es que si hay n vertices son n! ordenes diferentes a considerar. A pesar de esto, el algoritmo es util en
teora y en la practica. Demostraremos un teorema usando esta estrategia.
Teorema 7.9. Si G es un grafo de grado m aximo k, entonces:
1. (G) k + 1
2. Si G no es regular, entonces (G) k
Figura 28: Otro grafo a colorear
67
(a) Subgrafo C
5
(b) Subgrafo K
4
Figura 29: Subgrafos del grafo de la gura 28
Figura 30: Coloreo con 4 colores del grafo de la gura 28
Demostracion. Como el coloreo de cada componente es independiente del resto del grafo, basta discutir la situacion
de un unico componente. Demostramos cada aseveracion por turno.
1. Sea v
1
, v
2
, . . . , v
n
un orden de los vertices de G. Si aplicamos el algoritmo de coloreo voraz, al considerar un
vertice cualquiera tendra a lo mas k vecinos con colores ya asignados. Si contamos con k + 1 colores, siempre
habra uno que podamos asignarle.
2. Para este caso consideraremos los vertices en un orden especial. Como el grafo no es regular, habra al menos
un vertice cuyo grado es menor a k. Llamemosle v
n
a uno de ellos. Numeremos los vecinos de v
n
como v
n1
,
v
n2
, . . . (hay a lo mas k 1 de estos). Una vez agotados los vecinos de v
n
, numeramos los vecinos de v
n1
distintos de v
n
; nuevamente habra a lo mas k 1 de estos. Continuamos de esta forma, siempre dejando
fuera de consideracion los que ya tienen n umero asignado. Si ahora aplicamos el algoritmo voraz, siempre que
considere un vertice tendra a lo mas k 1 vecinos ya coloreados, y se requeriran a lo mas k colores.
Algoritmo 5 Coloreo voraz
c[v
1
] 1
for i = 2 to n do
S
for j = 1 to i 1 do
if v
j
es adyacente a v
i
then
S S c[v
j
]
end if
end for
k 1
while k S do
k = k + 1
end while
c[v
j
] k
end for
68
7.10. Colorear arcos
Una situacion analoga al coloreo de vertices se produce si coloreamos arcos de forma que no hayan arcos
adyacentes (que comparten vertices) del mismo color. Formalmente:
Denicion Dado un grafo G = (V, E) un coloreo de arcos es una funcion c: E N tal que c(e
1
) ,= c(e
2
) si
e
1
e
2
,= .
Aca tenemos una particion de los arcos E
1
E
2
E
n
tal que los arcos en E
i
no tienen vertices en com un.
La nomenclatura diere, hay autores que le llaman n umero cromatico de arcos al mnimo n umero de colores en
un coloreo de arcos, otros le llaman el ndice cromatico del grafo. Se anota

(G) o
1
(G), aunque la nocion (y la
notacion) es mucho menos usada que el n umero cromatico.
Esta claro que el ndice cromatico es 2 para un ciclo de orden par, y 3 para un ciclo de orden impar. Esto provee
cotas para el ndice cromatico de grafos que contienen los anteriores. Y obviamente el ndice cromatico es a lo menos
el grado maximo de un vertice.
Un bonito ejemplo es el coloreo de arcos del grafo de Frucht [2] dado en la gura 31. Como hay vertices de grado
3, es imposible un coloreo con menos colores, y su ndice cromatico es 3.
Figura 31: Un coloreo de arcos del grafo de Frucht
Aplicaciones de esto ocurren en muchos problemas de asignar recursos y tareas de manera que no intereran en
el tiempo [9]. Por ejemplo, al programar la primera ronda de un torneo de f utbol (donde compiten todos contra
todos) debe hallarse un calendario de forma que a nadie se le solicite estar jugando dos partidos a la vez, pero que
tambien use el mnimo de tiempo (si hay N equipos en competencia, son N(N 1)/2 los partidos a jugar, con lo
que la solucion obvia de programar un partido por semana tomara demasiado tiempo). Esto se modela mediante
un grafo en el que los vertices son los equipos participantes, mientras los arcos son partidos que deben jugarse. El
coloreo de arcos entonces asigna fechas a los partidos, de forma que ning un equipo este jugando dos partidos la
misma fecha. Es de suponer que el problema real a resolver por la ANFP es mucho mas complejo, al tratar de lograr
que todos los nes de semana haya un partido entretenido.
7.11. Grafos bipartitos
Un caso especial muy importante son los grafos para los cuales (G) = 2. En este caso, los vertices se dividen en
dos grupos V
1
y V
2
que corresponden a los coloreados con los colores 1 y 2, respectivamente, y los arcos unen uno
de cada grupo. En consecuencia, estos grafos se llaman bipartitos. Para representar un grafo bipartito escribiremos
G = (V
1
V
2
, E), bajo el entendido que V
1
y V
2
son las particiones de los vertices seg un color. Hay muchas situaciones
que se pueden modelar de esta forma, veremos algunos ejemplos pronto. Un caso importante a tener en cuenta es
cuando cada vertice de V
1
esta conectado con todos los vertices de V
2
. Si [V
1
[ = m y [V
2
[ = n, obtenemos el grafo
bipartito completo, que se anota K
m,n
. Algunos ejemplos los muestra la gura 32.
Para grafos bipartitos tenemos:
Teorema 7.10. Un grafo es bipartito si y solo si no tiene ciclos de largo impar.
Demostracion. Demostramos implicancias en ambas direcciones.
69
(a) K
2,2
(b) K
2,3
(c) K
3,3
(d) K
3,4
(e) K
3,5
Figura 32: Algunos grafos bipartitos completos
Si hay un ciclo de largo impar, se requieren tres colores solo para colorear ese ciclo, y (G) 3. Por el otro
lado, si no hay ciclos de largo impar, construiremos un ordenamiento de los vertices que produce un coloreo con dos
colores. Elijamos un vertice cualquiera, llamemosle v
1
, y le asignamos el nivel 0. A los vecinos de v
1
les llamamos
v
2
, . . . , v
r
, les asignamos el nivel 1. A los vecinos de los vertices de nivel 1 que no estan ya numerados les asignamos
el nivel 2, . . . , a los vecinos no numerados de los vertices de nivel l 1 les asignamos el nivel l. De esta forma
completamos un componente de G, y procesamos a los demas componentes de la misma forma. Lo crucial de este
orden es que un vertice del nivel l solo tiene vecinos en los niveles l 1 y l +1. Para ver esto, supongamos que hay
dos vertices conectados en el mismo nivel. Siguiendo sus conexiones hacia atras a traves de los distintos niveles,
encontraremos caminos simples hacia un vertice com un, que tendran el mismo largo, ver la gura 33. Pero estos
1
l l
Figura 33: Un ciclo de largo 2l + 1 si hay conexiones cruzadas
forman un ciclo de largo impar junto con el arco entre los vertices del mismo nivel que supusimos conectados.
Una manera tal vez mas simple de entender lo anterior (y, a la pasada, dar un algoritmo para determinar si un
grafo es bipartito y obtener las particiones) es tomar un vertice cualquiera y pintarlo de rojo, sus vecinos colorearlos
de azul, y as sucesivamente ir pintando vertices vecinos del color contrario (esto corresponde a b usqueda a lo
ancho). Si esto termina con todos los vertices coloreados (recomenzando con otro a un no coloreado si se acabaran
los vecinos) el grafo es bipartito, si encontramos conictos (vecinos del mismo color) no lo es.
Lema 7.11. Sea G = (X Y, E) un grafo bipartito con arcos entre X e Y . Entonces:

xX
(x) =

yY
(y) = [E[
70
Demostracion. Cada arco tiene un vertice en X, y la primera suma es el n umero total de arcos vistos desde X. Lo
mismo respecto a la segunda suma e Y .
7.11.1. Relaciones y grafos bipartitos
Habamos denido una relacion R entre conjuntos X e Y como R XY , y escribimos x R y cuando (x, y) R.
Si bien no es mismo decir x R y que y R x para efectos presentes nos meteremos al bolsillo esta distincion.
Si consideramos X Y = , podemos modelar R como un grafo bipartito, un ejemplo lo exhibe la gura 34.
Esto lo anotamos como grafo mediante R = (X Y, E).
X Y
Figura 34: Un grafo bipartito representando una relacion R X Y
Teorema 7.12. Sea G = (V, E) un grafo bipartito. Entonces el ndice cromatico de G es el grado maximo de G.
Demostracion. Usamos induccion sobre el n umero de arcos m = [E[.
Cuando m = 1, hay un unico arco, y el grado maximo es 1. Claramente basta un color en este caso.
Supongamos ahora que es cierto para todos los grafos bipartitos de m arcos y grado maximo k. Consideremos
un grafo bipartito G = (XY, E) con m+1 arcos y grado maximo k. Elegimos un arco x, y E, y consideramos
el grafo G

= (XY, E

) donde E

= Ex, y. El grafo G

tiene m arcos, y por induccion admite un coloreo de


arcos con k colores. En G, tanto x como y tienen grado a lo mas k; y al eliminar el arco x, y, en G

es (x) k1,
De la misma forma (y) k1. Luego tanto x como y participan en a lo mas k1 arcos y por tanto estan rodeados
por a lo mas k 1 colores.
Ahora sea un color no adyacente a x y un color no adyacente a y (los llamaremos libres en x e y, respecti-
vamente). Estos colores deben existir por lo anterior. Se pueden presentar dos casos:
Caso simple: Podemos elegir = . Tomamos ese color para el arco y asunto resuelto.
Caso complejo: No podemos elegir = . Entonces hay un arco x, y
1
de color (de caso contrario estara
libre en x y podra elegir = como en el caso anterior). Puede haber un arco x
1
, y
1
de color , un arco
x
1
, y
2
de color y as sucesivamente (vamos de X a Y mediante arcos de color , y de Y a X a traves de
arcos de color ). Este proceso de crear un camino debe terminar, ya que el grafo tiene un n umero nito de
vertices, y no puede formar un ciclo ya que no hay arco de color en x. Como ilustra la gura 35, luego de
este proceso podemos intercambiar los colores y , cayendo en el caso simple.
Esta tecnica de zig-zag e intercambio vale la pena tenerla presente, bastantes demostraciones se basan en ella.
71
x
n
x
y
n
y
1
y
x
n
x
y
n
y
1
y
Figura 35: Como operar en el teorema 7.12
7.11.2. Matchings
Supongamos la situacion en que hay un conjunto X de personas y un conjunto Y de trabajos, Una pregunta
con implicancias obvias es la siguiente: Como asignamos personas a las tareas, de forma que el n umero maximo
de personas queda asignada a una tarea para la que esta calicada? Esta pregunta la traduciremos al lenguaje de
grafos bipartitos. La relacion estar calicado nos da un grafo bipartito G = (X Y, E): El arco x, y indica que
la persona x est a calicada para la tarea y. Una asignacion de tareas a personas corresponde a un matching en
el sentido tecnico que deniremos ahora. Otras aplicaciones de estas ideas ocurren en una gran variedad de areas,
llegando a la economa. Cabe hacer notar que los conjuntos X e Y no necesariamente son de la misma cardinalidad.
Bajo nuestra interpretacion tiene perfecto sentido considerar situaciones en que hay mas (o menos) tareas a asignar
que personas, tareas para las que no hay calicados, y personas que no estan calicadas para ninguna de las tareas.
Denicion Sea G = (V, E) un grafo. Un matching es un subconjunto M E de arcos tal que no hay vertices en
com un entre dos arcos. El tama no del matching es el n umero de arcos en el.
El caso mas importante de lo anterior se da en grafos bipartitos, como se comento antes. Por ejemplo, la gura 36
muestra dos matchings de un grafo, donde los arcos en M estan marcados. Esta claro que M
2
es mayor, en el sentido
que contiene mas arcos. No puede haber uno mayor, ya que si consideramos el conjunto x
1
, x
2
, x
5
, en total solo
estan capacitados para y
3
, y
4
, por lo que necesariamente quedara uno de los tres sin trabajo asignado. Esto motiva
lo siguiente.
Denicion Sea G = (X Y, E) un grafo bipartito. Un matching de G se dice maximal si no hay matchings con
mas arcos. Un matching es completo si [M[ = [X[.
Analicemos primero las condiciones bajo las cuales hay matchings completos. Supongamos un grafo bipartito
G = (X Y, E), y para todo A X denimos el conjunto de vertices vecinos (neighbors en ingles) como:
N(A) = y : x, y E para alg un x A
En un matching completo el conjunto de tareas asignadas a los integrantes de A es un subconjunto de N(A), por
lo que debe ser [N(A)[ [A[ para todo A X. En nuestro ejemplo previo, tenemos N(x
1
, x
2
, x
3
) = y
2
, y
3
, y
como [N(x
1
, x
2
, x
3
)[ < [x
1
, x
2
, x
3
[ no hay matching completo posible.
Resulta que el que se cumpla esta condicion para todo subconjunto de X es necesario y suciente para la
existencia de un matching maximo, como demostraremos a continuacion.
Teorema 7.13 (Hall). Sea G = (X Y, E) un grafo bipartito. Entonces hay un matching completo de G si y solo
si para todo A X tenemos [N(A)[ [A[.
Demostracion. Demostramos implicancias en ambos sentidos. Para simplicar la discusion, seguiremos hablando de
trabajos, calicacion para los mismos y trabajos asignados.
Si hay un matching completo, para cada subconjunto A X tenemos en N(A) al menos los trabajos asignados
por el matching a los integrantes de A, o sea [N(A)[ [A[.
72
x
6
x
5
x
4
x
3
x
2
x
1
y
1
y
2
y
3
y
4
y
5
y
6
y
7
(a) M
1
x
6
x
5
x
4
x
3
x
2
x
1
y
1
y
2
y
3
y
4
y
5
y
6
y
7
(b) M
2
Figura 36: Matchings en un grafo bipartito
Al reves, supongamos que para todo A X se cumple [N(A)[ [A[, y consideremos un matching M cualquiera
de G. Si M no es completo, demostraremos como construir un nuevo matching M

tal que [M

[ = [M[+1. Repitiendo
el proceso, nalmente obtenemos un matching completo.
Si M no es completo, hay alg un x
0
X que no participa en M. Dado que por hipotesis N(x
0
) 1, hay al
menos un vertice y
1
Y tal que x
0
, y
1
E. Si y
1
no participa en M, podemos agregar el arco x
0
, y
1
a M, dando
el matching prometido M

. Por otro lado, si y


1
ya esta asignado, hay un arco x
1
, y
1
M. Como por hipotesis
[N(x
0
, x
1
) 2, habra al menos un trabajo y
2
,= y
1
para el que x
0
o x
1
estan calicados, y que no esta asignado
a ninguno de ellos en M. Estamos creando un zig-zag de arcos x
i
, y
i+1
que no son parte de M y arcos y
i
, x
i

que son parte de M. Como los conjuntos involucrados son nitos el proceso terminara y hallaremos un y
k
Y sin
asignar. Intercambiado los arcos asignados con los sin asignar en nuestro zig-zag obtenemos un matching mayor,
como prometido.
La demostracion del teorema de Hall motiva la siguiente:
Denicion Sea G = (X Y, E) un grafo bipartito, y M un matching de G. Un camino en G se llama alternante
para M si alterna arcos de M con arcos que no estan de M.
Nuestra discusion previa indicara que de A a lo mas [N(A)[ podran encontrar trabajo. Esto lleva a:
Denicion Sea G = (X Y, E) un grafo bipartito. La deciencia de G es:
d = max
AX
[A[ [N(A)[
Siempre podemos tomar A = , para el cual obviamente [N(A)[ = , y en tal caso [A[ [N(A)[ = 0, con lo que la
deciencia es siempre no-negativa.
Con esto podemos demostrar:
Teorema 7.14. Sea G = (X Y, E) un grafo bipartito de deciencia d. Entonces el matching maximal M de G
cumple [M[ = [A[ d.
73
Demostracion. Primeramente, si A X es un conjunto para el cual d = [A[ [N(A)[, a lo menos d elementos
de A quedaran sin Y asignado, y as ning un matching puede tener mas que el tama no indicado. Basta entonces
demostrar que hay un matching de ese tama no.
Tomamos un conjunto D de nuevos vertices con [D[ = d. Denimos el grafo bipartito G

= (X

, E

)
mediante:
X

= X
Y

= Y D
E

= E x, y: x X y D
Estamos agregando un nuevo conjunto de trabajos D para los que todos estan calicados. Entonces G

cumple con
las condiciones del teorema de Hall y tiene un matching completo M

. Pero M

incluye todos los vertices de D, ya


que si A es un conjunto para el cual d = [A[ [N(A)[ es maximo, la unica forma de parear todos los elementos de
A es incluir los elementos de D en el pareo. Eliminando los arcos que incluyen vertices de D de M

obtenemos un
matching de tama no [X[ d.
El teorema 7.14 no es particularmente util para encontrar un matching maximo, ni siquiera ayuda mucho a la
hora de hallar su tama no ya que considera analizar los 2
|X|
subconjuntos de X para determinar la deciencia. Una
forma practica de encontrar matchings maximos las da el siguiente teorema.
Teorema 7.15. Sea G = (X Y, E) un grafo bipartito, y M un matching de G. Si M no es maximo, G contiene
un camino alternante para M.
Demostracion. Sea M

un matching maximo de G, y sea F el conjunto de arcos que estan en M

o M, pero no
en ambos (esta es la diferencia simetrica entre estos conjuntos, que se anota F = M

M). Los arcos en F y los


vertices que contienen forman un grafo bipartito cuyos vertices tienen grado 1 o 2, por lo que sus componentes son
caminos y ciclos. Pero en todo camino o ciclo los arcos de M alternan con arcos no de M, por lo que en todo ciclo
el n umero de arcos en M debe ser igual al n umero de arcos no en M (al ser G bipartito, no tiene ciclos de largo
impar). Como [M

[ > [M[, hay mas arcos de M

que arcos de M en F. Por lo tanto, hay al menos un componente


de F que es un camino con mas arcos en M

que en M, y este es un camino alternante para M.


Esto sugiere la siguiente estrategia para hallar un matching maximo:
1. Comience con un matching M cualquiera (un arco por s solo sirve)
2. Busque un camino alternante para M
3. Si encontro un camino alternante, construya un matching M

mejor intercambiando arcos que pertenecen al


matching con los que no de la forma usual, y vuelva al paso (2) con M

en vez de M
4. Si no hay camino alternante, M es maximo.
Para hallar un camino alternante, podemos usar b usqueda a lo ancho. Comenzando con un vertice sin match x
0
construimos un arbol de caminos alternantes parciales desde x
0
como sigue:
1. En el nivel 1 inserte los vertices y
1
, y
2
, . . . , y
k
adyacentes a x
0
. Si alguno de estos vertices no tiene match,
digamos y
i
, detengase. En este caso x
0
, y
i
es un camino alternante.
2. Si todos los vertices en el nivel 1 tienen match, inserte vertices x
1
, x
2
, . . . , x
k
que son los matches de y
1
, y
2
, . . . , y
k
en el nivel 2.
3. En el nivel 3, inserte los vertices adyacentes a los de nivel 2 que no tienen match con ellos. Si alguno de ellos
no tiene match, detengase: El camino desde x
0
hasta el es un camino alternante.
4. Si todos los vertices de nivel 3 tienen match, inserte sus matches en el nivel 4, . . .
Claramente este proceso puede terminar porque no hay vertices a insertar en un nivel impar. En tal caso, no hemos
hallado un camino alternante, y habra que intentar otro punto de partida. Si ninguno de los vertices sin match
resulta en un camino alternante, el match que tenemos es maximo.
Consideremos el matching inicial en el grafo bipartito que muestra la gura 37a. En ese matching el vertice
x
2
no tiene match; la gura 37b muestra el arbol construido a partir de ese vertice seg un la estrategia descrita,
indicando un camino alternante identicado en el proceso; y nalmente la gura 37c da el matching resultante de
intercambiar los arcos pertenecientes al matching inicial con los que no aparecen en el.
74
x
1
x
2
x
3
x
4
x
5
y
1
y
2
y
3
y
4
y
5
y
6
(a) Matching inicial
x
2
y
1
y
2
y
3
x
3
x
4
x
1
y
5
y
4
y
6
x
5
(b) B usqueda de un alternating path
x
1
x
2
x
3
x
4
x
5
y
1
y
2
y
3
y
4
y
5
y
6
(c) Matching resultante
Figura 37: Aumentando un matching
7.11.3. Transversals de familias de conjuntos nitos
Ejemplo En la Universidad de Miskatonic todo lo resuelven mediante comites de sus academicos. Hay seis profesores
que participan en los distintos comites, los profesores Atwood, Dexter, Ellery, Freeborn, Halsey y Upham. Estan
organizados en los siguientes comites:
Academico: Atwood, Upham
Investigacion: Atwood, Dexter, Upham
Administracion: Dexter, Upham
Estacionamientos: Ellery, Freeborn, Halsey
Se decide que cada comite debe enviar un representante al nuevo Comite de Comites de la Universidad, y cada uno
puede representar solo a un comite. Es posible crear este comite?
Dados los miembros de los distintos comites, esto se puede lograr de diferentes formas. Por ejemplo, podemos
elegir a Atwood, Dexter, Ellery y Freeborn. Si embargo, si el comite de estacionamientos estuviera formado solo
por Dexter y Ellery, no se puede formar el Comite de Comites.
La forma general de este problema se expresa mas claramente usando la nocion de familia de conjuntos. Tenemos
la familia T = S
i
: i I de conjuntos (usamos I como el conjunto de los ndices, basicamente los nombres de los
conjuntos), no necesariamente diferentes, y buscamos un representante s
i
para cada i I, tales que cada s
i
S
i
y son todos diferentes. Tal conjunto de representantes distintos se llama transversal de T. Nuestro problema es
entonces hallar condiciones que aseguren que la familia T tenga un transversal. Esto tiene perfecto sentido incluso
cuando I es innito, pero aca nos restringimos a familias nitas. En nuestro ejemplo, el conjunto ndice I no es mas
que los nombres de los comites, y S
i
son los integrantes del comite i.
En realidad, esto no es mas que una forma disfrazada del problema de hallar un matching. Para ver esto,
construimos un grafo bipartito cuyas partes corresponden a los conjuntos y a los elementos, y hay arcos que unen
a los elementos con los conjuntos a los que pertenecen. La gura 38 muestra la situacion de los comites de la
Universidad de Miskatonic.
Formalmente, denimos G = (X Y, E) mediante:
X = I (los nombres de los conjuntos)
Y =
_
iI
S
i
(todos los elementos de los conjuntos)
75
Atwood Dexter
Ellery
Freeborn
Halsey Upham
Academico Administracion
Investigacion
Estacionamiento
Figura 38: Comites de la Universidad de Miskatonic
y el arco i, y esta en E si y S
i
. Entonces un transversal de T no es mas que un matching completo de G. En
estos terminos la condicion de Hall es facil de expresar. Un subconjunto H de I es una subfamilia de T, y N(H) es
simplemente los miembros de todos esos conjuntos:
N(H) =
_
iH
S
i
Usando esta interpretacion, el teorema de Hall es:
Teorema 7.16. (Hall, version original) La familia nita de conjuntos
T = S
i
: i I
tiene un transversal si y s olo si

_
iH
S
i

para todo H I
Una forma simple de expresar esto es decir que cualquier union de k de los conjuntos debe tener al menos k
miembros en total.
En realidad este es el teorema de Hall original, que tambien se conoce como Halls Marriage Theorem, por
la interpretacion siguiente: I es un conjunto de mujeres, mientras S
i
corresponde al conjunto de hombres con los
cuales i I estara dispuesta a casarse. Entonces hay forma de conseguirle pareja a todas las mujeres si y solo
si para cada conjunto de mujeres el conjunto de hombres con los que estaran dispuestas a casarse en total no es
menor al conjunto de mujeres.
7.12. Grafos rotulados
En muchas aplicaciones los arcos tienen asociados pesos (costos), denimos entonces un grafo rotulado como
un grafo G = (V, E) y una funcion p: E C, con C alg un conjunto (tpicamente C es R) que asocia el rotulo
(peso) p(e) al arco e.
Una situacion similar se da con rotulos en los vertices (una funcion r : V C). Esto va mas alla de la identidad
del vertice, pueden haber varios vertices con el mismo rotulo. Hay aplicaciones en las cuales estan rotulados los
arcos, los vertices, o ambos.
7.12.1. Algoritmo de Dijkstra
Nos interesa saber el costo (suma de los pesos de los arcos) para llegar a cada uno de los vertices de G partiendo
desde el vertice v.
Una solucion es aplicar una variante de b usqueda a lo ancho. Supongamos que tenemos establecido que el camino
mas corto de v a x tiene largo l[x]. Supongamos que tenemos un vecino y, para el que tenemos la estimacion l[y].
76
La ruta mas corta que tenemos de v a y pasando por x tiene costo l[x] +w(x, y), y si nuestra estimacion previa
l[y] > l[x] +w(x, y), debieramos actualizar l[y]
Informalmente, el algoritmo es el siguiente: Inicialmente sabemos que l[v] = 0. Podemos partir con l[p] =
para todos los demas vertices p, e ir actualizando los l[p] en b usqueda a lo ancho partiendo de v con nuestra mejor
estimacion hasta el momento del largo del camino de v a cada vertice. Una manera de entenderlo es considerar el
grafo como una coleccion de hilos de los largos de los arcos y los vertices nudos entre ellos, y ponemos esto sobre
la mesa. Tomamos el nudo que representa el vertice inicial, y lo levantamos hasta que un primer nudo se separa de
la mesa. Este nudo es el que esta mas cerca del inicial, y registramos su distancia desde este. Continuamos de la
misma forma, cada vez que un nudo se despega de la mesa es que hemos llegado a su distancia mnima del nudo
inicial. En terminos de trabajar con el grafo, signica mantener una coleccion de vertices a los cuales ya conocemos
la distancia mnima (inicialmente solo el vertice inicial), y luego ir agregando aquel vertice no incluido a un en la
coleccion que queda mas cerca de alguno cuya distancia mnima ya es denitiva.
Una version mas formal es el algoritmo 6. Lo que hacemos aca es ir calculando distancias tentativas, y las dejamos
denitivas una vez que este claro que no cambiaran mas. El tiempo de ejecucion de este algoritmo depende de como se
Algoritmo 6 Costos mnimos desde el vertice v (Dijkstra)
variable Q: Conjunto de vertices
Q V v
l[v] 0
Marque todos los vertices x Q con l[x] =
while Q no vaco do
Elija x Q con l[x] mnimo
if l[x] = then
break Los vertices restantes no son alcanzables desde v
end if
Q Qx
for todo vecino y de x en Q do
l[y] mn(l[y], l[x] +w(x, y))
end for
end while
implementen las operaciones con el conjunto Q, siendo O([E[ disminuir clave en Q+[V [ extraer mnimo de Q)
Si lo implementamos simplemente como una lista con b usqueda secuencial, esto es O([V [
2
+[E[) = O([V [
2
). Usando
una estructura de datos mas sosticada esto puede reducirse a O([E[ +[V [ log[V [).
7.12.2. Algoritmo de Bellman-Ford
Otro algoritmo que resuelve el mismo problema, pero que tiene la ventaja de poder manejar arcos con costo
negativo (claro que no ciclos de costo negativo, en cuyo caso la distancia mnima no esta bien denida), es el de
Bellman-Ford (algoritmo 7). Que este algoritmo es correcto se demuestra por induccion sobre las ejecuciones del
ciclo for externo.
Teorema 7.17. Despues de i repeticiones del ciclo, si para un vertice u tenemos l[u] < entonces es el largo de
alg un camino desde v a u. Si hay un camino de v a u de a lo mas i arcos, entonces l[u] es a lo mas el largo del
camino mas corto con a lo mas i arcos de v a u.
Demostracion. Por induccion sobre el n umero de iteraciones.
Base: Cuando i = 0, antes de ejecutar el ciclo por primera vez. En esta situacion l[v] = 0 y para los demas l[u] = ,
que corresponde a la situacion descrita.
Induccion: Primero lo primero. Cuando ajustamos l[y] mnl[y], l[x] + w(x, y), por induccion tenemos que
l[x] es el largo de alg un camino de v a x, y l[x] +w(x, y) es entonces el largo del camino que va de v a x y
luego pasa por el arco x, y para llegar a y. Tambien l[y] es el largo de alg un camino de v a y, y al ajustar
estamos depositando en l[y] el largo de alg un camino de v a y.
77
Algoritmo 7 Costos mnimos desde el vertice v (Bellman-Ford)
variable Q: Conjunto de vertices
Q V v
l[v] 0
Marque todos los vertices x Q con l[x] =
for i 1 to [V [ 1 do
for x, y E do
l[y] mnl[y], l[x] +w(x, y)
end for
end for
if hay un arco x, y con l[x] +w(x, y) < l[y] then
Hay un ciclo de costo negativo
end if
Para lo segundo, consideremos el camino mas corto de v a y con a lo mas i arcos. Sea z el ultimo vertice antes
de y en este camino. Por induccion, despues de i 1 iteraciones tenemos que l[z] es a lo mas el largo de un
camino con a lo mas i 1 arcos desde v a z, y l[y] el largo de un camino de a lo mas i 1 arcos desde v a
y. Agregando el arco z, y al camino de v a z tenemos un camino de i arcos, si resulta mas corto que el que
tiene a lo mas i 1 arcos actualizamos l[y]. El resultado nal, luego de considerar todos los arcos que llegan
a y, es que tenemos el largo del camino mas corto con a lo mas i arcos.
Para completar la demostracion de que el algoritmo 7 es correcto, basta observar que luego de [V [ 1 iteraciones
hemos calculado los costos mnimos de los caminos de largo a lo mas [V [ 1, que es el largo maximo posible de un
camino en el grafo. Si a un pueden hacerse mejoras, es porque hay un ciclo de largo negativo.
El tiempo de ejecucion de este algoritmo es O([V [ [E[)). Esto es mayor que la complejidad del algoritmo de
Dijkstra, pero como ya indicamos este algoritmo tiene la virtud de manejar arcos de largo negativo. Por lo demas, si
en alg un ciclo del for externo no hay cambios, ya no los habra mas y podemos terminar el algoritmo (basicamente
hemos llegado al nal del camino mas largo), por lo que esta complejidad es pesimista.
Una variante de este algoritmo se usa en redes de computadores (por ejemplo, es parte del protocolo RIP [5])
para encontrar rutas optimas, ya que los computos pueden distribuirse a los nodos: Cada cual recoge informacion
de rutas y distancias optimas estimadas desde sus vecinos, actualiza sus propias estimaciones de las mejores rutas
y sus costos, y distribuye los resultados de vuelta a sus vecinos.
7.12.3. Algoritmo de Floyd-Warshall
A diferencia de los anteriores, este algoritmo calcula los costos de los caminos mnimos entre todos los pares
de vertices del grafo. Tomamos como los vertices del grafo los n umeros 1, 2, . . . , [V [, y actualizamos un arreglo
l[i, j] de forma que despues de la iteracion k el valor del elemento l[i, j] es el costo del camino mas corto entre los
vertices i y j que visita unicamente los vertices 1, 2, . . . , k entremedio. Llamemos l
(k)
[i, j] a este valor. Claramente
l
(0)
[i, j] = w(i, j), el costo de ir directamente de i a j, ya que no podemos pasar por ning un vertice intermedio.
Para calcular el valor de l
(k+1)
[i, j], consideramos que el camino mas corto que pasa a lo mas por k + 1 tiene dos
posibilidades: Nunca pasa por k + 1, solo llega hasta k, el costo es l
(k)
[i, j] en tal caso; o pasa por k + 1, lo que
signica que de i va a k + 1 y luego de k + 1 va a j, en ambos casos pasando a lo mas por 1, 2, . . . , k, con costo
l
(k)
[i, k + 1] +l
(k)
[k + 1, j]. Calculamos
l
(k+1)
[i, j] = mnl
(k)
[i, j], l
(k)
[i, k + 1] +l
(k)
[k + 1, j]
Una vez alcanzado k = [V [, ya no hay restricciones sobre los vertices visitados en el camino y hemos calculado los
costos mnimos. Esto resulta en el algoritmo 8. No seguimos rigurosamente la descripcion anterior, a veces usamos
valores ya actualizados de l
(k)
[i, j]. Esto no afecta la correctitud. Lo notable de este algoritmo es que efect ua solo
O([V [
3
) comparaciones, cuando pueden haber O([V [
2
) arcos en cada camino, y debemos considerar O([V [
2
) pares
de vertices como inicio y n.
78
Algoritmo 8 Costos mnimos entre todos los vertices (Floyd-Warshall)
for i 1 to [V [ do
for j 1 to [V [ do
l[i, j] w(i, j)
end for
end for
for k 1 to [V [ do
for i 1 to [V [ do
for j 1 to [V [ do
l[i, j] mnl[i, j], l[i, k] +l[k, j]
end for
end for
end for
v
c
b
a
d
e
7
9
3
2
4
6
8
1
5
Figura 39: Ejemplo de grafo para arbol recubridor mnimo
7.12.4.

Arbol recubridor mnimo
En muchas aplicaciones interesa encontrar el grafo de costo mnimo (el costo es simplemente la suma de los
pesos de los arcos en el subgrafo) que conecta a un conjunto dado de vertices. Claramente tal grafo sera un arbol
recubridor, el arbol recubridor mnimo (minimal spanning tree en ingles, abreviado MST). Veremos varios algoritmos
para construirlo.
7.12.5. Algoritmo de Prim
Una estrategia es agregar a un arbol parcial aquel arco que conecta a un vertice al arbol de forma que el costo
sea mnimo. Comenzamos con un vertice cualquiera como arbol inicial. Esto se conoce como el algoritmo de Prim.
Un poco mas formalmente: Inicialmente T es solo un vertice cualquiera del grafo. Sea T el arbol actual, elegimos
el vertice v V T tal que el costo de llegar a el desde un vertice x T es mnimo. Luego agregamos el arco v, x
a T. Esto se repite hasta que no queden vertices sin cubrir.
Aplicando el algoritmo al grafo de la gura 39, paso a paso se obtienen los arboles de la gura 40.
Teorema 7.18. El algoritmo de Prim obtiene un arbol recubridor mnimo.
Demostracion. Por contradiccion. Sea w(G) el costo total de los arcos en el grafo G. Sea T el arbol recubridor
construido por el algoritmo, con e
1
, e
2
, . . . , e
n
los arcos en el orden en que los elige el algoritmo. Entonces:
w(T) = w(e
1
) +w(e
2
) + +w(e
n
)
Sea U un arbol recubridor mnimo de G, y supongamos que el arbol recubridor T que construye el algoritmo no es
mnimo, vale decir w(U) < w(T).
79
v
c
b
a
d
e
7
9
3
2
4
6
8
1
5
(a) Paso 1
v
c
b
a
d
e
7
9
3
2
4
6
8
1
5
(b) Paso 2
v
c
b
a
d
e
7
9
3
2
4
6
8
1
5
(c) Paso 3
v
c
b
a
d
e
7
9
3
2
4
6
8
1
5
(d) Paso 4
v
c
b
a
d
e
7
9
3
2
4
6
8
1
5
(e) Paso 5
Figura 40: El algoritmo de Prim aplicado al grafo de la gura 39
Sea e
k
el primer arco en T (en el orden en que los elige el algoritmo) que no esta en U. Eliminando e
k
de
T obtenemos dos componentes que son arboles. Habra alg un arco e

U que conecta estos dos componentes. Si


w(e

) < w(e
k
) el algoritmo habra elegido e

en vez de e
k
, as que w(e

) w(e
k
).
Siguiendo este razonamiento, nuestro algoritmo siempre habra elegido un arco de costo no mayor que el incluido
en U, y w(T) w(U). Por lo tanto T es un arbol recubridor mnimo.
En este caso, la estrategia voraz de elegir el mejor ahora sin considerar consecuencias futuras tiene exito.
7.12.6. Algoritmo de Kruskal
Otra idea es ordenar los arcos en orden de costo creciente, y agregar sucesivamente el siguiente arco que no
forma un ciclo. Este es el algoritmo de Kruskal. Un ejemplo paso a paso para el grafo de la gura 39 se muestra en
la gura 41.
Aplicando el algoritmo, vamos creando un bosque (forest, coleccion de arboles). Inicialmente el bosque es cada
vertice por s solo, luego en cada paso conectamos dos arboles. Se van agregando arcos con el menor coste posible
que no generen un ciclo. Como el grafo resultante es conexo y no tiene ciclos, es un arbol recubridor del grafo.
En adicion, resulta un arbol recubridor mnimo, por un razonamiento similar al dado para el algoritmo de Prim.
Nuevamente la estrategia voraz de tomar el mejor localmente tiene exito.
7.12.7.

Arboles recubridores en redes de computadores
Las redes de area local actualmente en uso [11] son redes de difusion, vale decir, lo que una de las estaciones
conectadas transmite lo pueden recibir todas las demas conectadas al mismo medio fsico. Suele ser de interes
conectar entre s redes de area local, lo que se hace a traves de equipos denominados bridges, que se encargan
de retransmitir solo el traco de interes en la otra rama. Por razones de conabilidad interesa tener conexiones
redundantes, vale decir, varios caminos entre redes. Pero esto introduce la posibilidad de crear ciclos, y por tanto
traco que se retransmite indenidamente. Un ejemplo se muestra en la gura 42. Esta situacion puede modelarse
mediante un grafo, en el cual las redes son vertices y las conexiones entre redes son arcos. Para la red de la gura 42
resulta el grafo de la gura 43, los arcos representan las conexiones entre redes. En estos terminos, lo que se busca es
hallar un arbol recubridor del grafo (inhabilitando bridges que no participan en el). Para cumplir con redundancia
80
v
c
b
a
d
e
7
9
3
2
4
6
8
1
5
(a) Paso 1
v
c
b
a
d
e
7
9
3
2
4
6
8
1
5
(b) Paso 2
v
c
b
a
d
e
7
9
3
2
4
6
8
1
5
(c) Paso 3
v
c
b
a
d
e
7
9
3
2
4
6
8
1
5
(d) Paso 4
v
c
b
a
d
e
7
9
3
2
4
6
8
1
5
(e) Paso 5
Figura 41: El algoritmo de Kruskal aplicado al grafo de la gura 39
y tolerancia a fallas (y evitar el siempre presente error humano) interesa que en caso de falla la red se recongure
automaticamente.
Para ello se han estandarizado algoritmos (conocidos como STP, Spanning Tree Protocol y RSTP, Rapid Spanning
Tree Protocol, denidos en [10]) mediante los cuales los bridges cooperan para congurar un arbol recubridor
automaticamente. La manera de hacer esto en resumen es que los bridges en la red intercambian una prioridad
jada por el administrador de la red junto con sus identicadores (jados de fabrica, unicos en el mundo). Aquel
bridge que tenga el mnimo par prioridad e identicador se elige de raz, y todos los demas calculan sus distancias
hacia la raz a traves de cada una de sus interfases. Se habilitan unicamente las interfases que dan el camino mas
corto hacia la raz. Este proceso se repite peri odicamente, de forma de reaccionar frente a fallas y reconguraciones.
8. Digrafos, redes, ujos
Denicion Un digrafo (o grafo dirigido) consta de un conjunto nito V de vertices, y un subconjunto A de V V ,
cuyos miembros se llaman arcos. Anotaremos D = (V, A) para el digrafo denido de esta forma.
Los digrafos se pueden representar gracamente de forma similar a los grafos, solo que aca un arco es un par
ordenado (x, y), mientras en el grafo es un par no ordenado x, y. Si (x, y) es un arco, lo indicamos mediante una
echa de x a y, si hay un arco (x, x) lo indicamos mediante un ciclo, si hay arcos (x, y) e (y, x) los indicamos por
dos echas. La gura 44 muestra ejemplos. Nuestras representaciones de grafos para uso computacional se aplican
con cambios obvios a este caso. Igualmente, podemos aplicar los algoritmos de recorrido aca.
Formalmente, un digrafo es simplemente otra manera de representar una relacion R entre elementos del mismo
conjunto (un grafo bipartito, por otro lado, representa una relacion entre elementos de conjuntos disjuntos). Las
propiedades de las relaciones pueden facilmente traducirse en propiedades del digrafo. Por ejemplo, si la relacion es
simetrica los arcos aparecen en pares (salvo los bucles), (x, y) es un arco exactamente cuando lo es (y, x).
Las deniciones de camino, camino simple, circuito y ciclo son analogas a las de grafos. As, un camino dirigido
en D = (V, A) es una secuencia de vertices v
1
, v
2
, . . . , v
k
tal que (v
i
, v
i+1
) esta en A para 1 i k 1, un camino
dirigido simple es un camino dirigido en que todos los vertices son diferentes, un circuito dirigido es un camino
cuyo inicio y n coinciden, mientras un ciclo dirigido es un camino dirigido en que todos los vertices son distintos,
s olo que el inicial y el nal coinciden.
81
A
B
C
D
E
B1
B2
B3
B4
B5
B6
Figura 42: Esquema de redes interconectadas por bridges
D
A
C
E
B
Figura 43: La red de la gura 42 como grafo
En lo que sigue veremos dos aplicaciones diferentes que se pueden modelar mediante esto.
8.1. Redes y rutas crticas
Hay muchas situaciones que se pueden modelar mediante digrafos, no mediante grafos. Un ejemplo tpico es la
red de calles, donde hay rutas de una sola va. Es com un que se asocien costos o distancias a los arcos. Con esta
idea en mente, usaremos red para un digrafo D = (V, A) junto con una funcion w: A R.
Un caso tpico de aplicaciones de redes son las redes de actividades. Suponiendo un gran proyecto de construccion,
este se subdivide en actividades menores. Las actividades a su vez estan relacionadas, en el sentido que algunas
no pueden iniciarse antes que terminen otras. Al planicar un proyecto de este tipo se suele usar una red de
actividades, con arcos representando actividades y los vertices representando eventos, donde un evento es el n
de una actividad. El peso de un arco es la duracion de la actividad, y se busca organizar las actividades de forma
de minimizar el tiempo total del proyecto.
Consideremos un ejemplo concreto. La tabla 4 da las duraciones de las actividades (en meses), y las dependencias
entre ellas (que actividades deben estar completas antes de comenzar la actividad indicada).
El primer paso es construir la red de actividades, ver gura 45. Los arcos representan actividades, y los vertices
sus inicios y nales. Es claro que resulta un digrafo sin ciclos. Para cada evento calcularemos E(v), el instante
mas temprano en que ese evento puede tener lugar. Esto corresponde al momento mas temprano en que todas las
actividades previas a v han terminado. Iniciamos el proceso con E(1) = 0. Luego esta claro que E(2) = 5, ya
que la unica actividad involucrada es A = (1, 2). Ahora, como 3 involucra a A = (1, 2) y a E = (2, 3), E(3) =
maxE(1) + 1, E(2) + 2 = max0 + 1, 5 + 2 = 7.
Continuando de esta forma, obtenemos los instantes de termino dados en la tabla 5, con lo que el plazo mnimo
82
Figura 44: Ejemplos de digrafos
Act Descripcion Requisitos Dur
A Dise no del producto 5
B Analisis de mercado 1
C Analisis de produccion A 2
D Prototipo del producto A 3
E Dise no de folleto A 2
F Analisis de costos C 3
G Pruebas del producto D 4
H Entrenamiento ventas B, E 2
I Denici on de precios H 1
J Reporte del proyecto F, G, I 1
Cuadro 4: Actividades y dependencias
para completar el proyecto es de 13 meses.
Esto es basicamente una variante del algoritmo de Dijkstra (ver seccion 7.12.1), solo que estamos calculando el
camino mas largo a traves de la red.

Este esta perfectamente denido en este caso, ya que no hay ciclos. Aca basta
un barrido a lo ancho, al no haber ciclos se obtiene el valor nal directamente. En cada vertice visitado calculamos
E(v) partiendo del el evento inicial s (el comienzo del proyecto) mediante la regla:
E(s) = 0 E(v) = max
x
E(x) +w(x, v)
donde el maximo es sobre los vertices x predecesores de v.
Este metodo de estudiar redes de actividades es parte de la tecnica que se conoce como analisis de camino
crtico. El resto de la tecnica contin ua como sigue: Calculamos L(v), el ultimo instante en que puede ocurrir el
evento v sin retrasar el proyecto completo de forma similar a como se calcularon los E(v), pero comenzando del
evento nal t y trabajando en reversa:
L(t) = E(t) L(v) = mn
x
L(x) w(v, x)
donde el mnimo es sobre los vertices x sucesores de v. Aplicando esto al ejemplo de la gura 45, da la tabla 6.
Podemos ademas calcular la holgura de cada actividad (u, v), que representa el maximo retraso que puede sufrir
el comienzo de la actividad sin retrasar el n del proyecto:
F(u, v) = L(v) E(u) w(u, v)
Las actividades sin holgura se dice que son crticas, cualquier retraso en estas se traduce en un retraso del proyecto
completo. Toda red de actividades tiene al menos un camino dirigido entre principio y n formado unicamente por
actividades crticas, tal camino se llama ruta crtica. Combinando los valores en las tablas 5 y 6 obtenemos las
holguras dadas en la tabla 7. Son actividades crticas las que no tienen holgura, en nuestro caso A, D, G y J; y se
ve en la gura 45 que forman un camino a traves del grafo.
8.2. Redes y ujos
En lo que sigue interpretaremos los arcos como tuberas por las que puede uir alguna mercadera. Los pesos
numericos representan la capacidad del arco. Ademas, habra un vertice s con la propiedad que todos los arcos que
83
A
D
B
E
C
H
I
F
G
J
5
6
7
8
4
3
2
1
Actividad: A B C D E F G H I J
Arco: (1, 2) (1, 3) (2, 4) (2, 5) (2, 3) (4, 7) (5, 7) (3, 6) (6, 7) (7, 8)
Duracion: 5 1 2 3 2 3 4 2 1 1
Figura 45: Una red de actividades
v: 1 2 3 4 5 6 7 8
E(v): 0 5 7 7 8 9 12 13
Cuadro 5: Terminos mas tempranos por actividad para la red de la gura 45
contienen a s se alejan de el, y otro vertice t con la propiedad de que todos los arcos que lo contienen se dirigen a el.
Al primero se le llama fuente (source), al segundo sumidero (sink). En resumen, trataremos con redes que incluyen:
(i) Un digrafo D = (V, A)
(ii) Una funci on de capacidad c: A R
(iii) Una fuente s y un sumidero t
Supongamos que alg un material uye por la red, y sea f(x, y) el ujo a lo largo del arco (x, y). Insistiremos
que, salvo para la fuente y el sumidero, que el ujo que arriba a un vertice v debe ser el ujo que sale (no hay
acumulacion de material en los vertices).
Denicion Un ujo en una red es una funcion que asigna un n umero f(x, y) a cada arco (x, y), sujeto a las
condiciones:
Viabilidad: El ujo en cada enlace es a lo mas su capacidad, f(x, y) c(x, y) para todo arco (x, y) A
Skew symmetry: (Simetra torcida) es m as que nada una convencion de notacion: f(y, x) = f(x, y) para todo
arco (x, y) A
Conservacion: Para todo vertice que no sea la fuente ni el sumidero de la red requerimos que el ujo neto que
entra en el sea cero:

yV
f(x, y) = 0
El valor del ujo es:
val(f) =

yV
f(s, y)
84
v: 1 2 3 4 5 6 7 8
L(v): 0 5 9 9 8 11 12 13
Cuadro 6: Inicio mas tardo por actividad para la red 45
Actividad: A B C D E F G H I J
Arco: (1, 2) (1, 3) (2, 4) (2, 5) (2, 3) (4, 7) (5, 7) (3, 6) (6, 7) (7, 8)
Holgura: 0 8 2 0 2 2 0 2 2 0
Cuadro 7: Holguras para las actividades de la gura 45
Exploremos un poco las propiedades de la denicion. La viabilidad indica unicamente que el ujo no puede
exceder la capacidad del enlace. Skew symmetry es simplemente una conveniencia notacional (basicamente, si
vamos contra corriente contabilizamos el ujo como negativo). La conservacion indica que el ujo neto que sale
de un vertice es nulo, y por simetra el que entra tambien:

xV
f(x, y) =

xV
f(y, x) =

xV
f(y, x) = 0
Si no hay arco (x, y), no puede haber ujo entre ellos, y f(x, y) = f(y, x) = 0. Como no se permite acumulacion en
los vertices intermedios, esta claro que el ujo que sale de s debiera ser el ujo que entra en t:
val(f) =

xV
f(x, t)
Esto lo demostraremos formalmente mas adelante.
Un problema obvio es obtener el valor m aximo del ujo en una red. Este problema nos ocupara de ahora en
adelante.
Para conveniencia, denimos los ujos de entrada y salida de un vertice:
inow(v) =

u V
f(u, v) > 0
f(u, v)
outow(v) =

u V
f(v, u) > 0
f(v, u)
En estos terminos, conservacion se expresa simplemente como el ujo que entra a un vertice es igual al que sale si
el vertice no es la fuente ni el sumidero:
inow(v) = outow(v)
Algunos autores usan la notacion v

para lo que llamamos inow(v), y similarmente v


+
para outow(v).
Un ejemplo de red de ujos se ve en la gura 46, donde se da tambien un ujo. Para vericar que es un ujo, debe
cumplir las condiciones. No hemos dado ujos considerados contracorriente, estamos suponiendo implcitamente
que por ejemplo f(d, c) = f(c, d) = 1. Las condiciones de capacidad se cumplen, ya que por ejemplo f(c, d) = 1
mientras c(c, d) = 7. Tambien debemos vericar conservacion, por ejemplo que para el vertice d la suma de los ujos
se anula:
f(a, d) +f(b, d) +f(c, d) +f(t, t) = 1 + 2 + 1 4
= 0
El valor de este ujo es la suma de los ujos que salen de la fuente, vale decir:
val(f) = f(s, a) +f(s, b) +f(s, c)
= 8
85
s
a
b
c
d
t
5
4
2
3
4
7
3
5
(x, y): (s, a) (s, b) (s, c) (a, d) (b, d) (c, d) (a, t) (c, t) (d, t)
f(x, y): 3 2 3 1 2 1 2 2 4
Figura 46: Una red y un ujo en la red
Resulta tambien, como esperabamos, que el ujo hacia el sumidero es igual al ujo que sale de la fuente:
f(a, t) +f(d, t) +f(c, t) = 2 + 2 + 4
= 8
No contabilizamos ujos entre s y los demas vertices (respectivamente entre los otros vertices y t) ya que no hay
conexiones directas entre ellos.
8.2.1. Trabajando con ujos
Para conveniencia, usaremos una convencion de suma implcita, en que si mencionamos un conjunto de vertices
como argumento a f, estamos considerando la suma de los ujos sobre ese conjunto, y similarmente para c. Por
ejemplo, al anotar f(X, Y ), donde X e Y son conjuntos de vertices, entenderemos:
f(X, Y ) =

x X
y Y
f(x, y)
En estos terminos, la condicion de conservacion se reduce a f(x, V ) = 0 para todo x / s, t (recuerdese que por
convencion s es la fuente y t el sumidero de la red). Ademas, omitiremos las llaves al restar conjuntos de un solo
elemento. As, en f(s, V s) = f(s, V ) la notacion V s signica el conjunto V s. Esto simplica mucho las
ecuaciones que involucran ujos. El lema siguiente recoge varias de las identidades mas comunes. La demostracion
queda como ejercicio.
Lema 8.1. Sea D = (V, A) una red, y sea f un ujo en D. Entonces:
1. Para todo X V , se cumple f(X, X) = 0
2. Para todo X, Y V se cumple f(X, Y ) = f(Y, X)
3. Para todo X, Y, Z V siempre que X Y = se cumplen
f(X Y, Z) = f(X, Z) +f(Y, Z)
f(Z, X Y ) = f(Z, X) +f(Z, Y )
Como ejemplo de uso de la notacion y del lema 8.1, demostraremos que val(f) = f(V, t). Intuitivamente, lo
que entra a la red por la fuente debe salir por el sumidero, ya que no se permiten acumulaciones entremedio.
86
Formalmente:
val(f) = f(s, V )
= f(V, V ) f(V s, V )
= f(V s, V )
= f(V, V s)
= f(V, t) +f(V, V s t)
= f(V, t)
En esto usamos el hecho
f(V, V s t) =

xV {s,t}
f(V, x)
=

xV {s,t}
f(x, V )
= 0
que sigue de conservacion, ya que cada termino de la ultima suma se anula.
8.2.2. Metodo de Ford-Fulkerson
Presentaremos ahora una manera de obtener el ujo de maximo valor en una red. No lo llamaremos algo-
ritmo, ya que la estrategia general puede implementarse de varias formas, con caractersticas diferentes. En el
proceso introduciremos varias ideas importantes en muchos problemas relacionados con ujos. Supondremos que las
capacidades son enteras, de otra forma puede ser que los metodos planteados no terminen nunca (aunque converjan
hacia la solucion).
El metodo de Ford-Fulkerson es iterativo. Comenzamos con f(x, y) = 0 para todo arco (x, y), con un valor inicial
cero. En cada iteracion aumentamos el valor del ujo a traves de identicar un augmenting path (un camino entre
s y t que no esta en su maxima capacidad) y aumentamos el ujo a lo largo de este camino. Continuamos hasta que
no se pueda encontrar otro augmenting path. Por el teorema max-ow min-cut (teorema 8.7, que demostraremos
mas adelante) al nalizar el valor del ujo es maximo. Si las capacidades (y los ujos) son n umeros naturales, no
pueden crecer indenidamente y los algoritmos deben terminar.
Algoritmo 9 El metodo de Ford-Fulkerson
Inicialice f en 0
while hay un augmenting path p do
Aumente el ujo f a lo largo de p
end while
8.2.3. Redes residuales
Dada una red y un ujo f, habran arcos que admiten ujo adicional, y estos arcos con sus capacidades sin usar
a su vez constituyen una red. Intuititivamente esta nos dice cuales son las posibles mejoras del ujo, as nos interesa
analizar la relacion entre esta red y la original.
Mas formalmente, supongamos una red D = (V, A), con capacidades c: A R
+
, fuente s y sumidero t. Sea f un
ujo en D, y consideremos un par de vertices x e y. El ujo adicional que podemos enviar de x a y antes de sobrepasar
la capacidad de ese enlace es la capacidad residual del enlace (x, y), en smbolos c
f
(x, y) = c(x, y) f(x, y). Por
ejemplo, si c(x, y) = 10 y f(x, y) = 7, podemos enviar un ujo adicional de 3 de x a y sin sobrepasar la capacidad
de ese enlace. Cuando hay un ujo f(x, y) de x a y, podemos disminuir el ujo a lo largo de ese enlace en f(x, y), lo
que se representa mediante la capacidad residual del enlace (y, x) c
f
(y, x) = f(x, y). La red residual D
f
= (V, A
f
)
inducida por f es simplemente la red formada por los enlaces que no estan llenos y sus capacidades libres, o sea
A
f
= (u, v) V V : c
f
(u, v) > 0. En D
f
todos los arcos pueden admitir ujos mayores a cero, los arcos de D
f
son ya sea arcos de D o sus reversos.
87
Conviene denir la suma de ujos f
1
y f
2
:
(f
1
+f
2
)(u, v) = f
1
(u, v) +f
2
(u, v)
Notese que esto no siempre es un ujo, ya que no necesariamente cumple las restricciones de nuestra denicion.
El siguiente lema relaciona ujos en D con ujos en D
f
.
Lema 8.2. Sea D = (V, A) una red con fuente s y sumidero t, y f un ujo en D. Sea D
f
= (V, A
f
) la red residual
inducida por f, y f

un ujo en D
f
. Entonces la suma f +f

es un ujo en D, con valor val(f +f

) = val(f)+val(f

).
Demostracion. Primero, para vericar que es un ujo, debe cumplir las condiciones de la denicion. Para skew
symmetry tenemos:
(f +f

)(x, y) = f(x, y) +f

(x, y)
= f(y, x) f

(y, x)
= (f +f

)(y, x)
Para las restricciones de capacidad, note que f

(x, y) c
f
(x, y) para todo x, y V . Por tanto:
(f +f

)(x, y) = f(x, y) +f

(x, y)
f(x, y) + (c(x, y) f(x, y))
= c(x, y)
Para conservacion, como f y f

son ujos, para todo x ,= s, t se cumple f(x, V ) = f

(x, V ) = 0, con lo que


(f +f

)(x, V ) = 0.
Finalmente:
val(f +f

)) = (f +f

)(s, V )
= f(s, V ) +f

(s, V )
= val(f) + val(f

)
Como cumple con nuestra denicion y nuestras convenciones, queda demostrado lo que perseguamos.
8.2.4. Augmenting paths
Dada una red D = (V, A) y un ujo f, un augmenting path p es un camino dirigido entre s y t en la red residual
D
f
. Por la denicion de red residual, cada arco (x, y) a lo largo de p admite ujo positivo de x a y sin violar la
restriccion de capacidad. Esta claro que podemos aumentar el ujo a lo largo de p en
c
f
(p) = mn
(x,y)p
c
f
(x, y)
sin violar las restricciones de capacidad. A esto se le llama la capacidad residual de p.
Lema 8.3. Sea D = (V, A) una red, sea f un ujo en D, y sea p un augmenting path en D
f
. Dena la funcion
f
p
: V V R mediante:
f
p
(u, v) =
_

_
c
f
(p) si (x, y) esta en p
c
f
(p) si (y, x) esta en p
0 caso contrario
Entonces f
p
es un ujo en D
f
con valor val(f
p
) = c
f
(p) > 0.
De lo anterior tenemos:
Corolario 8.4. Sea D = (V, A) una red, f un ujo en D y p un augmenting path en D
f
. Sea f
p
como denido
en el lema 8.3, y dena f

: V V R mediante f

= f + f
p
. Entonces f

es un ujo en D, y su valor es
val(f

) = val(f) + val(f
p
) > val(f).
88
s t
a c
b d
10 4
9
12
14
7
16
13
20
4
Figura 47: Una red
s t
a c
b d
4/9
3/7
4/16
8/13 4/4
9/12
8/20
7/14
8/10 3/4
(a) Un ujo
s t
a c
b d
4
4
7
7
4
5
3
9
5 5
8
12
4 3
8
5
12
(b) La red residual
Figura 48: Flujo y red residual en la red de la gura 47
Demostracion. Inmediata por los lemas 8.2 y 8.3.
Para claricar estas ideas, veanse las guras 47 y 48. La gura 47 muestra una red, la gura 48a muestra
un ujo en la red de la gura 47. La gura 48b muestra la red residual con ese ujo con un augmenting path
marcado. Notese que en la red residual tenemos enlaces contracorriente cuyas capacidades son el ujo actual. Esto
signica que podemos enviar hasta ese ujo contracorriente (disminuyendo el ujo actual) a traves de ese enlace.
Este augmenting path tiene capacidad residual 4, y 49 muestra el resultado de aumentar el ujo.
8.2.5. Cortes
La idea del metodo de Ford-Fulkerson es hallar un augmenting path y aumentar el ujo a lo largo de el. Cuando
este proceso termina, tenemos un ujo de valor maximo. Al discutir estos metodos se restringen las capacidades
a n umeros naturales. De partida, capacidades negativas no tienen sentido, y resulta que si las capacidades son
irracionales hay casos en que los algoritmos no terminan nunca (convergen hacia la solucion, pero nunca la alcanzan).
La correctitud de estos metodos la garantiza el teorema max-ow min-cut, que es nuestro proximo objetivo.
Primeramente consideraremos el concepto de un corte (cut) en una red. Un corte (S, T) corresponde simplemente
a una particion de los vertices de la red en conjuntos S y T = V S tal que s S y t T, vease la gura 50. Si
f es un ujo, el ujo neto a traves del corte (S, T) se dene como f(S, T). En nuestro caso (gura 50) el ujo neto
es 9 4 + 7 = 12. La capacidad del corte (S, T) es c(S, T), que en la misma gura correspondera a 12 + 14 = 26.
Tambien se dene un corte mnimo (minimum cut) como un corte de capacidad mnima. El ujo neto que cruza
el corte incluye ujos de S a T (aportes positivos) y ujos de T a S (aportes negativos). Por otro lado, en las
capacidades se incluyen solo las de arcos de S a T. El lema siguiente relaciona los ujos con las capacidades a traves
de cortes de la red.
89
s t
a c
b d
8/10 3/4
0/9
9/12
3/7
4/16
12/13 4/4
12/20
7/14
Figura 49: El ujo aumentado seg un el augmenting path de la gura 48b
s t
a c
b d
3/4
4/9
4/16
8/13 4/4
7/14
9/12
S T
8/10
8/20
3/7
Figura 50: Un corte en la red de la gura 47 con el ujo de la gura 48a
Lema 8.5. Sea f un ujo en la red D = (V, A) con fuente s y sumidero t, y sea (S, T) un corte de la red. Entonces
el ujo neto a traves del corte es el valor del ujo.
Demostracion. Notando que por conservacion de ujo f(S s, V ) = 0, y aplicando el lema 8.1, tenemos:
f(S, T) = f(S, V ) f(S, S)
= f(S, V )
= f(s, V ) +f(S s, V )
= f(s, V )
= val(f)
Un resultado inmediato del lema 8.5 es el resultado que demostramos antes, que el ujo al sumidero es el valor
del ujo en la red: Basta tomar el corte (V t, t) para ello.
Pero tambien podemos deducir:
Corolario 8.6. En una red D con un corte (S, T), el valor de cualquier ujo esta acotado por la capacidad del
corte.
90
Demostracion. Sea (S, T) un corte cualquiera de D y sea f un ujo. Por el lema 8.5 y las restricciones de capacidad:
val(f) = f(S, T)
=

xS

yT
f(x, y)

xS

yT
c(x, y)
= c(S, T)
Una consecuencia inmediata del corolario 8.6 es que el valor de un ujo esta acotado por la capacidad de un cut
mnimo. El teorema siguiente nos dice que el ujo maximo en realidad es esta cota.
Teorema 8.7 (Max-ow min-cut). Si f es un ujo en la red D = (V, A) con fuente s y sumidero t, entonces las
siguientes son equivalentes:
(1) f es un ujo maximo en D
(2) La red residual D
f
no contiene augmenting paths
(3) val(f) = c(S, T) para alg un corte (S, T) de D
Demostracion. Demostramos la equivalencia a traves de un ciclo de implicancias.
(1) (2): Por contradiccion. Supongamos en contrario que f es maximo en D, pero que D
f
tiene un augmenting
path p. Por el corolario 8.4 la suma f + f
p
es un ujo, cuyo valor es mayor que val(f), lo que contradice la
suposicion de que f es maximo.
(2) (3): Nuevamente por contradiccion. Supongamos que D
f
no tiene augmenting path, es decir, no hay camino
dirigido de s a t en D
f
. Denamos:
S = x V : hay un camino de s a x en D
f

T = V T
Entonces (S, T) es un corte de D, ya que obviamente s S y t / S ya que no hay camino de s a t
en D
f
por suposicion. Para cada par de vertices x S e y T tenemos f(x, y) = c(x, y), dado que de
lo contrario (x, y) A
f
y habra un camino s x y y as y estara en S. Por el lema 8.5 tenemos
val(f) = f(S, T) = c(S, T).
(3) (1): Por el corolario 8.6 es val(f) c(S, T) para todos los cortes (S, T). La condicion val(f) = c(S, T)
entonces asegura que el ujo es maximo.
Este teorema sirve para demostrar la validez del metodo de Ford-Fulkerson: Si en una iteracion no hay un
augmenting path, quiere decir que el ujo actual es maximo. Una manera razonable de buscar un augmenting path
es usar b usqueda a lo ancho en la red residual. A esta forma de implementar el metodo de Ford-Fulkerson se le
conoce como el algoritmo de Edmonds-Karp.
9. Permutaciones
Denicion Una permutacion de un conjunto nito X es una biyeccion de X a X.
Com unmente usaremos X = 1, 2, . . . , n. Por ejemplo, una permutacion tpica de 1, 2, . . . , 5 es la funcion
denida por la tabla:
1 2 3 4 5

2 4 5 1 3
91
Esta claro que hay n! permutaciones de un conjunto de n elementos (el valor de (1) puede elegirse de n maneras,
una vez elegido este quedan solo n 1 opciones para (2), y as sucesivamente, y nalmente queda solo una opcion
para (n)).
Supongamos la permutacion denida por la tabla
1 2 3 4 5

3 5 1 4 2
Entonces la composicion se obtiene de
1 2 3 4 5

2 4 5 1 3

5 4 2 3 1
En general ,= :
1 2 3 4 5

3 5 1 4 2

5 3 2 1 4
Teorema 9.1. Las permutaciones S
n
cumplen las siguientes:
(i) Si y estan en S
n
, lo esta tambien
(ii) Para todas permutaciones , , en S
n
, se cumple:
() = ()
(iii) La funcion identidad, que llamaremos id, denida por id(r) = r es una permutacion, y tenemos para todo
en S
n
id = id =
(iv) Para toda permutacion en S
n
hay una permutacion inversa
1
en S
n
tal que

1
=
1
= id
Demostracion. La propiedad (i) sigue directamente de que la composicion de biyecciones es una biyeccion, (ii) es
una propiedad basica de la composicion de funciones, (iii) es obvio, y (iv) es simplemente que toda biyeccion tiene
una inversa.
El teorema 9.1 equivale a decir que las permutaciones forman un grupo con la operacion de composicion. Al
grupo de permutaciones de n elementos se le llama el grupo simetrico de orden n, que se anota S
n
.
Es conveniente tener una notacion compacta para permutaciones individuales. Consideremos nuevamente la
permutacion , y notemos que (1) = 2, (2) = 4, (4) = 1. Esto forma un ciclo (1 2 4 1) de largo 3.
Similarmente, 3 y 5 forman un ciclo de largo 2, y podemos escribir en notacion de ciclos como = (1 2 4)(3 5).
Toda permutaci on se puede escribir en notacion de ciclos mediante
Comience con alg un smbolo (digamos 1), y trace el efecto de sobre el y sus sucesores hasta que nuevamente
encontremos 1, as tenemos un ciclo
Tome un smbolo cualquiera que no haya sido considerado a un, y construya el ciclo que lo contiene de la
misma forma
Contin ue de la misma forma hasta haber dado cuenta de todos los smbolos
92
Esta claro que este proceso dara una representacion esencialmente unica. Podemos elegir cualquiera de los elementos
de cada ciclo como primero por ejemplo, (7 8 2 1 3) es lo mismo que (1 3 7 8 2). Por otro lado, podemos reordenar
los ciclos por ejemplo, (1 2 4)(3 5) y (3 5)(1 2 4) corresponden a la misma permutacion, ya que al operar los
ciclos en esta representacion sobre elementos diferentes los ciclos conmutan. Lo importante son el n umero de ciclos,
sus largos, y la disposicion de sus elementos.
Por ejemplo, para la permutacion dada anteriormente, la notacion de ciclos es = (1 3)(2 5)(4) Aca 4 forma
un ciclo degenerado por s mismo, ya que (4) = 4. Simplemente omitiremos estos ciclos de largo 1, ya que
corresponden a smbolos que no son afectados por la permutacion. En todo caso, es mejor no omitirlos hasta que
uno se haya familiarizado con la notacion.
Ejemplo Se tienen cartas numeradas 1 a 12, que se reparten en las como muestra la gura 51a. Luego se toman
por columnas y se vuelven a repartir por las, dando 51b. Luego se toman las cartas por las y se distribuyen en
1 2 3
4 5 6
7 8 9
10 11 12
(a) Original
1 4 7
10 2 5
8 11 3
6 9 12
(b) Columnas
Figura 51: Ordenamiento de cartas
columnas, quedando como lo muestra la gura 51b. Cuantas veces hay que repetir esta operacion hasta obtener
nuevamente el orden original?
Sea la permutacion que corresponde a esta operacion, lo que buscamos es el orden de en S
12
. Esta
manera de verlo nos dice que el problema tiene solucion, cosa que no es obvia: Perfectamente podra ocurrir
que saliendo de la conguracion inicial ya no haya manera de volver a ella. En notacion de ciclos tenemos
= (1)(2 4 10 6 5)(3 7 8 11 9)(12). Las cartas 1 y 12 no cambian de posicion, las demas forman dos ciclos
de largo 5. Al repetir esta operacion 5 veces todas las cartas quedan en sus posiciones originales.
9.1. Clasicaci on de permutaciones
A cada permutacion en S
n
corresponde una particion de los n elementos en los elementos de sus ciclos. Al
n umero de ciclos de cada largo de la permutacion le llamaremos su tipo. O sea, si tiene
i
ciclos de largo i
(1 i n), el tipo de lo anotamos [1
1
2
2
. . . n
n
].
Denicion Si hay una permutacion tal que
1
= se dice que es conjugada de .
El teorema siguiente es basico en la teora algebraica de permutaciones.
Teorema 9.2. Dos permutaciones y son conjugadas si y solo si tienen el mismo tipo.
Demostracion. Demostramos implicancias en ambas direcciones.
Supongamos que y son conjugadas, de forma que podemos escribir
1
= . Si (x
1
) = x
2
, denamos
y
1
= (x
1
) e y
2
= (x
2
); con x
3
= (x
2
) denimos y
3
= (x
3
), y as sucesivamente. Tenemos:
(y
1
) =
1
((x
1
)) = (x
1
) = (x
2
) = y
2
De forma similar, (y
2
) = y
3
, y as sucesivamente. Esto es una biyeccion entre el ciclo de que contiene a x
1
y el
ciclo de que contiene a y
1
, y habran biyecciones similares entre los demas ciclos de y , que as tienen el mismo
tipo.
Por otro lado, supongamos que y tienen el mismo tipo. Como tienen el mismo n umero de ciclos de cada uno
de los largos, podemos construir una biyeccion entre ciclos del mismo largo de y , digamos (x
1
, x
2
, . . . , x
r
) en
corresponde a (y
1
, y
2
, . . . , y
r
) en . Deniendo (x
i
) = y
i
para este ciclo, y de forma similar para los demas ciclos,
tenemos
1
= ya que (considerando los ndices modulo el largo del ciclo) tenemos

1
(y
i
) = (x
i
) = (x
i+1
) = y
i+1
= (y
i
)
93
Una manera fundamental de clasicar permutaciones viene de considerarlas como composicion de transposiciones,
que son permutaciones que solo intercambian dos elementos. Una permutacion es una transposicion si es del tipo
[1
n2
2] (tiene n2 ciclos de largo 1 y un ciclo de largo 2). Ahora bien, el ciclo (x
1
x
2
. . . x
r
), transforma (x
1
x
2
. . . x
r
)
en (x
2
x
3
. . . x
r
x
1
), y este mismo efecto se logra intercambiando x
1
con x
2
, luego x
2
(que ahora esta en la posicion x
1
)
con x
3
, y as sucesivamente. As podemos escribir (x
1
x
2
. . . x
r
) = (x
1
x
r
) . . . (x
1
x
3
)(x
1
x
2
). Como toda permutacion
se puede descomponer en ciclos, toda permutacion puede expresarse en terminos de transposiciones. Por ejemplo,
aplicando la idea indicada arriba a cada uno de los ciclos:
(1 3 6)(2 4 5 7) = (1 6)(1 3)(2 7)(2 5)(2 4)
Las transposiciones se pueden traslapar, un elemento puede moverse mas de una vez. Esta representacion no es
unica, ademas de reordenar las transposiciones podemos usar un conjunto completamente diferente de estas, como:
(1 3 6)(2 4 5 7) = (1 5)(3 5)(3 6)(5 7)(1 4)(2 7)(1 2)
Sin embargo, hay una caracterstica en com un entre todas estas descomposiciones.
Sea c() el n umero total de ciclos de . Si tiene tipo [1
1
2
2
. . . n
n
] entonces c() =
1
+
2
+ . . . +
n
.
Si combinamos con una transposicion , dando , nos interesa determinar la relacion entre c() y c(). Si
intercambia a con b, tenemos (a) = b, (b) = a y (k) = k si k ,= a, b. Cuando a y b estan en el mismo ciclo de ,
podemos escribir:
= (a x. . . y b . . . z) y otros ciclos
Consideremos entonces la permutacion . Tenemos (a) = x, . . . , (y) = b, . . . , (z) = a; y por otro lado
(a) = (x) = x, . . . , (y) = (b) = a; y tambien (b) = (b), . . . (z) = (a) = b. Se corta el ciclo y resulta:
= (a x. . . y)(b . . . z) y los otros ciclos
con lo que c() = c() + 1. Por otro lado, si a y b pertenecen a ciclos distintos, o sea podemos escribir
= (a x. . . y)(b . . . z) y otros ciclos
vemos que (y) = (a) = b y (z) = (b) = a, los ciclos se funden:
= (a x. . . y b . . . z) y los otros ciclos
con lo que c() = c() 1. En resumen, seguir una permutacion por una transposicion cambia el n umero de ciclos
en 1, y tenemos:
Teorema 9.3. Supongase que la permutacion de S
n
puede escribirse como la composicion de r transposiciones
y tambien como la composicion de r

transposiciones. Entonces r y r

son ambos pares o ambos impares.


Demostracion. Sea =
r

r1
. . .
1
, con
i
(1 i r) una transposicion. Como
1
esta formado por un ciclo de
largo 2 y n 2 ciclos de largo 1, resulta c(
1
) = 1 + (n 2) = n 1. Combinando
1
con
2
,
3
, . . . ,
r
nalmente
se obtiene . En cada paso c aumenta o disminuye en 1. Sea g el n umero de veces que aumenta y h el n umero de
veces que disminuye, El n umero nal de ciclos sera c() = (n 1) +g h. Pero tenemos g +h = r 1, con lo que:
r = 1 +g +h
= 1 +g + (n 1 +g c())
= n c() + 2g
De la misma forma, para cualquier otra manera de expresar como producto de transposiciones hay un entero g

tal que r

= n c() + 2g

, con lo que r r

= 2(g g

), que es par.
En vista del teorema 9.3 podemos clasicar las permutaciones en pares o impares dependiendo del n umero de
transposiciones que las conforman. Denimos el signo de la permutacion , escrito sgn , como +1 si es par, y 1
si es impar:
sgn = (1)
r
94
donde se puede escribir como la composicion de r transposiciones. En particular, sgn id = (1)
0
= +1. Claramente,
si se puede descomponer en r transposiciones y se puede descomponer en s transposiciones, entonces se puede
descomponer en r +s transposiciones:
sgn() = (1)
r+s
= (1)
r
(1)
s
= sgn sgn
En particular, como
1
= id, resulta sgn = sgn
1
.
Teorema 9.4. Para todo entero n 2 exactamente la mitad de las permutaciones de S
n
son pares y la otra mitad
impares.
Demostracion. Sea
1
,
2
, . . . ,
k
la lista de permutaciones pares en S
n
. Esta lista no es vaca, ya que id es par.
Sea una transposicion cualquiera en S
n
, por ejemplo = (1 2). Entonces
1
,
2
, . . . ,
k
son todas distintas,
ya que si
i
=
j
por asociatividad e inverso en el grupo

i
= (
1
)
i
=
1
(
i
) =
1
(
j
) = (
1
)
j
=
j
A un mas, todas estas permutaciones son impares, ya que
sgn(
i
) = sgn sgn
i
= (1) (+1) = 1
Finalmente, toda permutacion impar es de una de las
i
(1 i k), ya que:
sgn(
1
) = sgn
1
sgn = (1) (1) = +1
con lo que
1
es par, y debe ser
i
para alg un i en el rango 1 i k, y as =
i
. Con esto tenemos una
biyeccion entre las permutaciones pares e impares.
El conjunto de permutaciones pares es un subgrupo de S
n
(S
n
es nito, y este subconjunto es cerrado respecto
de la composicion), se le llama el grupo alternante y se anota A
n
.
Esto tiene aplicacion en muchas areas, por ejemplo en matematicas recreativas.
Ejemplo Ocho bloques marcados 1 a 8 se disponen en un marco cuadrado como se indica en la gura 52a. Una
movida legal corresponde a deslizar un bloque al espacio vaco. Determine si es posible lograr la conguracion
de 52b.
1 2 3
4 5 6
7 8
(a) Inicial
8 5 2
7 4 1
6 3
(b) Final
Figura 52: Puede hacerse?
Si anotamos el espacio en blanco por , la conguracion inicial puede escribirse 1 2 3 4 5 6 7 8 , y la nal
solicitada es 8 5 2 7 4 1 6 3 . Claramente toda movida legal es una transposicion, y si el espacio en blanco se mueve
un n umero impar de veces terminara en una posicion que no es la original. Luego la permutacion que lleva de la
conguracion inicial a otra conguracion posible bajo las reglas en la que esta nuevamente en la esquina inferior
derecha esta conformada por un n umero par de transposiciones, o sea es par. La permutacion entre la conguracion
nal solicitada y la inicial es (1 8 3 2 5 4 7 6)( ); el ciclo de largo 8 que aparece aca es impar, por lo que esto no
puede hacerse.
Notese que esto sirve para demostrar lo que no puede hacerse, no signica que todas las permutaciones pares
puedan lograrse con estas restricciones.
95
9.2. N umeros de Stirling de primera especie
Es simple contabilizar las permutaciones de un tipo particular. Supongamos, por ejemplo, que nos interesa saber
cuantos elementos de S
14
tienen tipo [2
2
3
2
4]. Esto corresponde a poner los smbolos 1, 2, . . . , 14 en el patron
(. .)(. .)(. . .)(. . .)(. . . .)
y hay 14! formas de distribuir los 14 smbolos en las 14 posiciones. Sin embargo, muchas de estas dan la misma
permutacion. Considerando cada ciclo, podemos elegir el primer elemento de el y el resto quedara determinado por
la permutacion. Hay 2 maneras de obtener cada 2-ciclo, 3 maneras de obtener cada 3-ciclo, y 4 maneras de obtener
cada 4-ciclo. El ordenamiento interno se puede llevar a cabo de 2
2
3
2
4 formas en este caso. En general, si el tipo
es [1
1
2
2
. . . n
n
], habran 1
1
2
2
. . . n
n
ordenamientos internos equivalentes. Por otro lado, el orden de los
ciclos del mismo largo es arbitrario, por lo que el n umero de reordenamientos en el caso general sera
1
!
2
! . . .
n
!,
y el n umero de permutaciones de tipo [1
1
2
2
. . . n
n
] es
n!
1
1
2
2
. . . n
n

1
!
2
! . . .
n
!
Una pregunta obvia es cuantas permutaciones de n elementos con k ciclos hay. A esto se le conoce como n umeros
de Stirling de primera especie, y se anota
_
n
k

. Para derivar una recurrencia para ellos, consideremos como podemos


construir una permutacion de n objetos con k ciclos a partir de permutaciones de n1 objetos. Al agregar el nuevo
objeto, podemos ponerlo en un ciclo por s mismo, lo que puede hacer de una unica manera partiendo de cada una
de las
_
n1
k1

permutaciones de n 1 elementos con k 1 ciclos. La otra opcion es insertarlo en alguno de k ciclos


existentes. Si suponemos una permutacion de n 1 elementos y k ciclos:
(a
1
a
2
. . . a
j1
)(a
j1+1
a
j1+2
. . . a
j2
). . .(a
j
k1
+1
a
j
k1
+2
. . . a
n1
)
Podemos insertar el nuevo elemento antes de cada elemento, agregandolo a ciclo al que este pertenece; insertar el
elemento al nal del ciclo es lo mismo que ubicarlo al comienzo. Esto da n 1 permutaciones distintas:
_
n
k
_
= (n 1)
_
n 1
k
_
+
_
n 1
k 1
_
Para condiciones de contorno, tenemos:
_
0
0
_
= 1
_
n
0
_
= 0 si n > 0
_
1
1
_
= 1
Si ademas decretamos:
_
n
k
_
=
_

_
0 n < 0
0 k < 0
0 k > n
la recurrencia siempre se cumple.
En forma de triangulo `a la Pascal tenemos:
n = 0: 1
n = 1: 0 1
n = 2: 0 1 1
n = 3: 0 2 3 1
n = 4: 0 6 11 6 1
n = 5: 0 24 50 35 10 1
n = 6: 0 120 274 225 85 15 1
96
Si denimos los coecientes s(n, k) mediante la expansion:
x
n
= x(x 1) . . . (x n + 1)
=

k0
(1)
nk
s(n, k)x
k
Tenemos condiciones de borde:
s(0, 0) = 1
s(n, 0) = 1 si n > 0
s(n, k) =
_

_
0 n < 0
0 k < 0
0 k > n
Si consideramos la recurrencia
x
n+1
= x x
n
nx
n
podemos escribir con n 0:

k0
(1)
n+1k
s(n + 1, k)x
k
=

k0
_
(1)
nk
s(n, k)x
k+1
n(1)
nk
s(n, k)x
k
_
=

k1
_
(1)
nk+1
s(n, k 1) n(1)
nk
s(n, k)
_
x
k
n(1)
n
s(n, 0)
Comparando coecientes a ambos lados resulta la recurrencia:
s(n + 1, k) = s(n, k 1) +ns(n, k)
que es la misma de los n umeros de Stirling de primera especie y tienen las mismas condiciones de borde, por lo que:
x
n
=

k0
(1)
nk
_
n
k
_
x
k
Denimos la funcion generatriz mixta:
H(z, u) =

n 0
k 0
_
n
k
_
u
k
z
n
n!
En vista de la relacion entre n umeros de Stirling de primera especie y potencias factoriales podemos escribir:
H(z, u) =

n0
(z)
n
n!

k0
(1)
nk
_
n
k
_
(u)
k
=

n0
(u)
n
n!
(z)
n
=

n0
_
u
n
_
(z)
n
= (1 z)
u
Con esta funcion generatriz es simple derivar propiedades adicionales de los n umeros de Stirling de primera especie.
Por ejemplo:
H(z, 1) = 1 z
=

n0
z
n
n!

k0
(1)
k
_
n
k
_
97
Comparando coecientes, y recordando que
_
n
k

= 0 cuando k > n, resulta para n > 1:

0kn
(1)
k
_
n
k
_
= 0
9.3. Grupos de permutaciones
Denicion Sea G un conjunto de permutaciones de un conjunto nito X. Si G es un grupo (con la composicion
de permutaciones) decimos que G es un grupo de permutaciones de X.
Si tomamos X = 1, 2, . . . , n, entonces un grupo de permutaciones es simplemente un subgrupo de S
n
. Por ejemplo,
la tabla 8 muestra todos los subgrupos de S
3
. El grupo alternante A
3
aparece como H
5
en la tabla. Para ver si un
H
1
= id H
2
= id, (1 2) H
3
= id, (1 3)
H
4
= id, (2 3) H
5
= id, (1 2 3), (1 3 2) H
6
= S
3
Cuadro 8: Los subgrupos de S
3
subconjunto de un grupo nito es un subgrupo, basta vericar si es cerrado por lo demostrado anteriormente para
grupos.
Muchos otros ejemplos se obtienen como grupos de simetra de objetos geometricos. Por ejemplo, si rotulamos los
vertices de un cuadrado en orden de las manecillas del reloj (ver la gura 53), cada simetra induce una permutacion
1
2 3
4
Identidad id
Rotacion en 90

(1 2 3 4)
Rotacion en 180

(1 3)(2 4)
Rotacion en 270

(1 4 3 2)
Reexion en diagonal 1 3 (2 4)
Reexion en diagonal 2 4 (1 3)
Reexion en bisector perpendicular de 1 2 (1 2)(3 4)
Reexion en bisector perpendicular de 1 4 (1 4)(2 3)
Figura 53: Un cuadrado y sus simetras
del conjunto 1, 2, 3, 4, y obtenemos las simetras indicadas. Estas 8 permutaciones forman el llamado grupo dihedral
de orden 8, D
8
. En general, las simetras de un n-agono regular forman un grupo de 2n elementos, el grupo dihedral
de orden 2n que se anota D
2n
. En todo caso, debe tenerse cuidado: Esta es la notacion que se usa en algebra, en
geometra este mismo grupo se llama D
n
. Si solo se consideran las rotaciones de un polgono regular de n lados,
tenemos el grupo cclico de orden n, anotado C
n
, que es isomorfo a Z
n
con la suma.
Una situacion similar se produce cuando estudiamos grafos en vez de guras geometricas, en donde las simetras
son permutaciones de los vertices que transforman arcos en arcos. A una permutacion de este tipo se le llama
automorsmo del grafo (viene a ser un isomorsmo del grafo consigo mismo).
Un ejemplo de grafo se ve en la gura 54, e interesa saber cuantos automorsmos tiene. Primero observamos
que los vertices del grafo caen naturalmente en dos grupos: Los vertices 1, 3, 5 son de grado 4, mientras 2, 4, 6
son de grado 2. Ning un automorsmo puede transformar un vertice del primer grupo en uno del segundo. Por otro
lado, esta claro que podemos tomar cualquier permutacion de 1, 2, 3 y extenderla a un automorsmo del grafo.
Por ejemplo, si (1 3 5) es parte de un automorsmo , entonces tiene que transformar 2 en 4, ya que 2 es el unico
vertice adyacente a 1 y 3, y 4 es el unico vertice adyacente a sus imagenes 3 y 5. De la misma forma, lleva 4 en
6 y 6 en 2, por lo que = (1 3 5)(2 4 6). En forma analoga, cada una de las seis permutaciones de 1, 2, 3 puede
98
2
1 6
5
4 3
id se extiende a id (1 3) se extiende a (1 3)(4 6)
(1 3 5) se extiende a (1 3 5)(2 4 6) (1 5) se extiende a (1 5)(2 4)
(1 5 3) se extiende a (1 5 3)(2 6 4) (3 5) se extiende a (3 5)(2 6)
Figura 54: Un grafo de 6 vertices y sus automorsmos
extenderse de forma unica a un automorsmo del grafo, como muestra la misma gura 54. Hay exactamente seis
automorsmos, que son las permutaciones listadas arriba.
9.4.

Orbitas y estabilizadores
Sea G un grupo de permutaciones de un conjunto X. Veremos que la estructura del grupo lleva naturalmente
a una particion de X. Denamos la relacion sobre X mediante x y siempre que para alg un G tenemos
(x) = y. Vericamos que es una relacion de equivalencia de la forma usual:
(Reexiva) Como id es parte de todo grupo, y id(x) = x para todo x X, tenemos x x
(Simetrica) Supongamos x y, de forma que (x) = y para alg un G. Como G es un grupo,
1
G, y como

1
(y) = x, tenemos y x
(Transitiva) Si x y y y z debe ser
1
(x) = y y
2
(y) = z para
1
,
2
G, y como G es un grupo,
2

1
G,
con lo que
2

1
(x) = z y x z
Como es una relacion de equivalencia, dene una particion de X; x e y pertenecen a la misma clase si y solo si
hay una permutacion en G que transforma x en y. A las clases de equivalencia se les conoce como orbitas de G en
X. La orbita de x es la clase que contiene a x:
Gx = y X: y = (x) para alg un G
Intuitivamente, la orbita Gx son los elementos de X que no se distinguen de x bajo operaciones de G. Por
ejemplo, en el grafo de la gura 55 los automorsmos se obtienen combinando las permutaciones de la gura 55.
Hay un total de 2 2 6 = 24 permutaciones en este grupo. Son orbitas a, b, c, d, f, e, g, h, i, j,
k, l, m, y se ve que son parecidos los elementos de cada una de ellas, en que las operaciones del grupo los
intercambian.
Las orbitas presentan un par de problemas numericos obvios: Cuantas orbitas hay? Que tama nos tienen?
Si G es un grupo de permutaciones, llamaremos G(x y) al conjunto de permutaciones que llevan x a y, o sea:
G(x y) = G: g(x) = y
En particular, G(x x) es el conjunto de permutaciones que tienen a x como punto jo. Este conjunto se llama el
estabilizador de x, y se anota G
x
. Si
1
y
2
estan en G
x
:

1
(x) =
2
(x) = x
por lo que
2

1
G
x
, y G
x
es un subgrupo de G. Tambien tenemos:
Teorema 9.5. Sea G un grupo de permutaciones, y sea G(x y). Entonces
G(x y) = G
x
el coset izquierdo de G
x
respecto a .
99
a
c
b
e
d
f
g
h
i
j
k
l
m
id id id
(a b) (d f) (h i)(k l)
(h j)(k m)
(i j)(l m)
(h i j)(k l m)
(h j i)(k m l)
Figura 55: Un ejemplo de grafo y los generadores de su grupo de automorsmos
Demostracion. Demostraremos que todo elemento de G
x
pertenece a G(x y) y viceversa, con lo que ambos
conjuntos son iguales.
Si pertenece al coset izquierdo G
x
, tenemos = para alg un G
x
. Vale decir, (x) = (x) = (x) = y,
con lo que pertenece a G(x y). Al reves, si G(x y), entonces
1
(x) =
1
(y) = x, de manera que

1
= , donde G
x
, y as = G
x
. Ambos conjuntos son iguales.
De forma muy similar al teorema 9.5 se demuestra lo siguiente:
Teorema 9.6. Sea G un grupo de permutaciones de X, y sea G(x y). Entonces
G(x y) = G
y

el coset derecho de G
y
respecto a .
Demostracion. Si pertenece a G
y
, entonces = para alg un G
y
, vale decir (y) = (y) = (x) = y
con lo que G(x y). Al reves, supongamos G(x y), y consideremos
1
(y) = (x) = y y por tanto

1
G
y
, o G
y
, y se sigue el resultado.
De los anteriores teoremas obtenemos:
Corolario 9.7. Sea G un grupo de permutaciones de X, sea x X un elemento cualquiera, e y un elemento en la
orbita de x. Entonces [G
x
[ = [G
y
[.
Demostracion. Inmediato, ya que el tama no de un coset es el orden del subgrupo; y por los teoremas 9.5 y 9.6
tenemos [G
y
[ = [G(x y)[ = [G
x
[.
Teorema 9.8. Sea G un grupo de permutaciones de X, y sea x un elemento cualquiera de X. Entonces:
[Gx[ [G
x
[ = [G[
Demostracion. O sea, el tama no de la orbita de un elemento por el tama no de su estabilizador es el tama no del
grupo.
Usamos la idea de contar por las y columnas. El conjunto de pares S = (, y): (x) = y puede describirse
mediante una tabla como la 9. Dado que es una permutacion, hay un unico y tal que (x) = y para cada ,
con lo que r

(S) = 1. El total por columna c


y
(S) es el n umero de permutaciones tales que (x) = y, vale decir
[G(x y)[. Si y esta en la orbita Gx, por el teorema 9.5 y el hecho que el coset de un subgrupo tiene el tama no
del subgrupo, tenemos [G(x y)[ = [G
x
[. Por otro lado, si y no esta en la orbita Gx, [G(x y)[ = 0.
Las dos formas de contar los elementos de S dan:

yX
c
y
(S) =

G
r

(S)
100
y
.
.
.
si (, y) esta en S r

(S)
.
.
.
c
y
(S)
Cuadro 9: Pares (, y) para demostracion del teorema 9.8
Al lado izquierdo hay [Gx[ terminos que valen [G
x
[ cada uno, los demas valen 0; al lado derecho hay [G[ terminos
que valen 1 cada uno. As tenemos el resultado prometido.
Este teorema tambien permite calcular el tama no de un grupo si se conoce el tama no de una orbita y el
estabilizador respectivo. Consideremos por ejemplo el grupo T de rotaciones en el espacio de un tetraedro, ver
la gura 56. Las rotaciones alrededor del eje marcado son las que mantienen jo el vertice d, y hay 3 de estas,
a
b
c
d
Figura 56: Rotaciones de un tetraedro
[T
d
[ = 3. Por otro lado, girando el tetraedro en el espacio se puede colocar en la posicion d cualquiera de los 4
vertices, y tenemos [Td[ = 4. En consecuencia, el grupo de rotaciones en el espacio de un tetraedro es de orden
[T[ = [T
d
[ [Td[ = 3 4 = 12. Resulta que T no es mas que el grupo alternante A
4
.
Otro ejemplo mas complicado lo da el icosaedro truncado (el solido arquimedeano formado por 12 hexagonos y
20 pentagonos, mas conocido como la forma b asica de la pelota de f utbol), que tiene 32 caras, 90 lados y 60 vertices.
Si consideramos rotaciones en el espacio de este solido, como en cada vertice conuyen 1 pentagono y 2 hexagonos la
unica simetra que mantiene jo un vertice es id. Va rotaciones podemos hacer coincidir ese vertice con cualquiera,
por lo que tenemos que [G[ = [G
x
[ [Gx[ = 1 60 = 60. Obtener el orden de este grupo manipulando el solido sera
mucho mas complicado.
9.5. N umero de orbitas
Vamos ahora a contar el n umero de orbitas de un grupo G de permutaciones de X. Cada orbita es un subconjunto
de elementos indistinguibles bajo las operaciones de G, y el n umero de orbitas nos dice cuantos tipos de elementos
distinguibles hay.
Como un ejemplo, supongase que se quieren fabricar tarjetas de identidad cuadradas, divididas en nueve cua-
drados de los cuales se perforan dos. Vease la gura 57 para algunos ejemplos. Las primeras dos no se pueden
101
Figura 57: Ejemplos de tarjetas de identidad
distinguir, ya que se obtiene la segunda rotando la primera; en cambio, la tercera claramente es diferente de las
otras, independiente de si se gira o se da vuelta.
El grupo que esta actuando aca es el grupo D
8
de ocho simetras de un cuadrado, pero nos interesa el efecto
que tiene sobre las
_
9
2
_
= 36 conguraciones de dos agujeros en un cuadrado de 3 3, no solo su accion sobre los
cuatro vertices. El n umero de orbitas es el n umero de tarjetas distinguibles. Hacer esto por la va de dibujar las 36
conguraciones, y analizar lo que ocurre con cada una de ellas con las 8 simetras es bastante trabajo. Por suerte
hay maneras mejores.
Dado un elemento del grupo de permutaciones G denimos:
F() = x X: (x) = x
Vale decir, F() es el n umero de puntos jos de . Nuestro teorema siguiente relaciona esto con el n umero de
orbitas.
Teorema 9.9 (Burnside). El n umero de orbitas de G sobre X esta dado por:
1
[G[

G
[F()[
Demostracion. Nuevamente, contar por las y columnas. Sea:
E = (, x): (x) = x
Entonces el total por la r

(E) es el n umero de x jados por , o sea [F()[. El total por columna c


x
(E) es el
n umero de que tienen x como punto jo, [G
x
[. Contabilizando E de ambas formas nos da:

G
[F()[ =

xX
[G
x
[
Supongamos que hay t orbitas, y elijamos z X. Por el teorema 9.6, si x pertenece a la orbita Gz entonces
[G
x
[ = [G
z
[. Cada orbita contribuye al lado derecho [Gz[ terminos, cada uno de los cuales es [G
z
[, y la contribucion
total de la orbita es [Gz[ [G
z
[ = [G[ por el teorema 9.8:

G
[F()[ = t [G[
que es equivalente a lo que queramos demostrar.
Ahora estamos en condiciones de resolver nuestro problema de tarjetas de identidad. Necesitamos calcular el
n umero de conguraciones jas bajo cada una de las ocho permutaciones. Por ejemplo, cuando es la rotacion en
180

, hay 4 conguraciones jas (ver la gura 58). La tabla 10 resume los valores. Con estos valores tenemos que el
n umero de orbitas es:
1
8
(36 + 0 + 4 + 0 + 6 + 6 + 6 + 6) = 8
En este caso sera sencillo listar las 8 conguraciones por prueba y error, pero el resultado es aplicable en forma
mucho mas general.
102
Figura 58: Conguraciones jas bajo rotacion en 180

Operacion Fijos
Identidad 36
Rotacion en 90

0
Rotacion en 180

4
Rotacion en 270

0
Reexion en diagonal 1 3 6
Reexion en diagonal 2 4 6
Reexion en perpendicular a 1 2 6
Reexion en perpendicular a 1 4 6
Cuadro 10: N umero de conguraciones de tarjetas respetadas por cada simetra del cuadrado
Ejemplo Se fabrican collares con 13 cuentas blancas y 3 negras cada uno. Cuantos collares diferentes pueden
hacerse?
Podemos pensar en las 16 cuentas ubicadas en los vertices de un polgono regular de 16 lados. Una conguracion
queda denida por las posiciones de las 3 cuentas negras, de las que hay
_
16
3
_
= 560. Dos conguraciones son
equivalentes si se obtienen rotando el collar o dandolo vuelta (una reexion corresponde a darlo vuelta). Este es el
grupo D
32
, con 32 simetras en total:
La identidad tiene las 560 conguraciones como jas
Hay 15 rotaciones en angulos 2n/16, para 1 n 15, ninguna de las cuales tiene conguraciones jas
Hay 8 reexiones en ejes que unen los puntos medios de lados opuestos, ninguna de ellas tiene conguraciones
jas
Hay 8 reexiones en ejes que unen vertices opuestos. Las posiciones de las 3 cuentas negras se mantienen solo
si una de ellas esta en uno de los vertices por los que pasa el eje, y las otras dos estan dispuestas en forma
simetrica. Hay 7 posiciones para una de las cuentas negras (y su contraparte). Esto hace un total de 27 = 14
conguraciones jas.
Resumiendo, el n umero de collares diferentes es:
1
32
(560 + 8 14) = 21
Obtener este resultado listando las conguraciones y vericado sera bastante engorroso.
9.6.

Indice de ciclos
Denimos el tipo de una permutacion como [1
1
2
2
. . . n
n
] si tiene
i
ciclos de largo i para 1 i n. Una
expresion afn asociada a la permutacion es:

(x
1
, x
2
, . . . , x
n
) = x
1
1
x
2
2
. . . x
n
n
Para un grupo G de permutaciones denimos el ndice de ciclos:

G
(x
1
, x
2
, . . . , x
n
) =
1
[G[

(x
1
, x
2
, . . . , x
n
)
103
Esto es esencialmente una funcion generatriz en la que x
i
marca los ciclos de largo i. Esta funcion tiene muchos
usos, algunos los veremos mas adelante.
Interesa entonces calcular
G
para diversos grupos de manera de tenerlos a mano mas adelante. Por ejemplo,
para las simetras del cuadrado como vistas antes:

D8
(x
1
, x
2
, x
3
, x
4
) =
1
8
(x
4
1
+ 2x
2
1
x
2
+ 3x
2
2
+ 2x
4
)
9.7. N umero de coloreos distinguibles
Supongamos un grupo G de permutaciones de un conjunto X de n elementos, y a cada elemento se le puede
asignar uno de r colores. Si el conjunto de colores es K, un coloreo es una funcion : X K. El n umero total de
coloreos es r
n
, a este conjunto le llamaremos . Ahora bien, cada permutacion g en G induce una permutacion g
de : Para denimos g() como el coloreo en el cual el color asignado a x es el que asigna a g(x), vale decir:
( g())(x) = g
1
(x)
La inversa aparece porque al aplicar la permutacion al coloreo estamos asignando a x el color que tiene su predecesor
va g. La gura 59 muestra un ejemplo. La funcion que lleva g a g es una representacion del grupo G en un grupo
g

g()
Figura 59: Efecto de la permutacion g sobre un coloreo

G de permutaciones de . Dos coloreos son indistinguibles si uno puede transformarse en el otro mediante una
permutacion g; vale decir, si ambas pertenecen a la misma orbita de

G en . El n umero de coloreos distinguibles
(inequivalentes) entonces es el n umero de orbitas de

G. Antes de aplicar nuestro teorema para el n umero de orbitas
debemos relacionar G y

G. Supongamos que para dos permutaciones g
1
y g
2
tenemos g
1
= g
2
, de forma que
( g
1
())(x) = ( g
2
())(x)
y en consecuencia para todo y todo x X debe ser
(g
1
1
(x)) = (g
1
2
(x))
Como esto es valido para todo , en particular vale para el coloreo que asigna el color especicado a g
1
1
(x) y otro
color a todos los demas miembros de X. En este caso particular la ecuacion nos dice que g
1
1
(x) = g
1
2
(x), con lo
que g
1
= g
2
, y el grupo de permutaciones G de X y el grupo de permutaciones

G de los coloreos son isomorfos.
Otra manera de entender esta situacion es considerar un coloreo que le asigna un color diferente a cada elemento
de X. Una permutacion de ese coloreo no es mas que una permutacion de nuevos nombres de los elementos de
X, con lo que esta claro que ambos grupos de permutaciones estan muy relacionados.
Teorema 9.10. Si G es un grupo de permutaciones de X, y
G
(x
1
, . . . , x
n
) es su ndice de ciclos, el n umero de
coloreos inequivalentes de X con r colores es
G
(r, . . . , r), donde un coloreo de X es una funcion : X K.
Demostracion. Interesa el n umero de orbitas del grupo G operando sobre coloreos. Hemos demostrado que la
representacion g g es una biyeccion, de forma que [G[ = [

G[. Ademas, por el teorema de Burnside el n umero de


orbitas de

G en es
1
[

G[

G
[F( g)[ =
1
[G[

gG
[F( g)[
104
donde F( g) es el conjunto de coloreos jados por g. Supongamos ahora que es un coloreo jado por g, de forma
que g() = , y sea (x y z . . .) un ciclo cualquiera de g. Tenemos:
(x) = (g(y)) = ( g())(y) = (y)
de forma que asigna el mismo color a x e y. Aplicando el mismo razonamiento, este es el color asignado a todo el
ciclo. Esto ocurre con cada uno de los ciclos de g. Si g tiene k ciclos en total, el n umero de coloreos posibles es r
k
,
ya que podemos asignar uno de los r colores a cada uno de los k ciclos. De esta forma, si g tiene
i
ciclos de largo
i para (1 i n), tenemos
1
+
2
+. . . +
n
= k y
[F( g)[ = r
k
= r
1+2+...+n
=
g
(r, r, . . . , r)
y el resultado sigue de sumar esto.
Ejemplo Coloreos posibles.
Consideremos el subgrupo de D
8
formado unicamente por la reexion en la vertical.
1 2
3 4
Esta es la permutacion = (1 2)(3 4), y a cada uno de sus ciclos se le puede asignar un color en forma independiente.
Hay 2 ciclos, con 2 colores son 2
2
= 4 opciones, y F() = 4 como se aprecia en la gura.
Con esto, para obtener el n umero de coloreos inequivalentes basta calcular el ndice de ciclos del grupo. Por
ejemplo, el n umero de coloreos de los vertices de un cuadrado con r colores se obtiene:

D8
(x
1
, x
2
, x
3
, x
4
) =
1
8
(x
4
1
+ 2x
2
1
x
2
+ 3x
2
2
+ 2x
4
)

D8
(r, r, r, r) =
1
8
(r
4
+ 2r
3
+ 3r
2
+ 2r)
Ejemplo Una tribu de hippies artesanos fabrica pulseras formadas alternadamente por tres arcos y tres cuentas,
y tienen arcos y cuentas de cinco colores. Para efectos de simetra pueden considerarse las pulseras como triangulos
equilateros en los cuales se colorean los vertices y las aristas. Por razones que solo ellos entienden las pulseras deben
siempre usar tres colores. Interesa saber cuantas pulseras diferentes pueden crear.
Aca estamos frente a una aplicacion tpica del principio de inclusion y exclusion, el teorema anterior nos da el
n umero de coloreos con a lo m as el n umero de colores dado. Los elementos del grupo son:
Operacion Termino
id x
6
1
2 rotaciones (en 1/3 y 2/3) 2x
2
3
3 reexiones en cada eje 3x
2
1
x
2
2
El grupo es de orden 6, as que:

G
(x
1
, x
2
, x
3
, x
4
, x
5
, x
6
) =
1
6
_
x
6
1
+ 3x
2
1
x
2
2
+ 2x
2
3
_
Luego aplicamos nuestra receta del principio de inclusion y exclusion.
1. El universo es el conjunto de coloreos con 5 colores. Un coloreo tiene la propiedad i si el color i no
esta presente, y nos interesa el n umero de los que tienen exactamente 2 propiedades (estan presentes los otros
3 colores).
105
2. Aca N( S) es el n umero de coloreos que no consideran los colores en S, vale decir son coloreos tomando a
lo mas 5 [S[ colores:
N( S) =
G
(5 [S[, 5 [S[, 5 [S[, 5 [S[, 5 [S[, 5 [S[)
3. Como los r colores a excluir se eligen de entre los 5, y en el n umero de posibilidades solo inuye el n umero de
colores restantes con los que se colorea:
N
r
=
_
5
r
_

G
(5 r, 5 r, 5 r, 5 r, 5 r, 5 r)
En este caso tenemos:
N
0
=
_
5
0
_

G
(5, 5, 5, 5, 5, 5) = 2 925
N
1
=
_
5
1
_

G
(4, 4, 4, 4, 4, 4) = 4 080
N
2
=
_
5
2
_

G
(3, 3, 3, 3, 3, 3) = 1 650
N
3
=
_
5
3
_

G
(2, 2, 2, 2, 2, 2) = 200
N
4
=
_
5
2
_

G
(1, 1, 1, 1, 1, 1) = 5
N
5
=
_
5
5
_

G
(0, 0, 0, 0, 0, 0) = 0
La funcion generatriz es
N(z) = 5z
4
+ 200z
3
+ 1 650z
2
+ 4 080z + 2 925
4. Nos interesa e
2
, que se obtiene de la funcion generatriz de los e
t
, que sabemos es E(z) = N(z 1):
E(z) = 5z
4
+ 180z
3
+ 1 080z
2
+ 1 360z + 300
Se pueden formar 1 080 brazaletes de tres colores.
Pero podemos hacer algo mas. Si hay r colores, podemos denir variables z
i
para 1 i r representando los
distintos colores. Entonces la funcion generatriz de los n umeros de nodos de cada color que se pueden asignar a un
ciclo de largo k es simplemente:
z
k
1
+z
k
2
+. . . z
k
r
ya que seran k nodos, todos del mismo color. Si hay
k
ciclos de largo k, entonces corresponde el factor:
(z
k
1
+z
k
2
+. . . z
k
r
)

k
La anterior discusion demuestra el siguiente resultado.
Teorema 9.11 (Enumeracion de Polya). Sea G un grupo de permutaciones de X, y
G
(x
1
, . . . , x
n
) su ndice
de ciclos. La funcion generatriz del n umero de coloreos inequivalentes de X en que hay n
i
nodos de color i para
1 i r, llamemosle u
n1,n2,...,nr
, es:
U(z
1
, z
2
, . . . , z
r
) =

n1,n2,...,nr
u
n1,n2,...,nr
z
n1
1
z
n2
2
. . . z
nr
r
=
G
(z
1
+z
2
+. . . +z
r
, z
2
1
+z
2
2
+. . . +z
2
r
, . . . , z
n
1
+z
n
2
+. . . +z
n
r
)
106
H
H
H
H
H
H
(a) Benceno
CH
3
CH
3
H
H
H
H
(b) Xyleno
C H
3
Cl
H
H
H
H
(c) Clorotolueno
Figura 60: Algunos compuestos aromaticos
CH
3
CH
3
H
H
H
H
(a) Orto-xyleno
CH
3
CH
3
H
H
H
H
(b) Para-xyleno
CH
3
CH
3
H
H H
H
(c) Meta-xyleno
Figura 61: Los tres isomeros del xyleno
La teora de enumeracion de Polya fue desarrollada en parte para aplicacion a la qumica. Algunos ejemplos de
f ormulas qumicas se dan en la gura 60. Este tipo de compuestos, derivados del benceno (gura 60a) son hexagonos
que pueden girar en el espacio (el grupo de simetra relevante es D
12
). Hay muchas posibilidades de grupos de atomos
que pueden reemplazar los hidrogenos (H), como es radicales metilo (CH
3
) o atomos de cloro (Cl). Una pregunta
obvia entonces es cuantos compuestos distintos pueden crearse con un conjunto de radicales, o cuantos son posibles
con un n umero particular de cada uno de un conjunto de radicales dados. Por ejemplo, hay tres isomeros del xyleno,
como muestra la gura 61.
Para responder a estas preguntas requerimos el ndice de ciclos del grupo del hexagono, como el mostrado en la
gura 62. Las simetras respectivas se listan en la tabla 11. En consecuencia, el ndice de ciclos del grupo es:

D12
(x
1
, x
2
, x
3
, x
4
, x
5
, x
6
) =
1
12
(x
6
1
+ 3x
2
1
x
2
2
+ 4x
3
2
+ 2x
2
3
+ 2x
6
)
Hecho el trabajo duro, calcular cuantos compuestos pueden crearse con hidrogenos (H) y metilos (CH
3
) es facil:
Corresponden a colorear los vertices con dos colores, lo que nos da:

D12
(2, 2, 2, 2, 2, 2) =
1
12
(2
6
+ 3 2
2
2
2
+ 4 2
3
+ 2 2)
= 13
Para comprobar cuantos isomeros del xyleno hay, consideramos coloreo de los vertices del hexagono con dos
colores (hidrogenos y metilos), y de los ultimos hay exactamente dos. Si consideramos que z marca metilo, la
funcion generatriz que corresponde a un ciclo de largo l es simplemente 1 + z
l
(hay 1 forma de tener 0 metilos en
el, lo que aporta 1 z
0
, y una forma de tener l metilos, lo que aporta 1 z
l
), y al substituir x
l
= 1 +z
l
obtenemos:

D12
(1 +z, 1 +z
2
, 1 +z
3
, 1 +z
4
, 1 +z
5
, 1 +z
6
) = z
6
+z
5
+ 3z
4
+ 3z
3
+ 3z
2
+z + 1
Esto conrma que hay tres isomeros en su coeciente de z
2
.
Si nos interesa determinar cuantos compuestos distintos tienen 2 radicales cloro (Cl), 2 metilos (CH
3
) y 2
hidrogenos (H), usamos las variables u, v y w para estas tres opciones, y el valor buscado es simplemente:
[u
2
v
2
w
2
]
D6
(u +v +w, u
2
+v
2
+w
2
, u
3
+v
3
+w
3
, u
4
+v
4
+w
4
, u
5
+v
5
+w
5
, u
6
+v
6
+w
6
) = 11
Por otro lado, un atomo de carbono puede unirse con cuatro otros atomos, dispuestos en los vertices de un
tetraedro. Las operaciones de simetra de un tetraedro en el espacio (solo rotaciones, no reexiones) son giros
107
1
2
3
4
5
6
Figura 62: Hexagono
Operacion Ciclos Tipo
Identidad (1)(2)(3)(4)(5)(6) [1
6
]
Rotacion 1/6 (1 2 3 4 5 6) [6]
Rotacion 2/6 (1 3 5)(2 4 6) [3
2
]
Rotacion 3/6 (1 4)(2 5)(3 6) [2
3
]
Rotacion 4/6 (1 5 3)(2 6 4) [3
2
]
Rotacion 5/6 (1 6 5 4 3 2) [6]
Reexion en 1 4 (1)(2 6)(3 5)(4) [1
2
2
2
]
Reexion en 2 5 (1 3)(2)(4 6)(5) [1
2
2
2
]
Reexion en 3 6 (1 5)(2 4)(3)(6) [1
2
2
2
]
Reexion entre 1 2 y 4 5 (1 2)(3 6)(4 5) [2
3
]
Reexion entre 2 3 y 5 6 (1 4)(2 3)(5 6) [2
3
]
Reexion entre 1 6 y 3 4 (1 6)(2 5)(3 4) [2
3
]
Cuadro 11: Grupo de simetras del hexagono
alrededor de un eje que pasa por un vertice y el centroide de la cara opuesta (ver la gura 63a) y giros alrededor
de un eje que pasa por el punto medio de una arista y el punto medio de la arista opuesta (ver la gura 63b).
Las simetras son de los tipos dados en la tabla 12 (resulta que esto no es mas que el grupo alternante A
4
), y en
Operacion Ciclos Tipo N
Identidad (1)(2)(3)(4) [1
4
] 1
Giro en vertice 4 en 1/3 (1 2 3)(4) [1 3
1
] 4
Giro en vertice 4 en 2/3 (1 3 2)(4) [1 3
1
] 4
Giro en arista 1 2 en 1/2 (1 2)(3 4) [2
2
] 3
Cuadro 12: Rotaciones de un tetraedro
consecuencia el ndice de ciclos del grupo es

A4
(x
1
, x
2
, x
3
, x
4
) =
1
12
(x
4
1
+ 8x
1
x
3
+ 3x
2
2
)
As, si tenemos dos radicales diferentes hay
A4
(2, 2, 2, 2) = 5 compuestos diferentes posibles, y
A4
(4, 4, 4, 4) = 36
si hay 4. Si hay dos tipos de radicales, la funcion generatriz es:

A4
(u +v, u
2
+v
2
, u
3
+v
3
, u
4
+v
4
) = u
4
+u
3
v +u
2
v
2
+uv
3
+v
4
Vale decir, hay un solo compuesto de cada una de las composiciones posibles.
Otro ejemplo lo ponen arboles binarios Considere arboles binarios completos de altura 2, como en la gura 64,
que se consideran iguales al intercambiar izquierda y derecha (como 3 con 4; pero tambien 2 con 5, que lleva consigo
intercambiar 3 con 6 y 4 con 7). Interesa determinar cuantos arboles hay con 3 nodos azules, si los nodos se pintan
de azul rojo y amarillo.
Antes de entrar en el tema, es util hacerse una idea del grupo que buscamos. Para determinar el orden del grupo,
108
1
2
3 4
(a) Eje a traves de un vertice
1
2
3 4
(b) Eje en el punto medio de aristas
Figura 63: Operaciones de simetra (rotaciones) de un tetraedro
3 4
2
6 7
5
1
Figura 64: Un arbol binario completo
tomamos alg un elemento y analizamos su orbita y estabilizador. Tomando 3, su orbita es G3 = 3, 4, 6, 7, mientras
su estabilizador es G
3
= id, (6 7), con lo que [G[ = [G3[ [G
3
[ = 4 2 = 8. Los elementos del grupo los da la
tabla 13, el ndice de ciclos del grupo resulta ser

G
(x
1
, x
2
, x
3
, x
4
, x
5
, x
6
, x
7
) =
1
8
_
x
7
1
+ 2x
5
1
x
2
+x
3
1
x
2
2
+ 2x
1
x
3
2
+x
1
x
2
x
4
_
La manera mas simple de obtener el resultado buscado es reconocer que la funcion generatriz para el n umero de
maneras de formar orbitas de l nodos donde u marca el n umero de nodos azules es simplemente 2 +u
l
(dos formas
de ning un azul, vale decir solo rojos o solo amarillos; y una forma de l azules), y aplicando el teorema de Polya nos
interesa:
[u
3
]
G
(2 +u, 2 +u
2
, 2 +u
3
,2 +u
4
, 2 +u
5
, 2 +u
6
, 2 +u
7
)
= [u
3
]
_
u
7
+ 6u
6
+ 25u
5
+ 68u
4
+ 120u
3
+ 146u
2
+ 105u + 42
_
= 120
Obtener esto por prueba y error sera impensable. Nuevamente agradecemos el apoyo algebraico de xmaxima.
Referencias
[1] Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, and Cliord Stein. Introduction to Algorithms.
MIT Press, third edition, 2009.
109
Operacion Termino
id x
7
1
(3 4) x
5
1
x
2
(6 7) x
5
1
x
2
(3 4)(6 7) x
3
1
x
2
2
(2 5)(3 6)(4 7) x
1
x
3
2
(2 5)(3 7)(4 6) x
1
x
3
2
(2 5)(3 6 4 7) x
1
x
2
x
4
(2 5)(3 7 4 6) x
1
x
2
x
4
Cuadro 13: El grupo de operaciones del arbol
[2] Robert Frucht. Herstellung von Graphen mit vorgegebener abstrakter Gruppe. Compositio Mathematica,
6:239250, 1939.
[3] Ronald L. Graham, Donald E. Knuth, and Oren Patashnik. Concrete Mathematics: A Foundation for Computer
Science. Addison-Wesley Professional, second edition, 1994.
[4] Circuit diagram of a 3rd order low pass lter using passive components (2 resistors, 2 capacitors, 1 inductor).
http://commons.wikimedia.org/wiki/File:LowPass3poleCauer.png, July 2006.
[5] G. Malkin. RIP version 2. IETF RFC 4822, November 1998.
[6] Maxima, a computer algebra system. http://maxima.sourceforge.net, 2009. Version 5.18.1.
[7] John OConnor and Edmund F. Robertson. Konigsberg bridges. http://www-history.mcs.st-andrews.ac.
uk/Extras/Konigsberg.html, March 2000.
[8] Victor Shoup. A Computational Introduction to Number Theory and Algebra. Cambridge University Press,
second edition, 2009.
[9] Steven S. Skiena. The Algorithm Design Manual. Springer, second edition, 2008.
[10] IEEE Computer Society. IEEE Standard for Local and metropolitan area networks: Media access control
(MAC) bridges. IEEE Std 802.1d-2004, 2004.
[11] Andrew S. Tannenbaum. Computer Networks. Prentice Hall PTR, fourth edition, 2003.
[12] Herbert S. Wilf. Generatingfunctionology. A. K. Peters, Ltd., third edition, 2006.
110

Vous aimerez peut-être aussi