Anda di halaman 1dari 4

Universidad Nacional de Trujillo Computacin

Ingeniera de Sistemas Mtodos de Bsqueda


Ing. Zoraida Yanet Vidal Melgarejo, Mg. - 1 -
MTODOS DE BSQUEDA


1. Introduccin.

Un uso importante de las computadoras es la bsqueda de datos. Si los datos no pueden
cambiar (por ejemplo, si estn almacenados en un CD-ROM), decimos que son estticos. Una
bsqueda esttica accede a datos estticos. El problema de la bsqueda esttica se formula como
sigue:

Problema de la Bsqueda Esttica.
Dado un entero X y un vector A, devolver la posicin de X en A o una indicacin de que no
est presente. Si X aparece ms de una vez, devolver cualquier aparicin. El vector A nunca ser
modificado.

Un ejemplo de bsqueda esttica es buscar a una persona en la gua telefnica. La eficiencia de
un algoritmo de bsqueda esttica depende de si el vector donde se busca est o no ordenado. En el
caso de la gua telefnica, buscar por apellido es fcil, pero buscar por nmero de telfono es algo
desesperante. A continuacin se desarrollan algoritmos que solucionan el problema de la bsqueda
esttica.

2. Bsqueda Secuencial.

Cuando el vector no est ordenado, se tienen pocas alternativas fuera de una bsqueda secuencial
lineal, recorriendo todo el vector secuencialmente hasta que se encuentre el elemento buscado. La
complejidad del algoritmo se analiza de tres formas. Primero, considerando el caso de una bsqueda
sin xito. Luego el caso de una bsqueda con xito. Finalmente, el caso medio de una bsqueda con
xito. El analizar de forma separada los casos en los que la bsqueda tiene xito es tpico. Tambin es
tpico el que las bsquedas sin xito consuman ms tiempo que las bsquedas con xito. Para la
bsqueda secuencial el anlisis es muy fcil.

Una bsqueda sin xito requiere examinar cada uno de los elementos del vector, as que el
tiempo ser proporcional al nmero de elementos. En el peor caso, una bsqueda con xito tambin
requiere examinar cada elemento del vector porque podramos no encontrar el elemento hasta la
ltima posicin. Luego el tiempo de ejecucin en el caso peor es tambin proporcional al nmero de
elementos. En promedio, sin embargo, slo se busca en la mitad del vector.

El algoritmo de la bsqueda secuencial se muestra en la siguiente figura.

Algoritmo Bsqueda secuencial(a[]:entero,
n:entero, buscado:entero): entero
Inicio
pos: entero
pos 0
Hacer
Si a[pos] = buscado entonces
retornar pos
FinSi
pos pos + 1
Mientras pos < n
retornar -1
Fin

Figura 1. Algoritmo de Bsqueda Secuencial.


Universidad Nacional de Trujillo Computacin
Ingeniera de Sistemas Mtodos de Bsqueda
Ing. Zoraida Yanet Vidal Melgarejo, Mg. - 2 -

3. Bsqueda Binaria.

Si el vector de entrada est ordenado, entonces existe una alternativa a la bsqueda secuencial, la
bsqueda binaria. La bsqueda binaria se realiza desde la mitad del vector, en vez de desde el final.

En todo momento, mantendremos dos variables inicio y fin, que delimitan la parte del
vector en la que el elemento, si aparece debe encontrarse. Inicialmente, el rango es desde 0 hasta N-
1. Si inicio es mayor que fin, sabemos que el elemento no est presente. En otro caso, igualamos
la variable medio al punto medio en el rango actual y comparamos el elemento que estamos
buscando con el elemento en la posicin medio. Si hay xito, hemos acabado. Si el elemento que
estamos buscando es menor que el elemento en la posicin medio entonces debera estar en el rango
desde inicio hasta medio 1. Si es mayor, entonces debe encontrarse en el rango desde medio
+ 1 hasta fin. En cada iteracin se modifica el rango posible, esencialmente dividindolo por la
mitad.

Para valores de N razonablemente grandes, la bsqueda binaria se ejecuta de forma ms eficiente
que la bsqueda secuencial. Por ejemplo, si N es 1000, la bsqueda secuencial requiere en promedio
500 comparaciones aproximadamente. En media, la bsqueda binaria requiere 8 iteraciones en una
bsqueda con xito. Ya que cada iteracin utiliza 1.5 comparaciones en promedio (unas veces 1 y
otras 2), el total es de 12 comparaciones para una bsqueda con xito. La bsqueda binaria mejora
an ms en el caso peor o cuando las bsquedas no tienen xito.

El algoritmo de la bsqueda binaria se muestra en la siguiente figura.

Algoritmo Bsqueda binaria(a[]:entero, n:entero,
buscado:entero): entero
Inicio
inicio, fin, medio: entero
inicio 0
fin n 1
Mientras inicio <= fin hacer
medio (inicio + fin) / 2
Si a[medio] < buscado entonces
inicio medio + 1
Sino
Si a[medio] > buscado entonces
fin medio - 1
Sino
retornar medio
FinSi
FinSi
FinMientras
retornar -1
Fin.

Figura 2. Algoritmo de Bsqueda Binaria que distingue tres casos.

