Bsqueda Binaria El algoritmo de bsqueda binaria es un excelente mtodo para buscar datos dentro de una estructura(generalmente un arreglo unidimencional).
Se le da el nombre de bsqueda binaria por que el algoritmo divide en dos el arregelo, aludiendo al concepto de bit, el cual puede tener dos estados. La nica condicin para usar este algoritmo es que los datos dentro del arreglo estn ordenados de menor a mayor. La solucin mas fcil para realizar una busqueda es por fuerza bruta, pero este mtodo puede resultar bastante ineficiente cuando se tiene una gran cantidad de datos, ya que habria que buscar posicin por posicin hasta encontrar el dato que queremos. El cdigo por fuerza bruta es bastante sencillo: for(int i=0; i<Arreglo.length; i++) if(Arreglo[i] == elemento) System.out.println("\nElemento encontrado en la posicion: " + i); Solo se recorre todo el arreglo y verificamos si la posicin i es igual al dato que queremos buscar, el cdigo anterior se puede mejorar simplemente agregandole una bandera, pero aun asi no es lo suficientemente bueno. El algoritmo de busqueda binaria es el siguiente: 1. Se declaran los ndices superior e inferior. El inferior en 0 y el superior con el tamao del arreglo menos 1. 2. Se calcula el centro del arreglo con la siguiente formula: centro = (superior + inferior) / 2 3. Verificamos si el arreglo en la posicin centro es igual al dato que buscamos. Si es igual significa que encontramos el dato y retornamos centro. 4. Si son diferentes verificamos si el arreglo en la posicin centro es mayor al dato que que queremos buscar. Si es mayor actualizamos superior: superior = centro - 1, si no actualizamos inferior: inferior = centro + 1. 5. Volvemos al paso 2. Si cuando ya no se cumpla la condicn del ciclo y no se encontro el dato retornamos -1 indicando que el dato no se encuentra en el arreglo.
Supongamos que tenemos el arreglo {2, 3, 5, 7, 9, 11, 14, 18, 22, 25} y queremos buscar el dato 18, entonces el inferior toma el valor de 0 y superior el valor de 9 (ya que es tamao del arreglo menos 1).
Calculamos el centro, centro = (superior + inferior) / 2 centro = (9 + 0) / 2 centro = 4 divisin entera(ignorando la parte decimal). Arreglo en la posicin centro es 9 (Arreglo[centro] = 9) ya que se empieza a contar desde 0. Comprobamos si arreglo en la posicin centro es igual al dato que queremos buscar Arreglo[centro] = dato, como Arreglo[centro] = 9 y dato = 18. no son iguales por lo tanto ahora verificamos si es mayor, en este caso no lo es entonces actualizamos inferior = centro + 1, esto hace que podamos descartar todos los datos del centro hacia atras, esto reduce nuestro arreglo a {11, 14, 18, 22, 25}. Y as seguiremos hasta queArreglo[centro] = dato. Como se puede notar este mtodo es bastante eficiente en arreglos grandes, por ejemplo supongamos que tenemos un arreglo de 10000 datos, y estamos buscando un dato que se encuentra en la posicin 6000, solo en la primera vuelta del ciclo ya se pueden descartar los primeros 5000 valores, en cambio por fuerza bruta se tendrian que realizar esos 6000 ciclos para poder localizar el dato. El cdigo completo quedara as: public class BusquedaBinaria { public static int busquedaBinaria(int[] Arreglo, int elemento) { int i = 0, centro = 0, posicion = 0, inferior = 0, superior = Arreglo.length-1; while(inferior <= superior) { centro = (superior + inferior) / 2; if (Arreglo[centro] == elemento) return centro; else if (Arreglo[centro] > elemento) superior = centro - 1; else inferior = centro + 1; } return -1; } public static void main (String[] args) { java.util.Scanner Leer = new java.util.Scanner(System.in); System.out.print("Tamao del arreglo: ");
int tamaoArreglo = Leer.nextInt(); int[] Arreglo = new int[tamaoArreglo]; for(int i=0; i<Arreglo.length; i++) Arreglo[i] = Leer.nextInt(); System.out.print("Elemento a buscar: "); int elemento = Leer.nextInt(); int posicion = busquedaBinaria(Arreglo, elemento); if(posicion == -1) System.out.println("\nElemento no encontrado"); else System.out.println("\nElemento " + elemento + " encontrado en la posicin " + posicion); } } Uno de los algoritmos de bsqueda ms eficiente que existe en la estructura de datos es la bsqueda binaria, las caractersticas para poder implementar este algoritmo son las siguientes: Los datos deben estar contenido en un estructura de datos tipo vector Los datos del vector deben estar ordenados
Tecnolgico de Estudios Superiores Oriente del estado de Mxico
Bsqueda Binaria
Materia: Estructura de Datos
Alumno: Garduo Salazar Francisco
Grupo: 3S11
Profesor: Lic. Omar Sosa Aguilar
Fecha 09 Enero - 2013