Está en la página 1de 7

BUSQUEDA BINARIA INTERACTIVA.

BUSQUEDAD BINARIA

Se utiliza cuando el vector en el que queremos determinar la existencia de un elemento est previamente ordenado. Este algoritmo reduce el tiempo de bsqueda considerablemente, ya que disminuye exponencialmente el nmero de iteraciones necesarias.

Est altamente recomendado para buscar en arrays de gran tamao. Por ejemplo, en uno conteniendo 50.000.000 elementos, realiza como mximo 26 comparaciones (en el peor de los casos).

EXPLICACIN

Para implementar este algoritmo se compara el elemento a buscar con un elemento cualquiera del array (normalmente el elemento central): si el valor de ste es mayor que el del elemento buscado se repite el procedimiento en la parte del array que va desde el inicio de ste hasta el elemento tomado, en caso contrario se toma la parte del array que va desde el elemento tomado hasta el final. De esta manera obtenemos intervalos cada vez ms pequeos, hasta que se obtenga un intervalo indivisible. Si el elemento no se encuentra dentro de este ltimo entonces se deduce que el elemento buscado no se encuentra en todo el array.

A continuacin se presenta el pseudocdigo del algoritmo, tomando como elemento inicial el elemento central del array.

Datos de entrada: vec: vector en el que se desea buscar el dato tam: tamao del vector. Los subndices vlidos van desde 0 hasta tam-1 inclusive. dato: elemento que se quiere buscar. Variables centro: subndice central del intervalo inf: lmite inferior del intervalo sup: lmite superior del intervalo inf = 0 sup = tam-1 Mientras inf <= sup: centro = ((sup - inf) / 2) + inf // Divisin entera: se trunca la fraccin Si vec[centro] == dato devolver verdadero y/o pos, de lo contrario: Si dato < vec[centro] entonces: sup = centro - 1 En caso contrario: inf = centro + 1 Fin (Mientras) Devolver Falso

A continuacin se presenta el algoritmo en PSeint,

Este es el cogido principal del algoritmo o el que realiza la busquedad por medio de comparaciones.

como lo realiza: primero a la variable centro le damos el valor de la mitad del vector y la comparamos con el numero ingresado y si es igual el programa termina, sino lo que hace es comparar si el numero ingresado es mayor o menor que el centro, y si es mayor lo compara con los nmeros mayor que el centro y sigue dividiendo el vector hasta que encuentre el numero o no en el vector, al igual cuando es menor que el centro hace el mismo procedimiento.

Algoritmo de bsqueda
Para otros usos de este trmino, vase Bsqueda. Un algoritmo de bsqueda es aquel que est diseado para localizar un elemento con ciertas propiedades dentro de una estructura de datos; por ejemplo, ubicar el registro correspondiente a cierta persona en una base de datos, o el mejor movimiento en una partida de ajedrez. La variante ms simple del problema es la bsqueda de un nmero en un vector.

Bsqueda secuencial[editar editar cdigo]


Se utiliza cuando el vector no est ordenado o no puede ser ordenado previamente. Consiste en buscar el elemento comparndolo secuencialmente (de ah su nombre) con cada elemento del arreglo hasta encontrarlo, o hasta que se llegue al final. La existencia se puede asegurar cuando el elemento es localizado, pero no podemos asegurar la no existencia hasta no haber analizado todos los elementos del arreglo. A continuacin se muestra el pseudocdigo del algoritmo:[cita requerida]

Datos de entrada: vec: vector en el que se desea buscar el dato tam: tamao del vector. Los subndices vlidos van desde 0 hasta tam-1 inclusive. dato: elemento que se quiere buscar. Variables pos: posicin actual en el arreglo pos = 0 Mientras pos < tam: Si vec[pos] == dato devolver verdadero y/o pos, de lo contrario: pos = pos + 1 Fin (Mientras)

Devolver falso,

C int busquedaSimple(int int i; for(i=0; i<n; i++){ if(dato==vector[i]) { return i; } } return -1; } vector[], int n, int dato) {

Bsqueda dicotmica (binaria)[editar editar cdigo]


Se utiliza cuando el vector en el que queremos determinar la existencia de un elemento est previamente ordenado. Este algoritmo reduce el tiempo de bsqueda considerablemente, ya que disminuye exponencialmente el nmero de iteraciones necesarias. Est altamente recomendado para buscar en arrays de gran tamao. Por ejemplo, en uno conteniendo 50.000.000 elementos, realiza como mximo 26 comparaciones (en el peor de los casos). Para implementar este algoritmo se compara el elemento a buscar con un elemento cualquiera del array (normalmente el elemento central): si el valor de ste es mayor que el del elemento buscado se repite el procedimiento en la parte del array que va desde el inicio de ste hasta el elemento tomado, en caso contrario se toma la parte del array que va desde el elemento tomado hasta el final. De esta manera obtenemos intervalos cada vez ms pequeos, hasta que se obtenga un intervalo indivisible. Si el elemento no se encuentra dentro de este ltimo entonces se deduce que el elemento buscado no se encuentra en todo el array. A continuacin se presenta el pseudocdigo del algoritmo, tomando como elemento inicial el elemento central del array.

Datos de entrada: vec: vector en el que se desea buscar el dato tam: tamao del vector. Los subndices vlidos van desde 0 hasta tam-1 inclusive. dato: elemento que se quiere buscar.

Variables centro: subndice central del intervalo inf: lmite inferior del intervalo sup: lmite superior del intervalo inf = 0 sup = tam-1 Mientras inf <= sup: centro = ((sup - inf) / 2) + inf // Divisin entera: se trunca la fraccin Si vec[centro] == dato devolver verdadero y/o pos, de lo contrario: Si dato < vec[centro] entonces: sup = centro - 1 En caso contrario: inf = centro + 1 Fin (Mientras) Devolver Falso

C int busquedaBinaria(int { int centro,inf=0,sup=n-1; while(inf<=sup){ centro=(sup+inf)/2; if(vector[centro]==dato) return centro; else if(dato < vector [centro] ){ sup=centro-1; } else { inf=centro+1; } } return -1; } Implementacin recursiva en C++ [cita requerida] C++ #include <iostream> #include <vector> vector[], int n, int dato)

bool busqueda_dicotomica(const vector<int> &v, int principio, int fin, int &x){ bool res; if(principio <= fin){ int m = (principio + fin)/2; if(x < v[m]) res = busqueda_dicotomica(v, principio, m-1, x); else if(x > v[m]) res = busqueda_dicotomica(v, m+1, fin, x); else res = true; }else res = false; return res; } /*{Post: Si se encuentra devuelve true, sino false}*/ Implementacin recursiva en Python Python def busquedaBinaria (numeros, inicio, fin, elemento): if (inicio == fin): return numeros [inicio] == elemento centro = (inicio + fin) // 2 if (elemento < numeros [centro]): return busquedaBinaria (numeros, inicio, centro, elemento) elif (elemento > numeros [centro]): return busquedaBinaria (numeros, centro + 1, fin, elemento) else: return True

def busqueda (numeros, elemento): if (numeros == None) or (numeros == []): return False else: return busquedaBinaria (numeros, 0, len (numeros) - 1, elemento)