09.05.2013 Views

Algoritmos y Programación en Pascal

Algoritmos y Programación en Pascal

Algoritmos y Programación en Pascal

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

418 Capítulo 18. Complejidad algorítmica<br />

Por consigui<strong>en</strong>te, cuando un subprograma recursivo origine varias llamadas,<br />

sólo importará la llamada que provoque una mayor profundidad,<br />

pudiéndose despreciar las demás.<br />

Es un error frecu<strong>en</strong>te comparar la complejidad <strong>en</strong> espacio de los algoritmos<br />

recursivos con el número total de llamadas.<br />

Ejemplo: sucesión de Fibonacci<br />

La sucesión de los números de Fibonacci (véase el apartado 10.3.1) se puede<br />

hallar mediante la sigui<strong>en</strong>te función recursiva:<br />

function Fib(num: integer): integer;<br />

{PreC.: num ≥ 0}<br />

{Dev. fibnum}<br />

begin<br />

if (num = 0) or (num = 1) th<strong>en</strong><br />

Fib:= 1<br />

else<br />

Fib:= Fib(num-1) + Fib(num-2)<br />

<strong>en</strong>d; {Fib}<br />

El coste <strong>en</strong> espacio, S(n), del algoritmo descrito es proporcional a la profundidad<br />

del árbol de llamadas; es decir, S(n) = 1 <strong>en</strong> los casos triviales n = 0<br />

y n = 1; <strong>en</strong> los no triviales (n ≥ 2), Fib(n) origina dos llamadas subsidiarias,<br />

Fib(n-1) y Fib(n-2), la primera de las cuales es más profunda. Por lo tanto,<br />

<strong>en</strong> estos casos,<br />

S(n) = 1 + máx(S(n − 1), S(n − 2)) = 1 + S(n − 1)<br />

En resumidas cu<strong>en</strong>tas, S(n) = n, lo que indica que esta función ti<strong>en</strong>e un requerimi<strong>en</strong>to<br />

de espacio lineal con respecto a su argum<strong>en</strong>to n.<br />

18.4 Útiles matemáticos<br />

Ya se ha visto <strong>en</strong> los ejemplos anteriores que, cuando se trabaja con funciones<br />

o procedimi<strong>en</strong>tos recursivos, la complejidad <strong>en</strong> el tiempo T (n) va a v<strong>en</strong>ir dada<br />

<strong>en</strong> función del valor de T <strong>en</strong> puntos m<strong>en</strong>ores que n. Por ello es útil saber cómo<br />

calcular términos g<strong>en</strong>erales de sucesiones <strong>en</strong> las que los términos se defin<strong>en</strong> <strong>en</strong><br />

función de los valores anteriores (sucesiones recurr<strong>en</strong>tes). En este apéndice se<br />

tratan los casos más comunes que pued<strong>en</strong> surgir a la hora del cálculo de la<br />

complejidad <strong>en</strong> el tiempo de funciones o procedimi<strong>en</strong>tos recursivos.

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!