0% encontró este documento útil (0 votos)
17 vistas29 páginas

Apunts Recurrencia

Cargado por

hijovah353
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
17 vistas29 páginas

Apunts Recurrencia

Cargado por

hijovah353
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 29

Capı́tulo 2

Recurrencia

2.1. Preliminares
Definición 2.1

Una sucesión numérica an , n = 0, 1, 2, · · · puede expresarse recursivamente


si:

se enuncian explı́citamente los valores iniciales a0 , a1 , · · · , ac−1 (condi-


ciones iniciales),

y mientras que para todo n ≥ c se obtiene an a partir de la relación

an = f (an−1 , an−2 , · · · , an−c , n)

esto es, una ecuación que permite calcular el n-ésimo término a par-
tir de términos precedentes (las relaciones de este tipo se denominan
relaciones de recurrencia).

Ejemplo 2.1

Supongamos que tenemos

a1 = 1, a2 = 2,
an = an−1 + an−2 , ∀n ≥ 3

25
26

La ecuación
an = an−1 + an−2 ∀n ≥ 3
indica la forma de obtener nuevos elementos de la sucesión a partir de los
resultados anteriores ya conocidos (o que se pueden calcular).
a3 = a 2 + a 1 = 2 + 1 = 3
a4 = a 3 + a 2 = 3 + 2 = 5
a5 = a4 + a3 = 5 + 3 = 8,
y ası́ sucesivamente. Esto es un ejemplo de la definición de una sucesión en
forma recursiva.
La relación de recurrencia
an+1 = 3an , n ≥ 0
no define una única sucesión numérica. La sucesión 5, 15, 45, 135, · · · satisface
la relación de recurrencia anterior. Y la sucesión 7, 21, 63, 189, · · · también
la satisface. Para distinguir la sucesión particular descrita por an+1 = 3an ,
necesitamos conocer uno de los términos de la sucesión. Por tanto,
a0 = 5,
an+1 = 3an , ∀n ≥ 0
define en forma única la sucesión 5, 15, 45, · · · , mientras que
a0 = 7,
an+1 = 3an , ∀n ≥ 0
identifica a 7, 21, 63, · · · .

Nuestro último ejemplo muestra la importancia de la condición inicial


para determinar una única solución.
En algunas ocasiones resulta útil disponer de una fórmula explı́cita para
an . Por ejemplo, podrı́a ser
an = 3n + 2 o an = (n + 1)(n + 2).
De hecho convenimos en decir que hemos resuelto la recurrencia cuando
disponemos de tal fórmula.
(Una razón por la que una fórmula explı́cita puede ser útil es para describir
el comportamiento de una sucesión para valores grandes de n.)
27

2.2. Problemas de Recurrencias


Los métodos recursivos son fundamentales en el análisis de algoritmos.
Estos métodos surgen cuando queremos resolver un problema dado, al de-
scomponerlo o referirlo a problemas similares más pequeños. En lenguaje de
programación podemos implementarlos mediante el uso de funciones y pro-
cedimientos recursivos, que permiten llamarse a sı́ mismos. Dedicaremos la
presente sección a resolver problemas de recurrencias.

2.2.1. Las Torres de Hanoi


Consideremos n discos circulares, con diferentes diámetros, y agujeros en
su centro. Estos discos pueden apilarse en cualquiera de los postes que se
muestran en la Figura 2.2.1. Los discos están organizados por tamaño, de
modo que el más pequeño se encuentra en la parte superior, encima de los
otros discos, y el más grande en la parte inferior, debajo de todos. El objetivo
es pasar los discos, de uno en uno, de modo que la torre original termine en
un poste diferente. Cada uno de los postes puede utilizarse para ubicar de
forma temporal los discos, pero no se permite que un disco más grande quede
encima de otro más pequeño, en ningún poste. ¿Cuál es el número mı́nimo
de movimientos necesarios para hacer esto con n discos?

Figura 2.1: Esta es la posición inicial en el problema de las torres de Hanoi


para n = 3. Los tres discos están organizados en el poste de la izquierda. El
objetivo es pasar los discos, de uno en uno, de modo que la torre original
termine en un poste diferente.

Veamos gráficamente (Figura 2.2.1), para n = 3 discos, una solución al


problema que emplea 7 movimientos.
28

1
2 2
3 3 1 3 1 2

1 1
3 2 3 2

2
1 3 2 1 3

1
2
3

Figura 2.2: Solución gráfica al problema de las torres de Hanoi con tres discos.

Encontrar una relación de recurrencia


El problema de las Torres de Hanoi se puede resolver de modo recurrente
como sigue.
Para n ≥ 0, sea Tn el número mı́nimo de movimientos necesarios para
mover una torre de n-discos, a un poste diferente. Entonces, para n + 1
discos, haremos lo siguiente:
En algún momento debemos mover el disco más grande desde el primer
poste a un poste diferente. Esto requiere 1 paso. Para que esto ocurra, los n
discos más pequeños deben estar todos apilados en el poste restante. Esto se
puede hacer en Tn pasos. Después de que el disco más grande se ha movido,
se requieren otros Tn movimientos para organizar los restantes discos más
pequeños encima.
Este argumento prueba que el número de pasos requeridos para completar
el problema de las Torres de Hanoi con n + 1 discos es:

Tn+1 = 2Tn + 1

Sabiendo que T1 = 1, podemos utilizar esta recurrencia para concluir que


T2 = 3, T3 = 7, T4 = 15, · · · .

Resolver la recurrencia
El problema de las Torres de Hanoi fue planteado en 1883 por el matemático
francés Edouard Lucas. En su planteamiento original habı́an 64 discos de oro.
29

Esta claro que calcular T64 utilizando la recurrencia implicarı́a mucho trabajo.
Por lo tanto, serı́a interesante tener una expresión para Tn que nos permi-
tiera obtener de forma rápida el número de pasos necesarios para resolver el
problema de las Torres de Hanoi para cualquier número de discos.

