Javascript De Búsqueda Binaria

| | | | | | | | | | | | | | | | | | |

Còmo codificar una b√∫squeda binaria en JavaScript

Los algoritmos de b√∫squeda hacen la vida mucho más fácil como programador. Hacerlo facilita la b√∫squeda de un elemento en particular dentro de un conjunto de datos de decenas, cientos o miles de elementos.

Una de las formas más populares de b√∫squeda es la b√∫squeda binaria. Esta b√∫squeda encuentra rápidamente un elemento en una matriz. Cada vez que la b√∫squeda examina un elemento, reduce a la mitad el n√∫mero de elementos que quedan por buscar.

En esta guìa, vamos a hablar sobre qué son las b√∫squedas binarias y còmo trabajan ellos. Luego, implementaremos una b√∫squeda binaria usando dos enfoques diferentes: iterativo y recursivo.

Construyamos un algoritmo de b√∫squeda binaria en JavaScript !

¿Qué es una b√∫squeda binaria?

Una b√∫squeda binaria es un algoritmo informático que busca un elemento en una matriz ordenada.

Comienza en el medio de una matriz y verifica si el elemento del medio es menor, igual o mayor que el n√∫mero que está buscando.

Si el n√∫mero es más peque√±o, el algoritmo sabe que debe seguir buscando en la mitad izquierda de la matriz, donde están los n√∫meros más peque√±os; si el n√∫mero es mayor, el algoritmo se centrará en la mitad derecha de la matriz. Las b√∫squedas binarias solo funcionan en listas ordenadas.

Las b√∫squedas binarias son más eficientes que las b√∫squedas lineales. Esto se debe a que cada vez que se realiza una b√∫squeda, el n√∫mero de elementos que quedan por buscar en la lista se reduce a la mitad.

Còmo usar un binario B√∫squeda

Una b√∫squeda binaria es fácil de entender una vez que la dominas.

Antes de implementar un algoritmo de b√∫squeda binaria, veamos un paso a -paso. Vamos a encontrar el n√∫mero "9" en una lista. Comencemos con una lista ordenada:

2 6 8 9 10

Primero, necesitamos encontrar el n√∫mero del medio y asignarlo a una variable. Esto se encuentra calculando la suma del primer y √∫ltimo n√∫mero y dividiéndolo por dos. Llamaremos a esta variable " middle & rdquo ;:

Start
Medio
Final
2 6 8 9 10

8 es nuestro n√∫mero medio. Luego, podemos comparar el n√∫mero del medio con el que estamos buscando. Si el n√∫mero del medio es igual al que estamos buscando, nuestra b√∫squeda puede detenerse.

En este ejemplo, 8 no es igual a 9. Nuestra b√∫squeda contin√∫a.

A continuaciòn, debemos comparar si el n√∫mero del medio es mayor que 9. No lo es.

Esto nos dice que el n√∫mero que estamos buscando debe estar después del n√∫mero del medio. 9 es mayor que 8 en una lista ordenada. Vamos a establecemos nuestro n√∫mero inicial para que sea igual al n√∫mero del medio. Esto se debe a que sabemos que el n√∫mero que estamos buscando no viene antes del n√∫mero del medio.

Si el n√∫mero que estamos buscando la b√∫squeda es más peque√±a, establecerìamos el n√∫mero final para que sea igual al n√∫mero del medio. Debido a que el n√∫mero es más peque√±o que el n√∫mero del medio, podrìamos enfocar nuestra b√∫squeda en la mitad inferior de la lista.

La b√∫squeda binaria se repite nuevamente en la mitad superior de la lista porque 9 es mayor que 8:



Inicio Medio Fin
2 6 8 9 10

Encontramos de nuevo el n√∫mero del medio. Esto es 9. Podemos comparar 9 con el n√∫mero que estamos buscando. 9 es igual al n√∫mero que estamos buscando.

Esto significa que nuestra b√∫squeda puede detenerse. ¬°Hemos encontrado con éxito el n√∫mero 9 en nuestra lista!

Còmo implementar una b√∫squeda binaria en JavaScript

Las b√∫squedas binarias se pueden implementar usando un enfoque iterativo o recursivo.

B√∫squeda binaria iterativa

Una b√∫squeda binaria iterativa usa un bucle while para encontrar un elemento en una lista. Este ciclo se ejecutará hasta que el elemento se encuentre en la lista, o hasta que se haya buscado en la lista.

