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.

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

En el supuesto de que <strong>en</strong> I no se altera el índice j, esta instrucción ti<strong>en</strong>e el<br />

sigui<strong>en</strong>te coste:<br />

m<br />

m + TIj (n)<br />

j=1<br />

donde la cantidad m repres<strong>en</strong>ta las m veces que se increm<strong>en</strong>ta j y la comprobación<br />

de si está <strong>en</strong>tre los extremos inferior y superior.<br />

En el caso de que el cuerpo del bucle consuma un tiempo fijo (indep<strong>en</strong>di<strong>en</strong>tem<strong>en</strong>te<br />

del valor de j), la complejidad del bucle resulta ser m(1 + TI(n)).<br />

En los bucles while y repeat no hay una regla g<strong>en</strong>eral, ya que no siempre<br />

se conoce el número de vueltas que da, y el coste de cada iteración no siempre es<br />

uniforme. Sin embargo, con frecu<strong>en</strong>cia se puede acotar superiorm<strong>en</strong>te, acotando<br />

precisam<strong>en</strong>te el número de vueltas y el coste de las mismas.<br />

Subprogramas<br />

El coste de ejecutar un subprograma no recursivo se deduce con las reglas<br />

descritas. Por el contrario, <strong>en</strong> caso de haber recursión, hay que det<strong>en</strong>erse a distinguir<br />

<strong>en</strong>tre los casos básicos (los parámetros que no provocan nuevas llamadas<br />

recursivas) y los recurr<strong>en</strong>tes (los que sí las produc<strong>en</strong>). Considérese como ejemplo<br />

la versión recursiva de la función factorial (tomada del apartado 10.1):<br />

function Fac (n: integer): integer;<br />

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

{Dev. n!}<br />

begin<br />

if n = 0 th<strong>en</strong><br />

Fac:= 1<br />

else<br />

Fac:= n * Fac(n-1)<br />

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

Para calcular la complejidad TFac(n) del algoritmo se debe t<strong>en</strong>er <strong>en</strong> cu<strong>en</strong>ta<br />

que, para el caso básico (n = 0), el coste es constante, Ω(1),<br />

TFac(0) = 1<br />

y para los recurr<strong>en</strong>tes (n > 0), el coste es de una cantidad constante, Ω(1) más<br />

el de la llamada subsidiaria provocada:<br />

En resum<strong>en</strong>,<br />

TFac(n) =<br />

TFac(n) = 1 + TFac(n − 1)<br />

<br />

1 si n = 0<br />

1 + TFac(n − 1) si n > 0

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

Saved successfully!

Ooh no, something went wrong!