A continuación, resolveremos el problema de las Torres de Hanoi utilizan-


do dos métodos diferentes. El primer método que aplicaremos para resolver
este problema consiste en conjeturar la solución y entonces verificar, general-
mente con una demostración por inducción, que la conjetura es correcta. A
este método le llamaremos de sustitución.

Método de sustitución
Conjeturar
Para ayudarnos a realizar una conjetura acertada, podemos tabular Tn
para valores pequeños de n:

n Tn
1 1
2 3
3 7
4 15
5 31

A partir de los datos presentados en la tabla, podemos conjeturar:

Tn = 2 n − 1

Verificar
Para comprobar que la conjetura que hemos realizado no es errónea, la
demostraremos por inducción sobre n.
Sea P (n) la propiedad que establece que Tn = 2n − 1.
El primer caso, P (1) es cierto porque T1 = 1 = 21 − 1. Hagamos una
hipótesis de inducción, y supongamos que la propiedad es cierta para un
valor especı́fico de n, digamos n = k, con lo que Tk = 2k − 1. Y veamos cómo
aplicando esta hipótesis podemos probar que el resultado también es correcto
30

para n = k + 1.
Tk+1 = 2Tk + 1
= 2(2k − 1) + 1
= 2k+1 − 1
Nuestra conjetura ahora está verificada. Esto prueba, por ejemplo, que el
problema de las Torres de Hanoi con n = 7 discos requerirá 27 − 1 = 127
movimientos para ser completado.

En general, el mejor método que tenemos para resolver recurrencias es el


de sustitución. El único inconveniente del mismo, serı́a llegar a conjeturar la
solución correcta. En el problema de las Torres de Hanoi, conjeturar la solu-
ción fue fácil, sin embargo algunas veces la solución tiene una expresión tan
complicada que es bastante difı́cil poder llegar a conjeturarla. Presentaremos
a continuación un método alternativo que nos permitirá resolver recurrencias.
Este método se conoce como de iteración o expansión.

Método de Iteración
Consta de cuatro pasos, los cuales pasamos a detallar:
1. Aplicar y simplificar. Expandir la relación de recurrencia, sustituyendo
el término con ı́ndice inferior por la expresión que dicta la relación de
recurrencia y simplificando la expresión resultante. Hacer esto en varias
ocasiones.
2. Identificar y verificar el modelo. Identificar un modelo para la ecuación
de recurrencia después de i etapas del paso anterior. Y a continuación,
verificar que este modelo es correcto tras expandir la ecuación de re-
currencia en una etapa más.
3. Expresar Tn en función de los primeros términos. Sustituir un valor de
i en el modelo de modo que Tn sea expresado como una función de los
primeros términos.
4. Encontrar una fórmula explı́cita para Tn . Utilizando las condiciones
iniciales, en la fórmula obtenida en el paso anterior, se resuelve la re-
currencia.
Para ilustrar cómo trabaja el método de iteración, lo aplicaremos para re-
solver el problema de las Torres de Hanoi.
31

Paso 1: Aplicar y simplificar

Tn = 1 + 2Tn−1
= 1 + 2(1 + 2Tn−2 ) (aplicar)
= 1 + 2 + 4Tn−2 (simplificar)
= 1 + 2 + 4(1 + 2Tn−3 ) (aplicar)
= 1 + 2 + 4 + 8Tn−3 (simplificar)
= 1 + 2 + 4 + 8(1 + 2Tn−4 ) (aplicar)
= 1 + 2 + 4 + 8 + 16Tn−4 (simplificar)

La primera ecuación es la relación de recurrencia que queremos resolver. En


el primer paso, transformamos la recurrencia original, aplicando la ecuación
de recurrencia para hacer que Tn dependa de términos inferiores, eliminando
Tn−1 y haciendo que Tn dependa de Tn−2 . A continuación simplificamos la
expresión para Tn . Entonces aplicamos de nuevo la recurrencia, para que Tn
dependa del término Tn−3 . Simplificamos la expresión y volvemos a aplicar
la recurrencia y simplificar. Paramos aquı́ de aplicar y simplificar porque
parece quedar claro cuál será el modelo a seguir, tras sucesivas aplicaciones
y simplificaciones.

Paso 2: Identificar y verificar el modelo

El modelo parece haber quedado claro: Tn es una suma de potencias con-


secutivas de 2, la última de ellas multiplicada por un término de la sucesión,
de ı́ndice inferior a n, y relacionado con dicha potencia.
El próximo paso será describir este modelo, escribiendo la expresión tras
i etapas de aplicar y simplificar la recurrencia. Y entonces realizaremos una
última etapa (aplicar y simplificar) para confirmar que el modelo presentado
es correcto

Tn = 1 + 2 + 4 + · · · + 2i−1 + 2i Tn−i
(aplicar) = 1 + 2 + 4 + · · · + 2i−1 + 2i (1 + 2Tn−(i+1) )
(simplificar) = 1 + 2 + 4 + · · · + 2i−1 + 2i + 2i+1 Tn−(i+1)

¡Ser cuidadosos a la hora de simplificar, dado que demasiada simplificación


puede obscurecer el modelo emergente!
32

Paso 3: Expresar Tn en función de los primeros términos


La condición inicial en nuestro ejemplo es T1 . Si realizamos i pasos, se
obtiene una expresión donde el término de ı́ndice menor es Tn−i . ¿Cuánto
debe valer i para que Tn−i = T1 ? La respuesta es i = n − 1.

Tn = 1 + 2 + 4 + · · · + 2i−1 + 2i Tn−i
(i=n-1) = 1 + 2 + 4 + · · · + 2n−2 + 2n−1 T1

Esto nos lleva a una expresión de Tn no recurrente.

Paso 4: Encontrar una fórmula explı́cita para la expresión de T n


