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

Dra. Laura Cruz Reyes<br />

Unidad I COMPLEJIDAD DE ALGORITMOS<br />

3.2.2 Recurrencia <strong>de</strong> peor caso <strong>de</strong>l algoritmo <strong>de</strong> búsqueda binaria<br />

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

Un algoritmo muy popular es el <strong>de</strong> búsqueda binaria. La aplicación <strong>de</strong> este algoritmo<br />

requiere un or<strong>de</strong>namiento previo <strong>de</strong> los datos.<br />

Algoritmo búsquedaBinaria (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 <strong>de</strong>volver -1<br />

3 medio ← ⎣(p + u)/2⎦<br />

4 si k = E(medio) entonces //caso base <strong>de</strong> éxito<br />

5 índice ← medio<br />

6 sino si (k < E[medio]) entonces<br />

7 índice ← búsquedaBinaria(E,p,medio–1,k) //caso progresivo<br />

8 sino<br />

9 índice ← búsquedaBinaria(E,medio+1,u,k) //caso progresivo<br />

10 <strong>de</strong>volver índice<br />

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

Primero la recursividad se activa varias veces porque la llave k no ha sido encontrada en la<br />

posición media (caso recursivo). Finalmente el algoritmo se <strong>de</strong>tiene cuando no existen más<br />

datos para analizar (caso base <strong>de</strong> fracaso).<br />

a) Caso base <strong>de</strong> fracaso : p > u<br />

Cuando todos los elementos <strong>de</strong> E ya han sido analizados, el valor <strong>de</strong> p rebasa al <strong>de</strong> u; así<br />

que el número <strong>de</strong> elementos <strong>de</strong>l segmento <strong>de</strong> búsquedas es cero.<br />

W(n) paso 1 = 0, si n=0<br />

b) Caso progresivo (invocación <strong>de</strong> recursividad): p≤u y E[medio]≠k<br />

En el paso 5 <strong>de</strong>l algoritmo se realiza una comparación no exitosa.<br />

W(n) paso 5 = 1, si n>0<br />

En el paso 7 se realiza una comparación para ubicar la siguiente búsqueda.<br />

W(n) paso 7 = 1, si n>0<br />

En las líneas 8 y 9 las invocaciones recursivas se realizan con subarreglos <strong>de</strong> diferentes<br />

tamaños. Cuando n es par: el segmento izquierdo es n/2 y el <strong>de</strong>recho es (n/2)-1. Cuando n<br />

es impar: los segmentos izquierdo y <strong>de</strong>recho son (n-1)/2. El mayor <strong>de</strong> cada tipo <strong>de</strong> tamaño<br />

es n/2 y (n-1)/2. Ambos tamaños máximos quedan expresados con ⎣n/2⎦.<br />

W(n) paso 8 o paso 9 = W(⎣n/2⎦), si n>0

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

Saved successfully!

Ooh no, something went wrong!