Si queremos hacer la bsqueda binaria an ms rpida, tenemos que hacer ms ajustado el bucle
ms interno. Una estrategia posible es eliminar la comprobacin (implcita) en el caso de una
bsqueda con xito del bucle ms interno y reducir el rango a un solo elemento en todos los casos.
Entonces podemos utilizar una comprobacin ms fuera del bucle para determinar si el elemento
buscado est en el vector o no. Si el elemento que estamos buscando no es mayor que el elemento en
la posicin medio, entonces est en el rango que incluye la posicin medio. Cuando salimos del
bucle, el rango es 1, y podemos comprobar si est ah el elemento buscado.

Universidad Nacional de Trujillo Computacin
Ingeniera de Sistemas Mtodos de Bsqueda
Ing. Zoraida Yanet Vidal Melgarejo, Mg. - 3 -
Para valores N pequeos, como valores menores que 6, puede no merecer la pena la bsqueda
binaria. Utiliza ms o menos el mismo nmero de comparaciones para una bsqueda con xito tpica,
pero tiene la sobrecarga de la modificacin del rango en cada iteracin.

En realidad, las ltimas iteraciones de la bsqueda binaria progresan lentamente. Uno puede
adoptar una estrategia hbrida en la cual el bucle de bsqueda binaria termina cuando el rango es
pequeo, aplicndose entonces una bsqueda secuencial para terminar.

El algoritmo de la bsqueda binaria mejorada se muestra en la siguiente figura.

Algoritmo Bsqueda binaria(a[]:entero, n:entero,
buscado:entero): entero
Inicio
inicio, fin, medio: entero
Si n = 0 entonces
retornar -1
FinSi
inicio 0
fin n 1
Mientras inicio < fin hacer
medio (inicio + fin) / 2
Si a[medio] < buscado entonces
inicio medio + 1
Sino
fin medio
FinSi
FinMientras
Si a[inicio] = buscado entonces
retornar inicio
FinSi
retornar -1
Fin.

Figura 3. Algoritmo de Bsqueda Binaria que distingue dos casos.


4. Bsqueda Interpolada.

La bsqueda binaria es muy rpida sobre un vector esttico ordenado. De hecho, en tan rpida
que difcilmente podramos usar algo mejor. Sin embargo, un mtodo de bsqueda esttica que es en
ocasiones ms rpido es la bsqueda interpolada.

Para que la bsqueda interpolada sea prctica, deben satisfacerse dos hiptesis:

a. Cada acceso debe ser muy costoso comparado con una instruccin tpica. Por ejemplo,
el vector podra estar en un disco en vez de en memoria principal, y cada comparacin
requiere un acceso a disco.
b. Los datos adems de estar ordenados deben estar tambin uniformemente distribuidos.
Por ejemplo, una gua telefnica est uniformemente distribuida. Por el contrario, si los
elementos de la entrada son {1, 2, 4, 8, 16, }, entonces la distribucin no sera
uniforme.

Estas hiptesis son bastante restrictivas, de modo que es posible que en la prctica nunca nos
convenga utilizar una bsqueda interpolada. Pero es interesante ver que hay ms de una forma de
resolver un problema, y que ningn algoritmo, incluso la clsica bsqueda binaria, es el mejor en
todas las situaciones.

Universidad Nacional de Trujillo Computacin
Ingeniera de Sistemas Mtodos de Bsqueda
Ing. Zoraida Yanet Vidal Melgarejo, Mg. - 4 -
La idea bsica de la bsqueda interpolada consiste en que estamos dispuestos a invertir ms
tiempo si con ello conseguimos una suposicin ms certera con respecto a donde podra encontrarse
el elemento. La bsqueda binaria utiliza siempre el punto medio. Sin embargo, sera absurdo buscar a
Pablo lvarez en la mitad de la gua telefnica; algn sitio cercano al principio sera claramente ms
apropiado. Por tanto, en vez de medio, utilizamos prximo para indicar el prximo elemento al que
accederemos.

Veamos ahora un ejemplo de hasta qu punto la bsqueda interpolada podra ser buena.
Supongamos que el rango de bsqueda contiene 1000 elementos, el elemento menor en el rango es
1000, el mayor es 1000000, y estamos buscando el valor 12000. Si los elementos estn
uniformemente distribuidos, entonces podemos esperar encontrarlo en algn lugar cercano al
decimosegundo elemento. La frmula aplicable es:

( )
(

+ = 1
] [ ] [
] [
inicio fin
inicio a fin a
inicio a x
inicio prximo


El sustraer 1 es un ajuste tcnico que se ha mostrado positivo en la prctica. Claramente, este
clculo es ms costoso que el clculo de la bsqueda binaria. Involucra una divisin extra (la divisin
por 2 en la bsqueda binaria es simplemente un desplazamiento de un bit, igual que dividir por 10 es
sencillo para las personas), una multiplicacin y cuatro restas. Estos clculos deben ser realizados
utilizando operaciones de punto flotante. Una iteracin podra incluso ser ms lenta que la bsqueda
binaria completa. Sin embargo, si el coste de estas operaciones es insignificante comparado con el
coste de acceder a un elemento, entonces no es importante; slo debemos preocuparnos del nmero
de iteraciones.

En el caso peor, cuando los datos no estn uniformemente distribuidos, el tiempo de ejecucin
podra ser lineal y todos los elementos podran tener que ser examinados.

Anda mungkin juga menyukai