Todos los pasos anteriores nos llevan a encontrar una forma cerrada para
la expresión de Tn . Y en este caso, al ser T1 = 1, hemos sido afortunados
porque Tn es la suma de una serie geométrica.

Tn = 1 + 2 + 4 + · · · + 2n−2 + 2n−1
n−1
X
= 2i
i=0
= 2n − 1

2.2.2. Ordenación por el Método de la Burbuja


Uno de los métodos de ordenación más sencillos se conoce como la orde-
nación de la burbuja. Como veremos este problema se resolverá utilizando el
método de sustitución.

El algoritmo

En este caso, la entrada es una lista A[1], A[2], · · · , A[n] de n números que
deben ordenarse de forma ascendente. La idea es comparar términos adya-
centes de la lista e intercambiarlos si están en el orden erróneo.
El segmento de programa que aparece en la Figura 2.3 proporciona una
implementación para este tipo de algoritmo. En este caso, la variable entera
i es el contador para el ciclo For exterior, mientras que la variable entera j
es el contador para el ciclo For interior. Por último, la variable real temp se
usa para guardar lo necesario para hacer un intercambio.
33

Begin
For i:=1 to n-1 do
For j:=n downto i+1 do
If A[j] < A[j − 1] then
Begin
temp:=A[j − 1];
A[j − 1] := A[j];
A[j] := temp
End
End;

Figura 2.3:

Comparamos el último elemento de la lista dada, A[n], con su predecesor,


A[n−1]. Si A[n] < A[n−1], intercambiamos los valores guardados en A[n−1]
y A[n]. En todo caso, ahora tendremos que A[n−1] ≤ A[n]. Después compara-
mos A[n−1] con su predecesor inmediato, A[n−2]. Si A[n−1] < A[n−2], los
intercambiamos y continuamos el proceso. Después de n − 1 comparaciones
de este tipo, el número más pequeño de la lista está en A[1]. A continuación
repetimos este proceso para los n − 1 números restantes guardados en la lista
más pequeña A[2], A[3], · · · , A[n]. De esta manera, cada vez (contada por i)
que se realiza este proceso, el número más pequeño de la sublista sube (como
una burbuja) hasta el frente de esa sublista.
Por ejemplo, la tabla siguiente muestra el efecto de la primera pasada en
el orden inicial 4, 7, 3, 1, 5 ,8, 2, 6.

Orden inicial 4 7 3 1 5 8 2 6
a
Después de la 1 comparación 7 4
Después de la 2a comparación 4 3
a
Después de la 3 comparación 3 1
Después de la 4a comparación 5 1
a
Después de la 5 comparación 8 1
a
Después de la 6 comparación 2 1
Después de la 7a comparación 6 1
Después de la primera pasada 7 4 3 5 8 2 6 1
34

Encontrar una recurrencia

Para determinar la función de complejidad en tiempo cuando usamos este


algoritmo en una lista de tamaño n ≥ 1, contamos el total de comparaciones
realizadas para ordenar los n números dados. Si an denota el número de
comparaciones necesarias para ordenar n números de esta forma, entonces
tendremos la siguiente relación de recurrencia:

a1 = 0
an = an−1 + n − 1, n ≥ 2

Esto surge de lo siguiente: dada una lista de n números, hacemos n − 1


comparaciones para subir el número más pequeño al principio de la lista. La
sublista restante de n − 1 elementos requiere entonces an−1 comparaciones
para ordenarse completamente.

Resolver la recurrencia

Para resolver esta relación aplicaremos el método de sustitución.

Método de Sustitución

Conjeturar

Para ayudarnos a realizar una conjetura acertada enumeraremos algunos


términos, para ver si hay un patrón que podamos reconocer.

a1 =0
a2 = a1 + (2 − 1) = 1
a3 = a2 + (3 − 1) = 1 + 2
a4 = a3 + (4 − 1) = 1 + 2 + 3
..
.

A partir de los datos anteriores podemos conjeturar:

(n − 1)n
an = 1 + 2 + · · · + (n − 1) =
2
35

Verificar
Para comprobar que la conjetura que hemos realizado no es errónea, la
demostraremos por inducción sobre n.
Sea P (n) la propiedad que establece que an = (n−1)n
2
. El primer caso,
(1−1)1
P (1) es cierto porque a1 = 0 = 2 . Hagamos una hipótesis de inducción, y
supongamos que la propiedad es cierta para un valor especı́fico de n, digamos
n = k, con lo que ak = (k−1)k 2
. Y veamos cómo aplicando esta hipótesis
podemos probar que el resultado también es correcto para n = k + 1.

ak+1 = ak + ((k + 1) − 1)
= (k−1)k
2
+k
(k−1)k+2k
= 2
= k(k+1)
2

Lo cual prueba nuestra conjetura.


Notemos que este problema también podrı́a resolverse utilizando el méto-
do de iteración. Se deja como ejercicio para el lector.

2.2.3. Algoritmo de Ordenación por Fusión


Hay muchos algoritmos para ordenar una lista de n artı́culos. Uno de los
más populares es el algoritmo de ordenación por fusión (Merge sort).

El algoritmo
A continuación presentaremos cómo trabaja dicho algoritmo:
La entrada es una lista de n ≥ 1 artı́culos x1 , x2 , · · · , xn .

Si n = 1, entonces el algoritmo devuelve el artı́culo simple x1 .

Si n > 1, entonces la lista original se divide en dos sublistas,

x1 , x2 , · · · , xn/2 y x(n/2)+1 , · · · , xn .

Ambas se ordenarán recursivamente, y entonces se mezclarán para for-


mar una lista ordenada de los n artı́culos originales.

Veamos con un ejemplo cómo trabaja el algoritmo anterior.


36

Sublista 1 Sublista 2 Lista