Comencemos escribiendo un funciòn que realiza nuestra b√∫squeda binaria:

Empezamos por definir dos variables: inicio y final. Estos mantienen un registro de los valores más altos y más bajos con los que trabaja nuestra b√∫squeda. Usamos un bucle while que se ejecuta hasta que el n√∫mero inicial es mayor que el n√∫mero final. Este bucle calcula el n√∫mero intermedio entre el inicio y el final de la lista.

Si el n√∫mero que estamos buscando es igual al n√∫mero del medio, el n√∫mero del medio se devuelve a nuestro programa principal. Si el n√∫mero es menor, el valor inicial se establece para que sea igual al n√∫mero del medio más uno. Estas comparaciones se realizan mediante una instrucciòn if .

De lo contrario, el n√∫mero final se establece en ser igual al n√∫mero del medio menos uno. Si nuestro n√∫mero no se encuentra después de que se haya ejecutado el ciclo while, se devuelve -1. A esto lo llamamos una condiciòn base. En nuestro programa principal, verificaremos si el n√∫mero devuelto es igual a -1. Si es asì, significa que no se pudo encontrar nuestro n√∫mero.

Nuestra funciòn a√∫n no funciona. Necesitamos escribir un programa principal que lo llame:

Hemos definido una lista de n√∫meros a través de los cuales buscar y el n√∫mero que queremos encontrar en nuestra lista. A continuaciòn, hemos llamado a la funciòn binarySearch. Esto realizará nuestra b√∫squeda. La b√∫squeda devolverá -1 o la posiciòn del elemento que estamos buscando.

-1 indica que no se pudo encontrar un elemento. Si no se encuentra un elemento, se ejecuta el contenido de nuestra instrucciòn else . De lo contrario, se ejecuta el contenido de la instrucciòn if .

Ejecutemos nuestro còdigo:

¬°Esto nos dice que nuestra b√∫squeda ha sido exitosa!

Recursivo B√∫squeda binaria

Una b√∫squeda binaria recursiva se considera más elegante que una iterativa. Esto se debe a que las b√∫squedas binarias realizan la misma operaciòn una y otra vez en una lista. Este comportamiento se puede implementar mediante un algoritmo de recursividad.

Abra un nuevo archivo JavaScript y pegue este còdigo:

Este còdigo hace las mismas comparaciones que nuestra primera b√∫squeda. Comprueba si el n√∫mero del medio es igual, mayor o menor que el n√∫mero que estamos buscando.

Al comienzo de nuestra funciòn , usamos una instrucciòn if para verificar si el n√∫mero inicial es mayor que el n√∫mero final. Si lo es, significa que nuestro elemento no se pudo encontrar en la lista que hemos especificado. Devolvemos -1 al programa principal si este es el caso.

Si el n√∫mero que estamos buscando es el mismo que el n√∫mero del medio, el n√∫mero del medio se devuelve al programa principal. Si el n√∫mero que estamos buscando es mayor o menor que el n√∫mero del medio, nuestra funciòn binarySearch es ejecutar de nuevo. Esto contin√∫a hasta que se encuentra nuestro elemento.

Para ejecutar esta funciòn, tendremos que hacer un cambio en nuestro programa principal:

Necesitamos pasar dos parámetros adicionales: los valores de " start " y " end & rdquo ;. El valor de " start " es igual a 0. El valor de " end " es igual a la longitud de la lista menos uno.

Ejecutemos nuestro còdigo y veamos qué sucede:

¬°Nuestra b√∫squeda binaria fue exitosa! Utiliza el mismo algoritmo subyacente que el enfoque iterativo. La diferencia es que la b√∫squeda binaria se realiza usando una funciòn que se llama a sì misma hasta que se encuentra el elemento o hasta que se busca en la lista por completo, lo que ocurra primero.

Conclusiòn

B√∫squedas binarias facilite la b√∫squeda de un elemento en una lista. Cada vez que se ejecuta una b√∫squeda, el n√∫mero de elementos que quedan por buscar en una lista se reduce a la mitad. Esto hace que una b√∫squeda binaria sea más eficiente que una b√∫squeda lineal.

¬°Ahora está listo para implementar una b√∫squeda binaria en JavaScript como un experto!