22.06.2015 Views

Capítulo 3 Complejidad de algoritmos recursivos ⎩ ⎨ ⎧ = > − = 0 1 0 ...

Capítulo 3 Complejidad de algoritmos recursivos ⎩ ⎨ ⎧ = > − = 0 1 0 ...

Capítulo 3 Complejidad de algoritmos recursivos ⎩ ⎨ ⎧ = > − = 0 1 0 ...

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

Instituto Tecnológico <strong>de</strong> Ciudad Ma<strong>de</strong>ro<br />

Unidad I COMPLEJIDAD DE ALGORITMOS<br />

Dra. Laura Cruz Reyes<br />

Capítulo 3 <strong>Complejidad</strong> <strong>de</strong> <strong>algoritmos</strong> <strong>recursivos</strong><br />

Si la operación básica es el número <strong>de</strong> multiplicaciones, entonces la recurrencia que mi<strong>de</strong> el<br />

<strong>de</strong>sempeño <strong>de</strong> algoritmo Factorial se obtiene i<strong>de</strong>ntificando sus casos y escribiendo las<br />

reglas que <strong>de</strong>terminan cada caso y las funciones <strong>de</strong> <strong>de</strong>sempeño correspondientes. En el caso<br />

base (n=0) no se realiza ninguna multiplicación y en el caso progresivo (n>0) se realiza una<br />

multiplicación más las multiplicaciones que el algoritmo ejecuta al ser llamado recursivamente<br />

con un valor <strong>de</strong> n-1, este último calculo se <strong>de</strong>nota con T(n-1).<br />

⎧0 si n = 0 (caso base)<br />

Tn ( ) = ⎨<br />

⎩1 + Tn ( − 1) si n > 0 (caso progresivo)<br />

Antes se expandió la recurrencia F(n) para <strong>de</strong>terminar el factorial <strong>de</strong> 4, ahora se expan<strong>de</strong> la<br />

recurrencia T(n) para calcular el número <strong>de</strong> multiplicaciones.<br />

T(4) = 1 + T(3)=4<br />

T(3) = 1 + T(2)=3<br />

T(2) = 1 + T(1)=2<br />

T(1) = 1 + T(0)=1<br />

T(0) = 0<br />

T(4) = 1 + 1 +1 +1 = 4<br />

Se pue<strong>de</strong> observar que para calcular el factorial <strong>de</strong> 4, el algoritmo realiza cuatro<br />

multiplicaciones: Factorial(4)=4·3·2·1·1. Este número <strong>de</strong> multiplicaciones coinci<strong>de</strong> con<br />

el obtenido por la recurrencia T(4)=4.<br />

3.2.1 Recurrencia <strong>de</strong> peor caso <strong>de</strong>l algoritmo <strong>de</strong> búsqueda secuencial recursivo<br />

Una versión ineficiente <strong>de</strong>l algoritmo <strong>de</strong> búsqueda secuencial es su implementación recursiva. A<br />

pesar <strong>de</strong> sus limitaciones, esta versión es sencilla y simplifica la introducción <strong>de</strong> los casos <strong>de</strong> un<br />

problema al análisis <strong>de</strong> <strong>algoritmos</strong> <strong>recursivos</strong>.<br />

Algoritmo busquedaSecRec(E,p,u,k)<br />

Entradas: Arreglo E, e índices p y u que <strong>de</strong>limitan el subarreglo a<br />

or<strong>de</strong>nar contenido en E[p,...,u].<br />

Salidas: E[p,...,u] en or<strong>de</strong>n ascen<strong>de</strong>nte.<br />

1 si p>u entonces //caso base <strong>de</strong> fracaso<br />

2 respuesta = -1<br />

3 sino si (E[p]=k) entonces //caso base <strong>de</strong> éxito<br />

4 respuesta ← p<br />

5 sino<br />

6 respuesta ← busquedaSecRec(E,p+1,u,k)//caso progresivo<br />

7 <strong>de</strong>volver respuesta<br />

El peor <strong>de</strong>sempeño <strong>de</strong>l algoritmo busquedaSecRec suce<strong>de</strong> cuando la búsqueda fracasa.<br />

Este comportamiento se pue<strong>de</strong> i<strong>de</strong>ntificar fácilmente en el algoritmo. Primero la recursividad se<br />

activa varias veces porque la llave k no ha sido encontrada (caso progresivo). Finalmente el<br />

algoritmo se <strong>de</strong>tiene cuando no existen más datos para analizar (caso base <strong>de</strong> fracaso). A<br />

continuación se <strong>de</strong>talla el análisis <strong>de</strong>l peor caso.

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

Saved successfully!

Ooh no, something went wrong!