Veamos la implementación de un algoritmo que me gusta mucho; se trata de la búsqueda binaria. La primera vez que escuché de él fue en mi clase de Estructura de datos; ni siquiera sabía que algo así existía.
En fin, después de ello me fascinó mucho; sobre todo por la velocidad del mismo. Enseñaré cómo buscar una cadena en un arreglo usando recursividad con una búsqueda binaria, y cómo hacer lo mismo pero en un arreglo con números.
Haremos lo mismo pero usando el ciclo while; a eso se le llama búsqueda binaria en forma secuencial.
Nota: recuerda que este algoritmo requiere que el arreglo esté ordenado. Pásate por mi post para saber cómo ordenar arreglos de PHP.
Por otro lado, te recomiendo leer lo que son los argumentos que son tomados por referencia. Para redondear y calcular la mitad del arreglo usamos la función floor en PHP.
En caso de que obtengas errores de sintaxis con los corchetes es debido a la notación corta de arreglos en PHP.
Me he dado a la tarea de poner todo esto en una función. Pongo aquí el código y más tarde lo explico:
Lo que hacemos es mandar todo el arreglo, y no le hacemos ninguna operación; simplemente modificamos los índices o límites inferiores y superiores.
Es importante notar que el arreglo se pasa por referencia, ahorrando copiarlo en memoria cada que la función se llama.
Para partir el arreglo simplemente modificamos los índices, cuando lo partimos hacia la izquierda tomamos desde el punto medio -1 hasta el valor que tiene la izquierda. Y cuando lo partimos hacia la derecha tomamos el punto medio + 1 hasta el valor que tiene la derecha.
Para llamarla la primera vez, le pasamos los límites inferiores y superiores del arreglo, el arreglo y la búsqueda. La izquierda es el 0, y la derecha es la longitud del arreglo – 1 (esto es porque los arreglos empiezan a tomar las posiciones en el 0).
Aquí el ejemplo:
La salida es:
El elemento 200 está en el índice 7
Si lo que buscamos no está, se devuelve -1.
Es lo mismo de arriba pero ahora no usamos recursividad, sino un ciclo while que se ejecutará siempre y cuando la derecha o el límite superior sea mayor o igual que la izquierda.
Igualmente está dentro de una función, pero dicha función ahora recibe únicamente el arreglo y la búsqueda, pues calcula y mueve los límites internamente.
Así de fácil es. Igualmente es una búsqueda binaria pero usando un ciclo while.
Podemos probarlo así:
La salida es: El elemento 77 está en el índice 5
Aquí una pequeña nota: las cadenas se comparan de distinta manera, pues no podemos usar simples signos de comparación como con los números (aunque en JS sí). Para esto usamos la función strcmp.
El objetivo de este post es explicar la búsqueda binaria, pero recomiendo que sepas cómo funciona strcmp y he preparado un post para ello: uso de la función strcmp para comparar cadenas.
De ahí, el código es exactamente el mismo.
Lo mismo que hicimos para comparar números, pero ahora usando cadenas. Aquí el código igualmente en una función:
Podemos usar a la función así:
Con la salida que dice: El elemento computadora está en el índice 3
Usando strcmp y el ciclo while recorremos los límites, es decir, jugamos con ellos. Es lo mismo que hacemos con números pero sin usar operadores de comparación como < o >.
La función queda así:
Con este ejemplo de código podemos probarla:
Si lo ejecutamos, esta es la salida:
El elemento tarjeta está en el índice 6
La impresión de un PDF en cualquier impresora se puede automatizar con un bot de…
Hoy te enseñaré cómo enviar un mensaje a un usuario desde un bot de Telegram…
El día de hoy te enseñaré algo muy sencillo pero útil al programar con PHP:…
El plugin para imprimir en impresoras térmicas alcanza hoy su versión 3.4.0 agregando soporte para…
En ocasiones es necesario leer los pixeles y colores de una imagen con JavaScript del…
Siguiendo con los tutoriales de listas desplegables o select con JavaScript, vamos a ver cómo…
Esta web usa cookies.
Ver comentarios
el algoritmo tiene errores lógicos no funciona en todos los casos
¿Podrías darme un ejemplo? Así lo corrijo y mejoro