Sunteți pe pagina 1din 3

Algoritmos de Busqueda secuencial y Binaria

La bsqueda de un elemento dentro de un array es una de las operaciones ms


importantes en el procesamiento de la informacin, y permite la recuperacin de datos
previamente almacenados. El tipo de bsqueda se puede clasificar como interna o externa,
segn el lugar en el que est almacenada la informacin (en memoria o en dispositivos
externos). Todos los algoritmos de bsqueda tienen dos finalidades:

Determinar si el elemento buscado se encuentra en el conjunto en el que se busca.


Si el elemento est en el conjunto, hallar la posicin en la que se encuentra.

Bsqueda lineal (secuencial)


Consiste en recorrer y examinar cada uno de los elementos del array hasta
encontrar el o los elementos buscados, o hasta que se han mirado todos los
elementos del array.
Este es el mtodo de bsqueda ms lento, pero si nuestra informacin se
encuentra completamente desordenada es el nico que nos podr ayudar a
encontrar el dato que buscamos. El siguiente algoritmo ilustra un esquema de
implementacin del algoritmo de bsqueda secuencial:

for(i=j=0;i<N;i++)
if(array[i]==elemento)
{
solucion[j]=i;
j++;
}

complejidad de la bsqueda secuencial


La complejidad de la bsqueda secuencial diferencia entre el comportamiento en el peor y mejor
caso. El mejor caso se encuentra cuando aparece una coincidencia en el primer elemento de la
lista, por lo que el tiempo de ejecucin es O(1). El peor caso se produce cuando el elemento no
est en la lista o se encuentra al final de ella. Esto requiere buscar en todos los n trminos, lo que
implica una complejidad de O(n).
El caso medio requiere un poco de razonamiento probabilista. Para el supuesto de una lista
aleatoria es probable que ocurra una coincidencia en cualquier posicin. Despus de la ejecucin
de un nmero grande de bsquedas, la posicin media para una coincidencia es el elemento
central n/2. El elemento central se obtiene despus de n/2 comparaciones, que definen el coste
esperado de la bsqueda. Por esta razn, se dice que la prestacin media de la bsqueda secuencial es
O(n).

Bsqueda binaria (dicotmica)

Si los elementos sobre los que se realiza la bsqueda estn ordenados, entonces podemos
utilizar un algoritmo de bsqueda mucho ms rpido que el secuencial, la bsqueda binaria.
El algoritmo consiste en reducir paulatinamente el mbito de bsqueda a la mitad de los
elementos, basndose en comparar el elemento a buscar con el elemento que se encuentra
en la mitad del intervalo y en base a esta comparacin:

Si el elemento buscado es menor que el elemento medio, entonces sabemos que el


elemento est en la mitad inferior de la tabla.

Si es mayor es porque el elemento est en la mitad superior.

Si es igual se finaliza con xito la bsqueda ya que se ha encontrado el elemento.


Se puede aplicar tanto a datos en listas lineales (Vectores, Matrices, etc.) como en rboles
binarios de bsqueda. Los prerrequisitos principales para la bsqueda binaria son:

La lista debe estar ordenada en un orden especifco de acuerdo al valor de la llave.

Debe conocerse el nmero de registros.

La bsqueda binaria consiste en dividir el array por su elemento medio en dos subarrays ms
pequeos, y comparar el elemento con el del centro. Si coinciden, la bsqueda se termina. Si
el elemento es menor, debe estar (si est) en el primer subarray, y si es mayor est en el
segundo. Por ejemplo, para buscar el elemento 3 en el array {1,2,3,4,5,6,7,8,9} se realizaran
los siguientes pasos:

Se toma el elemento central y se divide el array en dos:


{1,2,3,4}-5-{6,7,8,9}

Como el elemento buscado (3) es menor que el central (5), debe estar en el primer subarray:
{1,2,3,4}

Se vuelve a dividir el array en dos:


{1}-2-{3,4}

Como el elemento buscado es mayor que el central, debe estar en el segundo subarray: {3,4}
Se vuelve a dividir en dos:
{}-3-{4}

Como el elemento buscado coincide con el central, lo hemos encontrado.

Si al final de la bsqueda todava no lo hemos encontrado, y el subarray a dividir est vacio


{}, el elemento no se encuentra en el array. La implementacin sera:
int desde,hasta,medio,elemento,posicion; // desde y hasta indican los
lmites del array que se est mirando.
int array[N];
// Dar valor a elemento.
for(desde=0,hasta=N-1;desde<=hasta;)
{
if(desde==hasta) // si el array slo tiene un elemento:
{
if(array[desde]==elemento) // si es la solucin:
posicion=desde; // darle el valor.
else // si no es el valor:
posicion=-1; // no est en el array.
break; // Salir del bucle.
}
medio=(desde+hasta)/2; // Divide el array en dos.
if(array[medio]==elemento) // Si coincide con el central:
{
posicion=medio; // ese es la solucin
break; // y sale del bucle.
}
else
if(array[medio]>elemento) // si es menor:
hasta=medio-1; // elige el array de la izquierda.
else // y si es mayor:
desde=medio+1; // elige el array de la derecha.
}

anlisis de la bsqueda binaria


El mejor caso se presenta cuando una coincidencia se encuentra en el punto central de la lista.
En este caso, la complejidad es O(1), dado que slo se realiza una prueba de comparacin de
igualdad. La complejidad del peor caso es O(log2n), que se produce cuando el elemento no est
en la lista o el elemento se encuentra en la ltima comparacin. Se puede deducir intuitivamente
esta complejidad. El peor caso se produce cuando se debe continuar la bsqueda y llegar a una
sublista de longitud 1. Cada iteracin que falla debe continuar disminuyendo la longitud de la
sublista por un factor de 2. El tamao de las sublistas es:
n n/2 n/4 n/8 ... 1

La divisin de sublistas requiere m iteraciones, y en cada iteracin el tamao de la sublista se


reduce a la mitad. La sucesin de tamaos de las sublistas hasta una sublista de longitud 1 ser:
n n/2 n/22 n/23 n/24 .... n/2m
siendo n/2m = 1. Tomando logaritmos en base 2 a la expresin anterior tendramos:
n = 2m
m = log2 n
Por esa razn, la complejidad del peor caso es O(log2n). Cada iteracin requiere una operacin de
comparacin:
Total comparaciones 1 + log2

http://artemisa.unicauca.edu.co/~nediaz/EDDI/cap02.htm

S-ar putea să vă placă și