5, 7, 10, 23 2, 3, 4, 9
5, 7, 10, 23 3, 4, 9 2
5, 7, 10, 23 4, 9 2, 3
5, 7, 10, 23 9 2, 3, 4
7, 10, 23 9 2, 3, 4, 5
10, 23 9 2, 3, 4, 5, 7
10, 23 2, 3, 4, 5, 7, 9
2, 3, 4, 5, 7, 9, 10, 23

Figura 2.4: Contenidos de las listas en cada paso del algoritmo de ordenación
por fusión

Ejemplo 2.2

Supongamos que queremos ordenar la lista siguiente: 10, 7, 23, 5, 2, 4, 3, 9.


Dado que el número de elementos es más grande que 1, dividiremos la lista en
dos; una es 10, 7, 23, 5, y la otra 2, 4, 3, 9. Cada sublista se ordena recursiva-
mente. Los resultados serán 5, 7, 10, 23 y 2, 3, 4, 9. Ahora debemos fusionar
estas dos sublistas ordenadas en una lista ordenada mayor. Empezaremos
con la lista vacia, y en cada paso añadiremos un número, resultado de com-
parar el primer elemento de las sublistas. De los dos números comparados,
nos quedamos con el que sea más pequeño y lo añadimos al final de la lista
grande. Este proceso se repite, hasta que una de las sublistas se queda sin
elementos. En ese momento, la sublista restante se añade al final de la lista
grande y por tanto queda acabada la tarea.
La Figura 2.4 muestra los contenidos de las listas en cada uno de los pasos
del algoritmo.

Encontrar una recurrencia


Al analizar un algoritmo para ordenar números, una pregunta habitual
es ¿cuál será el número máximo de comparaciones utilizadas al ordenarlos?
El número de comparaciones se toma como una estimación del tiempo de
ejecución -complejidad- del algoritmo (the run time). En el caso del algorit-
mo de ordenación por fusión, podemos encontrar una recurrencia para esta
37

cantidad. Resolver esta recurrencia nos permitirá estudiar la conveniencia


asintótica del algoritmo.
Para hacer el análisis más simple, supondremos que el número de ele-
mentos que estamos ordenando es una potencia de dos. Esto nos asegura
que podemos dividir la lista exactamente por la mitad en cada etapa de la
recursión.
Sea Tn el número máximo de comparaciones utilizadas por el algoritmo
para ordenar una lista de n elementos. Si n > 1, entonces esto es igual al
número de comparaciones utilizadas para ordenar ambas mitades de la lista,
más el número de comparaciones utilizados para fusionar ambas mitades.
El número de comparaciones utilizados para ordenar cada mitad de la
lista es Tn/2 . Ordenar ambas mitades requiere por tanto 2Tn/2 comparaciones.
El número de comparaciones utilizadas para fusionar ambas mitades de la
lista de n elementos es como mucho n − 1. La razón es que un número
es añadido a la lista grande después de cada comparación, y al menos un
número es añadido a la lista grande en el último paso, cuando una de las
listas más pequeñas se ha quedado sin elementos. Desde luego, el número de
comparaciones podrı́a ser inferior, pero recordemos que estamos analizando
el peor de los casos.
Añadiendo todas las comparaciones obtendremos la siguiente recurrencia:

Tn = 2Tn/2 + n − 1

Ninguna comparación se requiere para ordenar una lista con un único elemen-
to, por lo tanto T1 = 0. A partir de este hecho y de la recurrencia, podremos
calcular T2 = 2T1 + 2 − 1 = 1, T4 = 2T2 + 4 − 1 = 5, etc.

Resolver la recurrencia

Nos gustarı́a encontrar una fórmula explı́cita para el número de compara-


ciones utilizadas por el algoritmo de ordenación por fusión al ordenar una
lista de n artı́culos. Esto requiere resolver la recurrencia Tn = 2Tn/2 + n − 1.
Para intentarlo utilizaremos el método de iteración presentado en la sección
anterior, dado que a partir de los primeros valores de Tn (0, 1, 5, 17, 49) es
difı́cil conjeturar un modelo y, por lo tanto, el método de sustitución no lo
podremos aplicar.
38

Método de Iteración

Paso 1: aplicar y simplificar

Tn = n − 1 + 2Tn/2
(aplicar) = n − 1 + 2((n/2) − 1 + 2Tn/4 )
(simplificar) = n − 1 + n − 2 + 4Tn/4
(aplicar) = n − 1 + n − 2 + 4(n/4 − 1 + 2Tn/8 )
(simplificar) = n − 1 + n − 2 + n − 4 + 8Tn/8
(aplicar) = n − 1 + n − 2 + n − 4 + 8(n/8 − 1 + 2Tn/16 )
(simplificar) = n − 1 + n − 2 + n − 4 + n − 8 + 16Tn/16

Al aplicar y simplificar la recurrencia en tres ocasiones, parece quedar claro


cuál será el modelo a seguir.

Tn = n − 20 + n − 21 + n − 22 + n − 23 + n − 24 Tn/24

Paso 2: verificar el modelo

Tn = n − 20 + n − 21 + · · · + n − 2i−1 + 2i Tn/2i
(aplicar) = n − 1 + n − 2 + · · · + n − 2i−1 + 2i (n/2i − 1 + 2Tn/2i+1 )
(simplificar) = n − 1 + n − 2 + · · · + n − 2i−1 + n − 2i + 2i+1 Tn/2i+1

Paso 3: expresar Tn en función de los primeros términos

Debemos sustituir un valor para i dentro del modelo, de modo que Tn sólo
dependa de los términos más pequeños. Una elección natural serı́a i = log 2 n,
ya que Tn/2i = T1 . Esta sustitución hace que Tn sólo dependa de T1 , el cual
sabemos que vale 0.

Tn = n − 20 + n − 21 + · · · + n − 2i−1 + 2i Tn/2i
= n − 1 + n − 2 + · · · + n − 2log2 (n)−1 + 2log2 n Tn/2log2 n
= n − 1 + n − 2 + · · · + n − 2log2 (n)−1 + 2log2 n T1
= n − 1 + n − 2 + · · · + n − 2log2 (n)−1
39

