1. BUSQUEDA BINARIA
La búsqueda binaria consiste en dividir el intervalo de búsqueda
en dos partes, comparando el elemento buscado con el que
ocupa la posición central en el arreglo. Para el caso de que no
fueran iguales se redefinen los extremos del intervalo, según el
elemento central sea mayor o menor que el elemento
buscado, disminuyendo de esta forma el espacio de búsqueda. El
proceso concluye cuando el elemento es encontrado, o cuando el
intervalo de búsqueda se anula, es vacío.
El método de búsqueda binaria funciona exclusivamente con
arreglos ordenados. No se puede utilizar con listas simplemente
ligadas no podríamos retroceder para establecer intervalos de
búsqueda ni con arreglos desordenados. Con cada iteración del
método el espacio de búsqueda se reduce a la mitad; por lo
tanto, el número de comparaciones a realizar disminuye
notablemente. Esta disminución resulta significativa cuanto más
grande sea el tamaño del arreglo.
2. BUSQUEDA BINARIA
La filosofía del algoritmo es la de Divide et impera, en el que la idea
es separar el problema en partes mas pequeñas, descartando lo que
no me sirve y quedándome con los rangos útiles. Los algoritmos de
este tipo, que descargan la mitad de los datos en cada
comparación, se dice que son de un orden de complejidad de:
log( N )
Donde N es la cantidad de elementos de nuestra colección de datos.
Así podemos saber que en cada pasada, nos quedaran la mitad de los
elementos, algo muy importante a al hora de optimizar recursos.
3. BUSQUEDA BINARIA
¿Como funciona la búsqueda binaria?
Necesitamos una seria de datos para realizar la búsqueda: El
elemento en la posición inicio, fin, medio. Y por supuesto el tamaño
del vector y elemento que queremos buscar.
inicio = 0;
fin = tam – 1;
medio = (inicio + fin) / 2;
Preguntamos si el elemento buscado es igual al elemento que se
encuentra en la posición medio del array, si es afirmativo ya
encontramos el elemento y no hay nada más que hacer.
1 if(buscado == array[medio]){
2 cout << "Se encuentra en la posición " << medio + 1 << endl;
3 return array[medio];
4 }
4. BUSQUEDA BINARIA
Si no es así. Preguntamos si el elemento que se encuentra en la
posición medio es mayor al elemento buscado, si es afirmativo y
como el array está ordenado, quiere decir que elemento buscado
es menor al del medio. Entonces ahora solo buscaríamos en esa
división del array,
por lo tanto, el fin ahora sería el elemento anterior al medio.
1 if(array[medio] > buscado){
2 fin = medio - 1;
3 }
5. BUSQUEDA BINARIA
De lo contrario quiere decir que elemento buscado es mayor al del
medio, entonces debemos buscar en la otra división del array, por lo
tanto el inicio sería el elemento posterior al medio.
1 else {
2 inicio = medio + 1;
3 }
Con cualquiera de estas 2 operaciones descartamos la otra mitad del
array y por lo tanto reducimos notablemente el número de
iteraciones.
Por lo tanto, en cada iteración, la búsqueda se reduce a la mitad del
array. Realizamos esto en un bucle mientras el inicio sea menor o igual
al fin.
7. BUSQUEDA BINARIA
Ejemplo usando PHP:
<?php
/* archivo: BusquedadBinaria.php
Función: Buscar un elemento en un array desordenado
*/
function busquedadBinaria($a,$valor);
{ $izq=0;
$der=sizeof($a)-1;
$n=-1;
while($inico < $ultimo )
{ int $medio=($izq+$der)/2
if ($a[$medio]==$valor)
{ $n=$medio; }
elseif ($a[$medio] < $valor)
{ $izq = $medio; }
elseif ($a[$medio] > $valor)
{ $der = $medio; }
}
return $n;
}
?>
8. BUSQUEDA BINARIA
Ejemplo usando PHP:
<?php
/* archivo: BusquedadPrincipal.php
Funcion: Muestra si un valor($numero) se encuentra en el vector
*/
include "BusquedadBinaria.php";
include "MetodoBurbuja.php";
$vector=array(3,4,67,2,9,12,4,76,54,7);
$numero=4;
$vector= metodoBurbuja($vector);
$posicion= busquedadBinaria($vector,$nuemro);
if ($posicion > -1)
{
echo " El Valor $numero se encuentra en la posición $posicion del vector"; }
else {
echo " El Valor $numero se No encuentra en vector"; }
?>