| |
Métodos de Búsqueda

Métodos de
Búsqueda Binaria |
El método de búsqueda binaria divide el total de los elementos en dos,
comparando el elemento buscado con el central, en caso de no ser iguales, se
determina si el elemento buscado es menor o mayor al central, para
determinar si la búsqueda continua del lado izquierdo (menor) o derecho
(mayor) del central, repitiendo el mismo proceso de división y comparación,
hasta encontrar el elemento buscado o que la división ya no sea posible.
Debemos destacar
que este método de búsqueda solo funciona con estructuras de datos
previamente ordenadas, dividiendo cada vez a la mitad el proceso de
búsqueda, lo que hace que el método sea más eficiente.
Ejemplo. Si
tenemos una estructura ordenada 0, 1, 2, 3, 5, 5, 5, 7, 8, 9 y estamos
buscando el número 5, el resultado de la búsqueda nos mostraría la
posicione 4 y el proceso
terminaría ya que el elemento buscado no es diferente al que esta en la
posición central.
Elementos |
0 |
1 |
2 |
3 |
5 |
5 |
5 |
7 |
8 |
9 |
Posiciones |
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
Posiciones donde
encontró el número 5 |
i |
|
|
|
√ |
|
|
|
|
F |
Este proceso
debe sumar la posición inicial y la final, dividiendo el resultado de la
suma entre dos para obtener la posición central generada por el cociente de
la división, en este caso es (0+9)/2 = 4, esta posición se compara con el
elemento que estamos buscando y como son iguales la búsqueda se detiene
mostrando la posición donde lo encontró.
Ejercicio. Crear
un programa que aplique una búsqueda binaria de un dato dentro de un arreglo
de elementos ordenados y presenta la posición donde encontró el dato.
¿Podemos hacer algo mejor? Trataremos de aprovechar el
hecho de que la lista está ordenada y vamos a hacer algo distinto: nuestro
espacio de búsqueda se irá achicando a segmentos cada vez menores de la
lista original. La idea es descartar segmentos de la lista donde el valor
seguro que no puede estar:
-
Consideramos como segmento inicial
de búsqueda a la lista completa.
-
Analizamos el
punto medio del segmento (el valor central), si es el valor buscado,
devolvemos el índice del punto medio.
-
Si el valor
central es mayor al buscado, podemos descartar el segmento que está
desde el punto medio hacia la a derecha.
-
Si el valor
central es menor al buscado, podemos descartar el segmento que está
desde el punto medio hacia la izquierda.
-
Una vez
descartado el segmento que no nos interesa, volvemos a analizar el
segmento restante, de la misma forma.
-
Si en algún
momento el segmento a analizar tiene longitud 0 o negativa significa que el valor
buscado no se encuentra en la lista.
Para señalar la porción del segmento
que se está analizando a cada paso, utilizaremos dos variables (izq y der )
que contienen la posición de inicio y la posición de fin del segmento que se
está considerando. De la misma manera usaremos la varible medio para contener la
posición del punto medio del segmento.
En el gráfico que se incluye a
continuación, vemos qué pasa cuando se busca el valor 18 en la lista [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23] .
¿Cuál es
el siguiente índice que intentamos? El promedio de 13 y 24
es 18.5, el cual redondeamos hacia abajo a 18, puesto que un
índice de un arreglo debe ser un entero. Encontramos que primes[18] es 67.
El algoritmo
de la búsqueda binaria se detiene en este punto, ya que ha
encontrado la respuesta. Solo tomó dos intentos, en lugar de
19 intentos que le hubiera tomado a la búsqueda lineal. Lo
puedes volver a ver paso por paso en la siguiente
visualización:
|

| |
*
|