Paso 4: Encontrar una fórmula explı́cita para la expresión de T n


Ahora tenemos una expresión no recurrente para Tn . Obtengamos su
suma.
Tn = n − 1 + n − 2 + · · · + n − 2log2 (n)−1
log2 (n)−1
X
= n − 2i
i=0
log2 (n)−1 log2 (n)−1
X X
= n− 2i
i=0 i=0
= n log2 n − (2log2 n − 1)
= n log2 n − n + 1
∼ n log2 n
Ya tenemos la solución. ¿La habrı́amos conjeturado? Comprobemos cómo con
esta fórmula obtenemos los mismos valores para Tn que los que calculamos
anteriormente.

n Tn n log2 n − n + 1
1 0 1 log2 1 − 1 + 1 = 0
2 1 2 log2 2 − 2 + 1 = 1
4 5 4 log2 4 − 4 + 1 = 5
8 17 8 log2 8 − 8 + 1 = 17
16 49 16 log2 16 − 16 + 1 = 49

Notemos que las n log2 n comparaciones utilizadas por el algoritmo de orde-


nación por fusión están lejos del total de comparaciones posibles n(n−1)
2
.

2.2.4. Técnica Divide y Vencerás


Comparemos las recurrencias del problema de las Torres de Hanoi y el
algoritmo de ordenación por fusión.

Tn = 2Tn−1 + 1 T n ∼ 2n
Tn = 2Tn/2 + n − 1 Tn ∼ n log2 n

En el problema de las Torres de Hanoi, dividimos un problema de tamaño


n en dos subproblemas de tamaño n − 1 y añadimos únicamente un paso
adicional (mover el disco más grande). En el algoritmo de ordenación por
40

fusión, dividimos un problema de tamaño n en dos subproblemas de tamaño


n/2 y añadimos n − 1 pasos adicionales (refundir dos sublistas).
¿Qué algoritmo es más rápido? El de ordenación por fusión. El punto clave
es que generar subproblemas más pequeños es más importante que reducir
los pasos adicionales por etapa recursiva.
La técnica utilizada en el algoritmo de ordenación por fusión se conoce con
el nombre de divide y vencerás. Se trata de una de las técnicas algorı́tmicas
básicas más potentes. Veamos otro ejemplo en el cual se aplica la misma.

Algoritmo de búsqueda binaria


Consideremos, por ejemplo, el algoritmo de búsqueda binaria, el cual des-
cribiremos en el contexto de acertar un número entre 1 y 100. Supongamos
que alguien nos pide que acertemos un número entre 1 y 100, y después de
cada intento fallido, nos dice si el número a acertar es superior o inferior al
número que nosotros habı́amos elegido.
El modo natural de proceder es empezar por 50. ¿Por qué? Porque si no
acertamos, sabremos si el número se encuentra entre 51 y 100 o entre 1 y
50. En cualquier caso ahora tenemos que acertar un número en un rango
de números que es la mitad de grande. Ası́ hemos dividido el problema en
otro problema que es la mitad de grande, y ahora podemos ( recursivamente)
vencer este problema.
Si denotamos por T (n) al número de intentos realizados hasta acertar en
búsqueda binaria un número sobre n números, y suponiendo que n es una
potencia de 2, una recurrencia para T (n) vendrá dada por
T (1) = 1,
T (n) = T (n/2) + 1 para n ≥ 2.
Esto es, el número de intentos en búsqueda binaria hasta acertar un número
de entre n es igual a: un paso para decidir inicialmente en qué mitad del
conjunto se halla, más el tiempo que se invierte en hacer búsqueda binaria
sobre n2 números escogidos.

2.3. Recurrencias Lineales


En la presente sección, consideraremos una familia de recurrencias, las
llamadas recurrencias lineales, las cuales aparecen de forma frecuente en pro-
blemas relacionados con la programación de ordenadores.
41

Definición 2.2
Una relación de recurrencia se llama lineal con coeficientes constantes si es
de la forma
an = c1 an−1 + c2 an−2 + · · · + cd an−d + f (n)
donde c1 , c2 , · · · , cd son constantes, f (n) es una función arbitraria, y d es el
orden de la recurrencia. (Notar que d se puede obtener como la diferencia
entre el subı́ndice de orden mayor y el de orden menor.) Si f (n) = 0 , la
relación de recurrencia se dice que es homogénea, mientras que si la función
f (n) 6= 0 la relación es no homogénea .

En primer lugar veremos cómo resolver una recurrencia lineal homogénea


especı́fica y generalizaremos nuestro método de trabajo para todas las recu-
rrencias lineales homogéneas. Y a continuación presentaremos el método de
los coeficientes indeterminados que nos permitirá resolver un tipo particular
de recurrencias lineales no homogéneas.

2.3.1. Recurrencia de Fibonacci


Los números de Fibonacci F0 , F1 , F2 , · · · aparecen en muchas aplicaciones
y se definen recursivamente de la forma siguiente:
F0 = 1, F1 = 1
Fn+2 = Fn+1 + Fn , n ≥ 0
Notemos que la recurrencia de Fibonacci es de orden 2 y tiene por constantes
c1 = 1, y c2 = 1.
Resolver esta recurrencia es fácil porque la relación es lineal. (Bien, fácil
en el sentido de que puedes aprender la técnica para resolverla en una lección;
descubrirla fue un trabajo de seis siglos). El método que aplicaremos para
resolverla será el de sustitución.

Método de Sustitución
Conjeturar
Para una recurrencia lineal, una solución exponencial podrı́a ser una bue-
na conjetura.
an = cαn
42

En la expresión anterior c y α son parámetros introducidos para probar


nuestra conjetura.

Verificar
Sustituyendo nuestra conjetura en la relación de recurrencia
an = an−1 + an−2
da:
cαn = cαn−1 + cαn−2
α2 = α+1
α2 − α − 1 = 0 √
α = 1±2 5

