Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Las relaciones de recurrencia para la secuencia {an} es una ecuacin que nos permite
expresar {an} en trminos de uno o ms de los trminos previos (a0,a1,a2.an-1) para
todos los enteros donde este no es negativo.
Una secuencia es llamada relacin de recurrencia si sus trminos satisfacen la relacin
de recurrencia.
Cmo resolver una relacin de recurrencia?
Mtodo Geomtrico
Mtodo Linear
Ejemplo
Cuando dividimos ambos lados por rn-k y reacomodamos para que la ecuacin
resultante sea igualada a 0, obtenemos la siguiente ecuacin:
rk c1rk-1 c2rk-2 . ck-1r ck = 0. (ecuacin caracterstica)
La conexin con el anlisis de algoritmos estriba que la forma que se ha adoptado para
medir las complejidades, utiliza funciones cuyo dominio son los nmeros naturales, o
en otras palabras sucesiones. Si el algoritmo es recurrente, es de esperarse que las
complejidades, como funciones que estiman la demanda de recursos a lo largo de la
ejecucin, sean sucesiones que satisfacen ciertas ecuaciones de recurrencia.
En un algoritmo recursivo la funcin (n) que establece su complejidad viene dada por
una ecuacin de recurrencia. Una ecuacin de recurrencia nos permiten indicar el
tiempo de ejercicios para los distintos casos del algoritmo recursivo (casos base y
recursivo)
Algoritmo Recursivo
Ventajas:
-Algunos problemas son esencialmente recursivos, por lo cual su implementacin se
facilita mediante un algoritmo de naturaleza recursiva, sin tener que cambiarlo a un
mtodo iterativo, por ejemplo.
-En algunas ocasiones el cdigo de un algoritmo recursivo es muy pequeo
Desventajas
-Puede llegar a utilizar grandes cantidades de memoria en un instante, pues implementa
una pila cuyo tamao crece linealmente con el nmero de recursiones necesarias en el
algoritmo. Si los datos en cada paso es muy grande, podemos requerir grandes
cantidades de memoria.
Cmo podemos resolver un algoritmo recursivo?
Antes de programar cualquier funcin recursiva es necesario decidir cul ser el caso
base y cul el caso recursivo. Para esta funcin, tomaremos n = 0 como el caso base, en
el que devolveremos 1; y el caso recursivo tendr dos partes, correspondientes a los dos
posibles grupos de valores de n.
def potencia(b,n):
Devuelve: b\^n.
# Caso base
if n <= 0:
return 1
# n par
if n % 2 == 0:
# n impar
else:
>>> potencia(2,10)
1024
>>> potencia(3,3)
27
>>> potencia(5,0)
1
El orden de las llamadas, haciendo un seguimiento simplificado de la funcin ser:
potencia(2,10)
pot = potencia(2,5) # b 2 n 10
pot = potencia(2,0) # b 2 n 1
return 1 #b2n0
return 1 * 1 * 2 # b 2 n 1 pot 1
return 2 * 2 # b 2 n 2 pot 2
return 4 * 4 * 2 # b 2 n 5 pot 4
return 32 * 32 # b 2 n 10 pot 32
Se puede ver, entonces, que para calcular 2^10 se realizaron 5 llamadas a potencia,
mientras que en la implementacin ms sencilla se realizaban 10 iteraciones. Y esta
optimizacin ser cada vez ms importante a medida que aumenta n, por ejemplo,
para n = 100 se realizarn 8 llamadas recursivas, para n = 1000, 11 llamadas.