Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Hemos visto que una relación de recurrencia relaciona el n-ésimo elemento de una sucesión
con sus predecesores. Como las relaciones de recurrencia tienen una relación cercana con los
algoritmos recursivos, las relaciones de recurrencia surgen de manera natural en el análisis de
éstos.
Estudiaremos otro paradigma algorı́tmico importante, el divide y vencerás. Los algoritmos
que siguen este paradigma se pueden usar para resolver un problema dividiéndolo recursiva-
mente en un número fijo de subproblemas que no se superponen hasta que estos problemas
puedan resolverse directamente. La complejidad de tales algoritmos se puede analizar usando
un tipo especial de relación de recurrencia. En este capı́tulo veremos algunos algoritmos de
divide y vencerás y analizaremos su complejidad usando relaciones de recurrencia.
Veremos que muchos problemas de conteo se pueden resolver usando series de potencias
formales, llamadas funciones generadoras, donde los coeficientes de potencias de x representan
términos de la secuencia que nos interesa. Además de resolver problemas de conteo, también po-
dremos usar funciones generadoras para resolver relaciones de recurrencia y probar identidades
combinatorias.
1
Ejemplo 5.2. Una estructura de datos muy importante en las ciencias de la computación es
la pila. Esta estructura permite guardar datos, con las siguientes restricciones:
2. Todas las eliminaciones de la pila (no vacı́a) ocurren en la parte superior. Llamamos a
este proceso pop.
Debido a que el último (last) elemento insertado en (in) esta estructura es el primer (first)
elemento que debe salir (0ut) de ella, la pila se considera con frecuencia como una estructura
”last-in-fisrt-out”(LIFO)
Al resolver este problema se tiene un problema de permutación, y se encuentra la sucesión,
con a0 = 1 (solo hay una forma de no permutar nada)
a4 = a0 a3 + a1 a2 + a2 a1 + a3 a0
donde
1 2 34 5 n
2
Si n = 1, la lista de entrada sólo tiene un entero, 1. Se inserta 1 en la parte superior de la pila
vacı́a (vacı́a) y después lo eliminamos. Esto da la permutación 1.
Para n = 2, tenemos dos permutaciones posible para 1, 2, y las obtenemos por medio de
la pila. Ası́, usando esto, para 1 ≤ i ≤ 4, pongamos ai el número de formas de permutar los
datos 1, 2, 3, ..., i mediante la pila. Además, definimos a0 = 1 usando la pila. Por tanto
a4 = a0 a3 + a1 a2 + a2 a1 + a3 a0
con a0 = 1.
La función
∞
X
g (x) = an+1 xn+1
n=0
es una serie formal; la escribimos como
∞
X
f (x) = an xn
n=0
a0 , a1 , a2 , . . .
El juego de la Torre de Hanoi fue inventado por el matemático francés Édouard Lucas a finales
del siglo XIX. (Lucas fue la primera persona en llamar a la sucesión 1, 1, 2, 3, 5, ... la sucesión
de Fibonacci).
Idea de la solución. Para mover n discos bastará mover n-1 discos a una torre libre,
mover el disco mayor a la otra torre libre y mover de nuevo los n-1 discos sobre el mayor. Por
tanto, an cumple la relación de recurrencia
an = 2an−1 + 1,
a1 = 1
3
entonces
a2 = 2 × 1 + 1 = 3
a3 = 2 × 3 + 1 = 7
a4 = 2 × 7 + 1 = 15
a5 = 2 × 15 + 1 = 31
por ejemplo.
Una relación de recurrencia homogénea lineal de orden k con coeficientes constantes junto con
k condiciones iniciales
a0 = C0 , a1 = C1 , ..., ak−1 = Ck−1 ,
define de manera única una sucesión a0 , a1 , ....
Para resolver una relación de recurrencia que implica la sucesión a0 , a1 , ... por iteración, se
usa la relación de recurrencia para escribir el n − ésimo término an en términos de algunos
de sus predecesores an−1 , ..., a0 . Después se usa la relación de recurrencia de manera sucesiva
para sustituir cada uno de an−1 , ... por algunos de sus predecesores. El proceso continúa hasta
obtener una fórmula explı́cita.
4
Ejemplo 5.6. Sea r una constante fija distinta de cero y supongamos una sucesión a0 , a1 , a2 , ...
definida en forma recursiva de la siguiente manera
a0 = a, ak = rak−1 para todo entero k ≥ 1.
Utilice iteración para inferir una fórmula explı́cita para esta sucesión.
Este ejemplo muestra una sucesión geométrica, cada término es igual al término anterior
por una constante fija. Las sucesiones geométricas se presentan en una gran variedad de apli-
caciones, tales como los modelos de interés compuesto, en ciertos modelos de crecimiento de la
población, en desintegración radiactiva y en el número de operaciones necesarias para ejecutar
ciertos algoritmos informáticos.
Ejemplo 5.7. La solución del problema de las torres de Hanoi está dada por la sucesión
a1 = 1, an = 2an−1 + 1, para todo n ≥ 2
Use iteración para dar una fórmula explı́cita para esta sucesión.
5
Ejemplo 5.12. Supongamos que una sucesión b0 , b1 , b2 , ... , satisface la relación de recurrencia
bk = 4bk−1 −4bk−2 para todo entero k ≥ 2, con condiciones iniciales b0 = 1 y b1 = 3. Determine
una fórmula explı́cita para b0 , b1 , b2 , ... .
Ejemplo 5.13. Consideremos la siguiente relación de recurrencia homogénea: an = 6an−1 −
9an−2 y las condiciones iniciales a1 = 3, a2 = 27. Encuentre una fórmula explı́cita para esta
sucesión.
λk − c1 λrk−1 − − ck = 0
tiene k raı́ces distintas λ1 , λ2 , ..., λk . Entonces una sucesión {an } es una solución de la relación
de recurrencia
an = c1 an−1 + c2 an−2 + + ck an−k
si y sólo si
an = α1 λn1 + α2 λn2 + · · · + αk λnk
para n = 0, 1, 2, ... , donde α1 , α2 , . . . , αk son constantes.
Pueden presentarse las siguientes situaciones:
6
5.3.1. Búsqueda binaria
Mientras que una búsqueda sucesiva se puede efectuar en un arreglo cuyos elementos están
en cualquier orden, una búsqueda binaria sólo se puede realizar en un arreglo cuyos elemen-
tos están colocados en orden ascendente (o descendente). Dado un arreglo a[1], a[2], . . . , a[n]
de distintos elementos colocados en orden ascendente, consideremos el problema de intentar
encontrar un elemento particular x en el arreglo.
Para usar búsqueda binaria, primero comparamos x con el “elemento medio” del arreglo.
Si los dos son iguales, entonces la búsqueda fue exitosa. Si no coinciden, entonces como los
elementos del arreglo están en orden ascendente, comparamos los valores de x y el elemento
medio del subarreglo inferior (que consiste de todos los elementos del arreglo bajo el elemento
medio inicial) o del superior (que consiste de todos los elementos del arreglo arriba del elemento
medio inicial).
a [1] , a [2] , a [3] , a [4] , a [5] , a [6] , a [7] , a [8] , a [9]
si tomamos un elemento x y lo comparamos con los a [i] y resulta que x = a [5] se terminó la
búsqueda. En caso contrario, subdividimos el arreglo en dos
y
a [6] , a [7] , a [8] , a [9]
Ahora se compara x con el elemento medio del primer subarreglo a [3] ó del otro subarreglo.
Y si x = a [3] terminó la búsqueda.
La búsqueda continúa mediante repetición de este proceso básico en subarreglos más y
más pequeños y termina cuando ocurre una igualdad o cuando el subarreglo, al cual se le está
aplicando la búsqueda ya no contiene elementos. La eficiencia del algoritmo es resultado del
hecho de que en cada paso, la longitud del subarreglo a ser investigado es prácticamente la
mitad de la longitud del subarreglo anterior.
Para escribir un algoritmo formal de búsqueda binaria, introducimos una variable ı́ndice
cuyo valor final nos dirá si x está o no en el arreglo y si es ası́, indicará la ubicación de x.
Como el arreglo va de a[1] a a[n], entonces ı́ndice queda inicializada en 0. Si se encuentra x,
se cambia el valor de ı́ndice al subı́ndice del elemento del arreglo que coincide con x. Si ı́ndice
mantiene el valor 0 cuando el algoritmo finaliza, entonces x no está en el arreglo.
El formalizar un algoritmo de búsqueda binaria también requiere que seamos más precisos
sobre el significado del “elemento medio” de un arreglo. Si el arreglo consiste de un número
par de elementos, hay dos elementos en la parte media. Por ejemplo, a[6] y a[7] están por igual
en la parte media del siguiente arreglo
En un caso como este, el algoritmo debe elegir cuál tomar de los dos elementos medios,
el más pequeño o el más grande. La opción es arbitraria, cualquiera que sea. Escribiremos el
algoritmo para elegir el más pequeño. El ı́ndice del más pequeño de los dos elementos medios
es el piso del promedio de los ı́ndices superior e inferior del arreglo. Es decir, si inf = el ı́ndice
inferior del arreglo, sup = el ı́ndice superior del arreglo y med = el menor de los dos ı́ndices
medios del arreglo, entonces
ı́nf + sup
med = ⌊ ⌋
2
En este caso, inf = 3 y sup = 10, ası́ el ı́ndice del “elemento medio” es
3 + 10 13
med = ⌊ ⌋ = ⌊ ⌋ = ⌊6,5⌋ = 6
2 2
7
El siguiente es un algoritmo formal para una búsqueda binaria.
Algoritmo Búsqueda binaria
[El objetivo de este algoritmo es buscar un elemento x en un arreglo ascendente de elementos
a[1], a[2], . . . , a[n]. Si se encuentra x, la variable ı́ndice es igual al ı́ndice del elemento del arreglo
en donde x fue localizado. Si x no se encuentra, la variable ı́ndice continúa con su valor inicial,
que es 0. Las variables inf y sup denotan los ı́ndices inferior y superior del arreglo bajo análisis].
Entrada: n [un entero positivo], a[1], a[2], . . . , a[n] [un arreglo de datos dados en orden
ascendente], x [un dato del mismo tipo de datos como los elementos del arreglo]
Cuerpo del algoritmo
ı́ndice := 0, inf := 1, sup := n
[Calcule el ı́ndice medio del arreglo, med. Compare x con a[med]. Si los dos coinciden, la
búsqueda ha sido exitosa. Si no, repita el proceso para el subarreglo
inferior o superior ya sea dando a sup el nuevo valor med - 1 o dando a inf el nuevo valor
med + 1. Cada iteración del bucle disminuye el valor de sup o incrementa el valor de inf. Ası́,
si las iteraciones no son detenidas por el éxito en el proceso de búsqueda, eventualmente el
valor de sup será menor que el valor de inf. Este hecho detiene el proceso iterativo e indica que
x no es un elemento del arreglo.]
while (sup ≥ inf e ı́ndice = 0)
med :=⌊ med+sup 2 ⌋
if a[med] = x then ı́ndice := med
if a[med] > x
then sup := med - 1
else inf := med + 1
end while
[Si ı́ndice tiene el valor 0 en este punto, entonces x no está en el arreglo. De otra forma,
ı́ndice da el ı́ndice del elemento del arreglo en donde se localiza x.]
Salida: ı́ndice [un entero no-negativo]
Ejercicio:
8
para todo k > 1. Siguiendo el procedimiento hecho para el de búsqueda binaria, usando la
relación de recurrencia (g) se llega a que
n
log2 (n) ≤ mn ≤ 2n log2 (n)
2
para todo n ≥ 1. Se tiene que el ordenamiento por mezcla es Θ(n log2 (n)) en el peor caso.
Observación 5.17. Podemos ver que en la mayorı́a de los algoritmos de divide y vencerás el
tamaño de los l subproblemas es aproximadamente m/b, para alguna constante b, en donde m
es el tamaño del problema (o subproblema) original (cada subproblema es aproximadamente del
tamaño 1/b del problema original). El análisis de tiempos de ejecución para estos algoritmos
es el siguiente: Sea g(n) el tiempo requerido por divide y vencerás en problemass de tamaño
n, sin contar el tiempo necesario para llamadas recursivas. El tiempo total f (n) requerido por
este algoritmo de divide y vencerás es parecido a
para l = 1, b =
2, siempre que n sea suficientemente grande. Si existe un entero k ≥ 0 tal que
g (n) ∈ Θ nk , se puede concluir que
Θ nk , si l < bk
f (n) ∈ Θ nk log2(n) , si l = bk
Θ nlog2 (l) , si l > bk
La expresión del lado derecho de (ab) se llama una serie formal. La sucesión {un } se llama la
sucesión de coeficientes.
El nombre de “función” viene de su posible, mas no recomendada, interpretación como fun-
ción en x y la parte “generadora” viene del hecho que las sucesiones que usaremos tı́picamente
cuentan algún tipo de objetos asociados a un ı́ndice i ∈ N.
En rigor, las series formales no son más que otra forma de escribir sucesiones.
Vamos a considerar series de potencias formales y trataremos, en lo posible, de evitar el
problema de la convergencia. Pero cuando sea necesario se usarán criterios de convergencia.
Cuando se utilizan funciones generadoras para resolver problemas de conteo, generalmente
se las considera como series formales de potencias. El hecho de que una función tenga una serie
de potencia única alrededor de x = 0 será importante. Se pueden consultar libros de texto
sobre este tema para obtener detalles sobre las series de potencias, incluida la convergencia de
las series que consideramos aquı́.
A continuación, expondremos algunos hechos importantes sobre las series infinitas utilizadas
cuando se trabaja con funciones generadoras. Se puede encontrar una discusión de estos y otros
resultados relacionados en los textos de cálculo.
9
Se pueden definir las operacionas algebraicas de suma y producto ası́ como también la
operación de derivación. En primer lugar, diremos que dos series formales
P son iguales P
si tienen
la misma sucesión de coeficientes. Dadas dos expresiones U (x) = uk xk y V (x) = v k xk ,
k≥0 k≥0
definimos su suma como la expresión
X
U (x) + V (x) = (uk + vk ) xk
k≥0
y su producto como X
U (x) V (x) = w k xk
k≥0
donde wk = u0 vk + u1 vk−1 + · · · + uk−1 v1 + uk v0 . Esta última expresión se precisará más
adelante en la Proposición 5.26
Otra de las operaciones útiles
P enk el conjunto de las series formales es la de derivación. La
derivada de la serie U (x) = uk x se define como
k≥0
X
U ′ (x) = kuk xk−1
k≥1
P Unak de las ventajas de concentrar la sucesión {un }, n ≥ 0 en una expresión global U (x) =
uk x es justamente la posibilidad de efectuar el tipo de manipulaciones algebraicas que
k≥0
necesitemos. Muchas veces, el uso de estas manipulaciones proporciona expresiones explı́citas
de los términos un de la sucesión. En lo que sigue veremos una primera ilustración de la versa-
tilidad de las funciones generadoras revisando los coeficientes binomiales y algunos problemas
combinatorios asociados a estos números en la perspectiva de las funciones generadoras.
10
4. Cambio de variable. Si U (x) es la función generadora de la sucesión a0 , a1 a2 , . . .,
entonces U (cx) es la función generadora de la sucesión a0 , ca1 , c2 a2 , . . .. En particular,
1
la función generadora de la sucesión 1, c, c2 , c3 , . . ., es , para |cx| < 1.
1 − cx
n
Ejemplo 5.18. Para un
n ∈ N dado, la función U (x) = (1 + x) es la función generadora de
n
la sucesión ak = .
k
Ejemplo 5.19. Si tomamos x = 1 en el ejemplo anterior, obtenemos
n
X
nn
U (1) = 2 =
k
k=0
Teorema 5.20. El teorema del binomio generalizado. Sea x un número real con |x| < 1 y sea
m un número real. Entonces
∞
m
X m
(1 + x) = xk .
k
k=0
y ası́
n ! X
n !
X n n + k − 1
(1 + x)n (1 + x)−n = 1 = xk (−1)k xk
k k
k=0 k=0
y
1
V (x) = W (x) = = 1 + x + x2 + x3 + · · ·
x−1
11
pues, primero V (x) es la función generadora de la sucesión constante 1,1,1,1,1,..., y ası́ xV (x)
es la función generadora de 0,1,1,1,1,1,..., obteniéndose
(1 − x) V (x) = 1
x (x + 1)
(x) H ′ (x) =
(1 − x)3
12
Ejemplo 5.25. Si hacemos an = 1 para todo n ∈ N en (abc) entonces
∞
X xn
= ex
n!
n=0
Proposición 5.26. Si E(x) y G(x) son las funciones generadoras exponenciales de las sucesio-
nes {an }, n ≥ 0 y {bn }, n ≥ 0, respectivamente, entonces E(x)G(x) es la función generadora
de la sucesión {sn }, n ≥ 0 con
n
X n
sn = ak bn−k
k
k=0
y
n
X n
X
E (x) = ak xk , G (x) = bk xk
k=0 k=0
1
Ejemplo 5.27. Sea f (x) = . Determinar los coeficientes del desarrollo en serie para
(1 − x)2
∞
P
f (x) = ak xk .
k=0
Ejemplo 5.29. Una contraseña de acceso a la computadora consta de una a tres letras elegidas
de 26 letras de un alfabeto con repeticiones permitidas. ¿Cuántas contraseñas diferentes son
posibles?
Ejemplo 5.30. ¿Cuántos enteros de tres dı́gitos (enteros de 100 a 999 inclusive) son divisibles
por 5?
13
Una consecuencia importante de la regla de adición es el hecho de que si el número de
elementos en un conjunto A y el número en un subconjunto B de A son ambos conocidos,
entonces el número de elementos que se encuentran en A y no se encuentran en B se puede
calcular.
n (A − B) = n (A) − n (B) .
Ejemplo 5.32. El número de palabras de cinco letras que contienen al menos una vocal se
calcula fácilmente como el total de palabras menos las que no tienen ninguna vocal, 526 − 521 .
Una de las operaciones entre conjuntos que admite una traducción directa en términos de
cardinales es la del producto cartesiano.
Proposición 5.33. Sean A y B dos conjuntos finitos y A×B su producto cartesiano. Entonces
n (A × B) = n (A) · n (B)
La proposición anterior se puede extender por inducción a cualquier número finito de fac-
tores. Si A1 , . . . , Ar son conjuntos finitos, entonces
Cuando los conjuntos no son disjuntos se puede obtener una fórmula que hace intervenir el
cardinal de la intersección.
n (A ∪ B) = n (A) + n (B) − n (A ∩ B)
14
El llamado principio de inclusión-exclusión es una extensión de este resultado al caso de
la unión de n conjuntos y tiene una expresión un poco más compleja.
Teorema 5.37. (Principio de inclusión-exclusión). Sean A1 , A2 , . . . , An conjuntos finitos. En-
tonces
n
X X
n (A1 ∪ A2 ∪ · · · ∪ An ) = n (Ai ) − n (Ai ∩ Aj ) + · · ·
i=1 i<j
r
X
+ (−1) n (Ai1 ∩ · · · ∩ Air )
i1 <···<ir
n−1
+ · · · + (−1) n (A1 ∩ A2 ∩ · · · ∩ An )
Ejemplo 5.38. Un profesor en una clase de matemáticas discretas, pasa una encuesta en la
que se solicita a los estudiantes que indiquen los cursos de matemáticas y de informática en
los que se han matriculado recientemente. De un total de 50 alumnos, encontró que
30 alumnos se matricularon en análisis 3, 18 se matricularon en análisis 4, 26 se matri-
cularon en Java, 9 se matricularon en análisis 3 y análisis 4, 16 se matricularon en análisis
3 y Java, 8 se matricularon en análisis 4 y Java y 47 se matricularon en al menos uno de los
tres cursos.
a. ¿Cuántos estudiantes no se matricularon en ninguno de los tres cursos?
b. ¿Cuántos estudiantes se matricularon en los tres cursos?.
Ejemplo 5.39. Conteo de elementos de una unión general
a. ¿Cuántos enteros del 1 al 1000 son múltiplos de 3 o múltiplos de 5?
b. ¿Cuántos enteros del 1 al 1000 ni son múltiplos de 3 ni son múltiplos de 5?
Ejemplo 5.40. Hallar el número de enteros positivos n tales que 1 ≤ n ≤ 100 y n no es
divisible entre 2, 3 o 5.
Principio de Dirichlet
Otro principio muy útil en combinatoria es el denominado principio de Dirichlet, también
conocido como el principio del palomar, debido a que este se concibe a partir del siguiente
problema: “si se introducen n palomas a un palomar con k nidos, k < n, al menos en un nido
habrá 2 o más palomas”.
La razón por la que esta afirmación es cierta se aprecia mediante un argumento por contra-
dicción. Si la conclusión es falsa, cada palomar contiene cuando mucho una paloma y, en este
caso, se puede rendir cuenta de a lo más k palomas. Como hay n palomas y n > k, se tiene
una contradicción.
Este principio no hace referencia al hecho de cómo localizar el nido que contiene 2 o más
palomas, solo afirma la existencia de un nido con 2 o más palomas.
Para aplicar ese principio, primero se debe establecer cuáles objetos desempeñan el papel
de las palomas y cuáles el de los nidos.
Ejemplo 5.41. Se tiene un operador de una computadora que tiene una unidad de disco duro
externo para respaldar la información de la oficina donde trabaja. Un dı́a le dan otro disco
duro externo que contiene 600 000 “palabras” de cuatro o menos letras minúsculas. En el disco
duro las palabras consecutivas se separan con un carácter en blanco. ¿Puede suceder que las
600 000 palabras sean distintas entre sı́?
Ejemplo 5.42. Demostrar que cualquier subconjunto de tamaño seis del conjunto
S = {1, 2, 3, 4, 5, 6, 7, 8, 9}
15
5.6. Ejercicios
1. Se quiere determinar el número de regiones en las cuales queda dividido un plano al
trazar en este n rectas, de forma que estas se corten de dos en dos, y de tal manera que
tres rectas no tengan un punto común. Si an es el número total de regiones, encontrar
una relación de recurrencia para calcular an .
an = an−1 + 3
4. En cada uno de los ejercicios siguientes se define en forma recursiva una sucesión. Utilice
iteración para inferir una fórmula explı́cita para la sucesión. Simplificar sus respuestas
siempre que sea posible.
6. En cada uno de los ejercicios siguientes, suponga una sucesión que satisfaga la relación
de recurrencia dada y las condiciones iniciales. Encuentre una fórmula explı́cita para la
sucesión.
16
8. Encontrar la función generadora para la sucesión de Fibonacci
fn = fn−1 + fn−2 , n ≥ 3, f1 = 1, f2 = 1.
9. En cierto sistema informático, una contraseña válida tiene entre 6 y 8 caracteres válidos.
El primero tiene que ser un carácter alfabético, los siguientes son alfabéticos o numéricos.
Hay 52 caracteres alfabéticos autorizados. Son
10. En una cierta empresa, las contraseñas deben tener de 3 a 5 sı́mbolos largos y compuestos
de las 26 letras del alfabeto, los diez dı́gitos del 0 al 9 y los 14 sı́mbolos !, @, #, $, %, ˆ, &, ∗, (, ), −, +, {
17