1± 5
Este cálculo sugiere que c puede ser cualquiera, pero α debe ser 2
. Evi-
dentemente, hay dos soluciones a la recurrencia:
√ ! √ !
1+ 5 1− 5
an = c o an = c
2 2

Hay más soluciones de las sugeridas por nuestra demostración; de hecho,


cualquier combinación lineal de las dos soluciones anteriores también es una
solución. El siguiente teorema establece que esto es cierto, en general, para
recurrencias lineales homogéneas.
Teorema 2.1 Si an = α1n y an = α2n son dos soluciones de una relación de
recurrencia lineal homogénea, entonces
an = k1 α1n + k2 α2n
también es una solución, para cualesquiera constantes k1 y k2 .
Dem. Toda relación de recurrencia lineal homogénea tiene la siguiente es-
tructura:
Xd
an = ci an−i
i=1
Debemos probar que an = k1 α1n + k2 α2n es una solución; es decir, debemos
probar:
d
X
k1 α1n + k2 α2n = ci (k1 α1n−i + k2 α2n−i )
i=1
43

Sustituyendo las dos soluciones an = α1n y an = α2n en la relación de recu-


rrencia obtendremos las dos ecuaciones siguientes:
P
α1n = di=1 ci α1n−i
P
α2n = di=1 ci α2n−i

Multiplicando la primera ecuación por k1 , la segunda por k2 , y sumándolas


obtendremos el resultado deseado. 

El teorema anterior implica que para todos k1 y k2 , la siguiente expresión


es una solución a la relación de recurrencia de Fibonacci:
√ !n √ !n
1+ 5 1− 5
an = k 1 + k2
2 2

Nuestro siguiente objetivo será encontrar una solución que satisfaga las condi-
ciones iniciales a0 = 0 y a1 = 1. Sustituyendo n = 0 y n = 1 en an ,
  √ 0  √ 0
 a0 = k1 1+ 5 + k2 1− 5 = 0
2 2
 √   √ 
 a = k 1+ 5 1 + k 1− 5 1 = 1
1 1 2 2 2

tendremos dos ecuaciones con dos incógnitas:


