Documentos de Académico
Documentos de Profesional
Documentos de Cultura
de algoritmos recursivos
Arbol de recurrencia
Arbol de recurrencia
B Cada nodo del rbol representa una llamada a la funcin y
se etiqueta con los valores de los argumentos.
B El nodo raz es la primera llamada.
B Cada hoja representa un caso base o solucin trivial.
B Los nodos hijos representan las llamadas de la funcin a s
misma.
B La solucin para un cierto nodo se obtiene mediante
combinacin de las soluciones de sus nodos hijos.
B En ltima instancia, la solucin del nodo raz se obtiene
mediante una combinacin estructurada de soluciones
triviales.
Algoritmos y Estructuras de Datos
Arbol de recurrencia
Ejemplo: serie de Fibonacci
3
fibonacci(4)
2
fibonacci(3)
1
fibonacci(2)
1
fibonacci(1)
fibonacci(2)
1
1
fibonacci(1) fibonacci(1)
0
fibonacci(0)
0
fibonacci(0)
Arbol de recurrencia
B El rbol de recurrencia es dinmico.
B Los nodos se crean y se destruyen a medida que se
efectan nuevas llamadas y se retorna de las mismas.
B En cada instante no existe ms que una parte de una rama
del rbol, formada por los nodos vivos (llamadas
acumuladas en la pila del sistema), de los cuales slo uno
es nodo activo: aqul que ocupa la cima de la pila, es decir,
la llamada que se est ejecutando en ese instante.
B El coste espacial viene determinado por el mximo nmero
de llamadas acumuladas en la pila del sistema durante la
ejecucin del algoritmo.
Algoritmos y Estructuras de Datos
Arbol de recurrencia
Ejemplo: serie de Fibonacci
(*) fibonacci(4)
fibonacci(3)
fibonacci(2)
Arbol de recurrencia
Ejemplo: serie de Fibonacci
fibonacci(4)
(*) fibonacci(3)
fibonacci(2)
fibonacci(2)
fibonacci(1)
Arbol de recurrencia
Ejemplo: serie de Fibonacci
fibonacci(4)
fibonacci(3)
(*) fibonacci(2)
fibonacci(1)
fibonacci(2)
fibonacci(1)
fibonacci(0)
Arbol de recurrencia
Ejemplo: serie de Fibonacci
fibonacci(4)
fibonacci(3)
fibonacci(2)
(*) fibonacci(1)
fibonacci(2)
fibonacci(1)
fibonacci(0)
= 1
Arbol de recurrencia
Ejemplo: serie de Fibonacci
fibonacci(4)
fibonacci(3)
fibonacci(2)
1
fibonacci(2)
fibonacci(1)
(*) fibonacci(0)
= 0
Arbol de recurrencia
Ejemplo: serie de Fibonacci
fibonacci(4)
fibonacci(3)
(*) fibonacci(2)
1 + 0 = 1
fibonacci(2)
fibonacci(1)
Arbol de recurrencia
Ejemplo: serie de Fibonacci
fibonacci(4)
fibonacci(3)
1
fibonacci(2)
(*) fibonacci(1)
= 1
Arbol de recurrencia
Ejemplo: serie de Fibonacci
fibonacci(4)
(*) fibonacci(3)
1 + 1 = 2
fibonacci(2)
Arbol de recurrencia
Ejemplo: serie de Fibonacci
fibonacci(4)
2
(*) fibonacci(2)
fibonacci(1)
fibonacci(0)
Arbol de recurrencia
Ejemplo: serie de Fibonacci
fibonacci(4)
2
fibonacci(2)
(*) fibonacci(1)
= 1
fibonacci(0)
Arbol de recurrencia
Ejemplo: serie de Fibonacci
fibonacci(4)
2
fibonacci(2)
1
(*) fibonacci(0)
= 0
Arbol de recurrencia
Ejemplo: serie de Fibonacci
fibonacci(4)
2
(*) fibonacci(2)
1 + 0 = 1
Arbol de recurrencia
Ejemplo: serie de Fibonacci
(*) fibonacci(4)
2 + 1 = 3
S(n) =
memoria_total(i, n)
i=1
donde:
. m(n): profundidad mxima del rbol de recurrencia
. memoria_total(i, n): memoria total (dinmica y en pila)
atribuible a la llamada que ocupa la posicin i en la rama
de profundidad mxima
n
X
C = Cn (n)
i=1
Ejercicios
1. La funcin de Ackermann se define como sigue:
m+1
n=0
A(n, m) =
A(n 1, 1)
n 6= 0
m=0
m 6= 0
Ejercicios
2. Escrbase una implementacin de A(m, n) en lenguaje C.
Se sugiere utilizar una estructura para almacenar los
valores ya calculados, de manera que no sea necesario
recalcularlos. Esa estructura podra consistir en un array de
n posiciones con los ltimos valores calculados en cada fila
i [0, n], as como el ndice de columna j a que
corresponden. Se sugiere tambin ir acumulando en una
variable global el nmero total de llamadas a la funcin.
Advertencia: no pasar de A(4, 1).
3. Cul es el coste espacial de A(n, m)? Para obtener ms
informacin consltense las entradas dedicadas a la funcin
de Ackermann en mathworld.wolfram.com y en
en.wikipedia.org.
Algoritmos y Estructuras de Datos