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 ...
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.