(
 √  k1 + k2 = 0
√ 
k1 1+2 5 + k2 1−2 5 = 1.

Resolviendo el sistema obtendremos k1 = √15 y k2 = √ −1


5
. Ahora tenemos una
solución completa a la recurrencia de Fibonacci:
√ !n √ !n
1 1+ 5 1 1− 5
an = √ −√
5 2 5 2

Esta solución parece errónea, por aparecer en la expresión el término 5,
si tenemos en cuenta que todos los números de Fibonacci son enteros. Si
sustituimos en la expresión n = 0, 1, 2, · · · comprobaremos que las raı́ces
cuadradas se simplifican y se obtienen los números de Fibonacci.
44

2.3.2. Recurrencias Lineales Homogéneas


El método utilizado para resolver la recurrencia de Fibonacci se puede
utilizar para resolver cualquier recurrencia lineal homogénea. Recordemos
que una relación de recurrencia lineal homogénea tiene la siguiente expresión:

d
X
an = ci an−i
i=1

Sustituyendo la conjetura an = αn dentro de la recurrencia obtendremos:

αn = c1 αn−1 + c2 αn−2 + · · · + cd αn−d

Simplificando y despejando todos los términos a un mismo miembro de la


igualdad obtendremos la llamada ecuación caracterı́stica de la recurrencia.

αd − c1 αd−1 − c2 αd−2 − · · · − cd−1 α − ad = 0

Notemos que los coeficientes de la ecuación caracterı́stica son los mismos que
los coeficientes de la recurrencia. En general, la ecuación caracterı́stica ten-
drá d raı́ces, donde d es el orden de la recurrencia. La solución dependerá de
si las raı́ces son iguales o diferentes.

Raı́ces diferentes
Si la ecuación caracterı́stica tiene d raı́ces todas diferentes r1 , r2 , · · · , rd ,
entonces la solución a la recurrencia tiene la expresión:

an = k1 r1n + k2 r2n + · · · + kd rdn

Notemos que las raı́ces de la ecuación caracterı́stica no necesitan ser reales. Al


final,
√ las partes imaginarias se cancelarán, del mismo modo que se cancelaban
las 5 en la solución de la recurrencia de Fibonacci.
Las constantes k1 , k2 , · · · , kd dependen de las condiciones iniciales. Las
condiciones iniciales generan un sistema de ecuaciones lineales en estas cons-
tantes. Por ejemplo, las condiciones iniciales

a0 = b0 , a1 = b1 , · · · , ad−1 = bd−1 ,
45

dan lugar al sistema:

b0 = k1 + k2 + · · · + k d
b1 = k 1 r1 + k 2 r2 + · · · + k d rd
..
.
bd−1 = k1 r1d−1 + k2 r2d−1 + · · · + kd rdd−1

El cual nos permitirá encontrar un conjunto de constantes, k0 , k1 , · · · , kd−1 ,


soluciones de la recurrencia, las cuales satisfacen las condiciones iniciales.

Raı́ces múltiples
Si la ecuación caracterı́stica de una recurrencia tiene una raı́z múltiple,
entonces la solución es más complicada. La herramienta principal es el sigu-
iente teorema, el cual no demostraremos.
Teorema 2.2 Si r es una raı́z de la ecuación caracterı́stica de una relación
de recurrencia con multiplicidad m, entonces r n , nrn , n2 rn , · · · , nm−1 rn son
soluciones a la recurrencia.
Por ejemplo, si la ecuación caracterı́stica de una recurrencia tiene:

raı́z r1 con multiplicidad 2,


raı́z r2 con multiplicidad 1,
y raı́z r3 con multiplicidad 3,

entonces la solución a la recurrencia tiene la forma:

an = k1 r1n + k2 nr1n + k3 r2n + k4 r3n + k5 nr3n + k6 n2 r3n

Como antes, las constantes dependen de las condiciones iniciales. Cada condi-
ción inicial genera una ecuación lineal, y las constantes se calculan resolviendo
el sistema de ecuaciones lineales resultante.
Para comprender este tipo de recurrencias, veamos un ejemplo.

Ejemplo 2.3

Supongamos que hay un tipo de plantas que nunca mueren, pero únicamente
se reproducen durante el primer año de vida. ¿Cuánto crecerá la población
de la planta?
46

Sea an el número de plantas en el año n. Como condiciones iniciales


tenemos que a0 = 0 y a1 = 1. La población de plantas en el año n es igual a
la población de plantas del año anterior más el número de plantas nuevas. La
población del año anterior es an−1 . Y el número de plantas nuevas este año
es igual al número de plantas nuevas del último año, a saber: an−1 − an−2 .
Ahora podemos construir una relación de recurrencia para la población de
las plantas:
an = an−1 + (an−1 − an−2 )
= 2an−1 − an−2
Y despejando, tendremos la ecuación

an − 2an−1 + an−2 = 0

La ecuación caracterı́stica es α2 − 2α + 1 = 0, la cual tiene la siguiente


raı́z α = 1 con multiplicidad 2. Por lo tanto, la solución a la relación de
recurrencia vendrá dada por:
an = k1 (1)n + k2 n(1)n
= k1 + k2 · n
Las condiciones iniciales a0 = 0 y a1 = 1, generan el siguiente sistema de
ecuaciones lineales:
k1 (1)n + k2 · 0 = 0
k1 + k 2 · 1 = 1
La solución al sistema lineal es k1 = 0 y k2 = 1. Por tanto, la solución a la
recurrencia será:
an = k1 (1)n + k2 n(1)n
= 0+1·n
= n

2.3.3. Recurrencias Lineales No Homogéneas


Estudiaremos ahora las recurrencias lineales no homogéneas con coefi-
cientes constantes.
Definición 2.3
Una relación de recurrencia lineal no homogénea con coeficientes constantes
tiene la forma:
an − c1 an−1 − · · · − cd an−d = f (n)
47

donde c1 , c2 , · · · , cd son constantes, y f (n) 6= 0.

Aunque no existe un método general para resolver todas las recurrencias


no homogéneas, existe una técnica útil cuando la función f (n) tiene cierta
forma. Este método se conoce como el método de los coeficientes indetermina-
dos y se basa en la relación homogénea asociada que se obtiene al reemplazar
f (n) por cero.

Método de los coeficientes indeterminados


Consta de tres pasos, que pasamos a describir a continuación:
1. Resolver la relación de recurrencia homogénea. Reemplazar f (n) por
0 y resolver la relación de recurrencia homogénea resultante (ignorar
las condicones iniciales por ahora). A la solución de la recurrencia ho-
mogénea le llamaremos solución general de la recurrencia homogénea
(H)
asociada, y la denotaremos por an .
2. Encontrar una solución particular. Sustituir f (n) y encontrar una solu-
ción a la recurrencia (de nuevo ignorando las condicones iniciales). A
esta solución le llamaremos solución particular de la recurrencia no
(P )
homogénea, y la denotaremos por an .
3. Encontrar una solución general. Juntar las soluciones particular y ho-
mogénea para obtener la solución general de la recurrencia no ho-
mogénea.
an = an(H) + a(P
n
)

Ahora utilizaremos las condicones iniciales para determinar los factores


constantes por el método habitual de generar y resolver un sistema de
ecuaciones lineales.

Ejemplo 2.4
Sea la relación de recurrencia

a1 = 1
an = 4an−1 + 3n , ∀n ≥ 2,
resolvámosla. Para ello aplicaremos el método de los coeficientes indetermi-
nados.
48

Paso 1: Resolver la relación de recurrencia homogénea


La relación de recurrencia homogénea asociada es

an − 4an−1 = 0.

La ecuación caracterı́stica es α − 4 = 0. La cual tiene una única raı́z α =


4. Por tanto, la solución general de la relación de recurrencia homogénea
(H)
vendrá dada por an = k4n .

Paso 2: Encontrar una solución particular


Debemos encontrar una solución simple a la recurrencia

an = 4an−1 + 3n .
(P )
Esta es la parte complicada. Para obtener an usamos la forma de f (n) para
(P )
sugerir una forma de an . Conjeturemos que hay una solución de la forma
A3n . Sustituyendo esto en la relación de recurrencia tendremos:

an = 4an−1 + 3n
A3n = 4A3n−1 + 3n
3A = 4A + 3
A = −3

Ahora tenemos una solución particular de la relación de recurrencia no ho-


mogénea, an = −3 · 3n = −3n+1 .

Paso 3: Encontrar una solución general


Ahora añadiremos a la solución homogénea la solución particular, para
obtener la solución general de la recurrencia no homogénea:

f (n) = k4n − 3n+1

El valor de la constante k lo obtendremos a partir de la condición inicial


a1 = 1:
1 = k41 − 31+1
= 4A − 9
k = 52
49

La solución a la recurrencia lineal no homogénea es


5
an = 4n − 3n+1 , n ≥ 1.
2

Ejemplo 2.5

Consideremos la siguiente recurrencia lineal no homogénea



a0 = 4, a1 = 7,
an = 4an−1 − 4an−2 + n, ∀n ≥ 3,

y obtengamos su solución.

Paso 1: Encontrar una solución general


La relación de recurrencia homogénea es

an − 4an−1 + 4an−2 = 0.

La ecuación caracterı́stica asociada a la relación de recurrencia homogénea


es α2 − 4α + 4, la cual tiene por solución α = 2 con multiplicidad 2. Por lo
(H)
tanto, la solución homogénea es an = k1 2n + k2 n2n .

Paso 2: Encontrar una solución particular


Ahora necesitamos una solución particular de la relación de recurrencia
no homogénea
an = 4an−1 − 4an−2 + n.
Conjeturamos una solución de la forma A1 n + A0 y la sustituimos en la
recurrencia:
an = 4an−1 − 4an−2 + n
A1 n + A0 = 4(A1 (n − 1) + A0 ) − 4(A1 (n − 2) + A0 ) + n
= 4A1 n − 4A1 + 4A0 − 4A1 n + 8A1 − 4A0 + n
= 4A1 + n
(P )
De donde obtenemos la solución particular an = n + 4.
50

Paso 3: Juntar las soluciones y encontrar las constantes


Juntando la solución general de la relación de recurrencia homogénea y
la solución particular de la no homogénea obtendremos la solución general
de la recurrencia no homogénea:
an = k1 2n + k2 n2n + n + 4
Y a partir de las condiciones iniciales, a0 = 4 y a1 = 7, obtendremos los
valores de las constantes.
a0 = k 1 2 0 + k 2 · 0 · 2 0 + 0 + 4 = 4
a1 = k 1 2 1 + k 2 · 1 · 2 1 + 1 + 4 = 7
De donde k1 = 0 y k2 = 1. En conclusión, la solución general a la recurrencia
no homogénea será
an = n2n + n + 4, n ≥ 0

La parte más complicada al resolver recurrencias no homogéneas es encon-


(P )
trar una solución particular an . A continuación presentaremos unas ideas
que nos facilitarán la obtención de la misma.

Solución particular de la recurrencia no homogénea


Supongamos que la recurrencia tiene la forma:
an − c1 an−1 − c2 an−2 − · · · − cd an−d = f (n)
Un método que funciona en la mayorı́a de los casos es conjeturar una solución
particular con la misma forma que f (n). Esto es, si f (n) es un polinomio de
(P )
grado t, entonces conjeturar que an es un polinomio de grado t. Por ejemplo,
(P )
si f (n) = n2 , entonces conjeturar an = A2 n2 + A1 n + A0 y determinar las
constantes A2 , A1 y A0 sustituyendo y verificando. Análogamente si f (n) es
(P )
exponencial, entonces conjeturar que an es exponencial.
(P )
La Tabla 2.5 resume la relación entre f (n) y an . ¿Cómo utilizaremos
esta tabla?
1. Si f (n) es un múltiplo constante de una de las formas de la primera
columna de la tabla 2.5 y no es solución de la relación homogénea aso-
(P )
ciada a la recurrencia, entonces an toma la correspondiente expresión
que se muestra en la segunda columna de la tabla 2.5.
51

(P )
f (n) an
k, una constante A, una constante
n A1 n + A 0
n2 A 2 n2 + A 1 n + A 0
nt , t ∈ Z + At nt + At−1 nt−1 + · · · + A1 n + A0
rn , r ∈ R Ar n
t n
nr rn (At nt + At−1 nt−1 + · · · + A1 n + A0 )

Figura 2.5: Tabla que proporciona conjeturas a las soluciones particulares


(P )
an en función de f (n)

2. Cuando f (n) es una suma de múltiplos constantes de términos como los


de la primera columna de la tabla, y ninguno de éstos es una solución de
(P )
la relación homogénea asociada, entonces an se forma como la suma
(P )
de los términos correspondientes en la columna encabezada por an .
Por ejemplo, si f (n) = n2 + 3n y ninguno de los sumandos de f (n) es
solución de la relación homogénea asociada, entonces
a(P ) 2 n
n = (A2 n + A1 n + A0 ) + A3 .

3. Las cosas se complican si un sumando f1 (n) de f (n) es un múltiplo


constante de una solución de la relación homogénea asociada. Si es-
(P )
to ocurre, multiplicamos la solución particular an1 correspondiente a
f1 (n), por la mı́nima potencia de n, digamos ns , para la que ningún
sumando de ns f (n) sea una solución de la relación homogénea asocia-
(P )
da. Entonces ns an1 es la parte correspondiente de la solución particular
(P )
an . Ilustremos con un ejemplo la explicación anterior.

Ejemplo 2.6

Consideremos la relación de recurrencia lineal no homogénea


an + 4an−1 + 4an−2 = f (n), n ≥ 2.
La componente homogénea de la solución es
an(H) = k1 (−2)n + k2 n(−2)n
donde k1 y k2 son constantes arbitrarias. En consecuencia,
52

(P )
a) si f (n) = 5(−2)n , entonces an = An2 (−2)n ;
(P )
b) si f (n) = 7n(−2)n , entonces an = Bn3 (−2)n + Cn2 (−2)n ; pero
(P )
c) si f (n) = −11n2 (−2)n , entonces an = Dn4 (−2)n En3 (−2)n +
F n2 (−2)n ;
(P )
Las constantes A, B, C se determinarı́an al sustituir an en la relación
de recurrencia no homogénea dada.
Bibliografı́a

1. [Biggs] Norman L. Biggs, Matemática Discreta, Ed. Vicens Vives, 1994.

2. [Bogart] Kenneth P. Bogart, Matemáticas Discretas, Ed. Limusa, 1996.

3. [Garcia] Garcı́a Merayo F., Matemática Discreta, 2a Edición Ed. Thom-


son, 2006.

4. [Gimbert] Gimbert J. y otros, Apropament a la Teoria de Grafs i als


seus Algorismes, Edicions de la Universitat de Lleida, 1998.

5. [Grassmann] W. K. Grassmann y J. P. Tremblay, Matemática Discreta


y Lógica, Ed. Prentice Hall, 1996.

6. [Grimaldi] Ralph P. Grimaldi, Matemáticas Discreta y Combinatoria,


Ed. Addison-Wesley Iberoamericana, 1997.

7. [Rosen] Rosen K. H., Discrete Mathematics and its Applications, Ed.


MacGraw-Hill International, 1999.

53

También podría gustarte