Вы находитесь на странице: 1из 3

Pseudocódigo para la búsqueda binaria, modificado para buscar en un arreglo.

Las
entradas son el arreglo, el cual llamamos array; el número n de elementos en array;
y target, el número que estamos buscando. La Salida es el índice de target en array:

1. Sea min = 0 y max = n-1.


2. Calcula guess como el promedio de max y min, redondeado hacia abajo (para que sea
un entero).
3. Si array[guess] es igual a target, entonces detente. ¡Lo encontraste! Regresa guess.
4. Si el intento fue demasiado bajo, es decir, array[guess] < target, entonces haz min =
guess + 1.
5. De lo contrario, el intento fue demasiado alto. Haz max = guess - 1.
6. Regresa al paso 2.

Implementar pseudocódigo

Vamos a alternar entre español, pseudocódigo y JavaScript en estas lecciones,


dependiendo de la situación. Como programador, debes aprender a entender
pseudocódigo y ser capaz de convertirlo en tu lenguaje de preferencia; así que aunque
aquí estemos usando JavaScript, debe ser directo para ti implementar el pseudocódigo
al usar otros lenguajes.

¿Cómo convertiríamos ese pseudocódigo en un programa de JavaScript? Debemos


crear una función, porque estamos escribiendo código que acepta una entrada y regresa
una salida, y queremos que ese código sea reutilizable para diferentes entradas. Los
parámetros de la función, vamos a llamarla binarySearch, serán el arreglo y el valor
objetivo, y el valor que regresa la función será el índice de la ubicación en donde se
encontró el valor objetivo.

Ahora vayamos al cuerpo de la función y decidamos cómo implementar eso. El paso 6


dice regresar al paso 2. Eso suena a un bucle. ¿Debería ser un bucle for o un bucle
while? Si en verdad quisieras usar un bucle for, podrías, pero los índices de los intentos
de la búsqueda binaria no van en el orden secuencial que hace que un bucle for sea
conveniente. Primero podemos intentar el índice 12, y luego el 18, con base en algunos
cálculos. Así que un bucle while es la mejor opción.

También hay un paso importante que falta en ese pseudocódigo que no importó en el
juego de adivinar, pero que sí importa para la búsqueda binaria de un arreglo. ¿Qué
debería pasar si el número que estás buscando no está en el arreglo? Vamos a empezar
por averiguar qué índice debería regresar la función binarySearch en este caso. Debería
ser un número que no puede ser un índice válido en el arreglo. Usaremos -1, ya que no
puede ser un índice válido para ningún arreglo. (En realidad, cualquier número negativo
funcionaría).

El número objetivo no está en el arreglo si ya no quedan intentos posibles. En nuestro


ejemplo, supón que estamos buscando el número objetivo 10 en el arreglo primes. Si
estuviera ahí, el 10 estaría entre los valores 7 y 11, que están en los índices 3 y 4. Si
sigues los valores de los índices para min y max a medida que se ejecuta la
función binarySearch, encontrarías que eventualmente llegan al punto en donde min es
igual a 3 y max es igual a 4. Entonces, el intento está en el índice 3 (ya que (3 + 4) / 2 es
igual a 3.5, y redondeamos hacia abajo), y primes[3] es menor que 10, así que min se
vuelve 4. Con ambos min y max iguales a 4, el intento debe estar en el índice 4,
y primes[4] es mayor que 10. Ahora max se vuelve 3. ¿Qué significa que minsea igual a
4 y que max sea igual a 3? Significa que los únicos intentos posibles son por lo menos 4
y a lo más 3. ¡No hay tales números! En este punto, podemos concluir que el número
objetivo, 10, no está en el arreglo primes y que la función binarySearch regresaría -1. En
general, una vez que max se vuelve estrictamente menor que min, sabemos que el
número objetivo no está en el arreglo ordenado. Aquí está el pseudocódigo modificado
para la búsqueda binaria que maneja el caso en el cual el número objetivo no está
presente:
1. Sea min = 0 y max = n-1.
2. Si max < min, entonces detente: target no está en array. Regresa -1.
3. Calcula guess como el promedio de max y min, redondeado hacia abajo (para que sea
un entero).
4. Si array[guess] es igual a target, entonces detente. ¡Lo encontraste! Regresa guess.
5. Si el intento fue demasiado bajo, es decir, array[guess] < target, entonces haz min =
guess + 1.
6. De lo contrario, el intento fue demasiado alto. Haz max = guess - 1.
7. Regresa al paso 2.

Вам также может понравиться