busqueda binaria

Anuncio
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD
ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA
Lógica de Programación - 204022
BUSQUEDA BINARIA
La búsqueda es una tarea que se realiza permanentemente, en toda actividad,
cuando se está en un supermercado uno busca artículos en particular, en una
multitud de gente se busca a alguien en especial, en un directorio se busca a una
persona, como se observa la búsqueda está presente en cada una de las
actividades.
Los algoritmos más utilizados para la realización de búsquedas son:
 Lineal o Secuencial
 Binaria.
 Hash (transformación de claves).
La búsqueda lineal es efectiva, pero no es la más eficiente, si se tiene gran
cantidad de información, esta búsqueda pude ser tediosa, por consiguiente se han
desarrollado diferentes algoritmos, que permiten realizar búsquedas más
efectivas, como es el caso de la búsqueda binaria, este algoritmo tiene una
pequeña restricción es que solo realiza búsquedas efectivas si el arreglo está
ordenado.
El algoritmo de búsqueda binaria, divide el vector en dos y compara el elemento
central con el valor que se está buscando, si el elemento es mayor se realizar
divisiones sucesivas hacia la derecha, de aso contrario la hará hacia la izquierda,
gráficamente si se tiene un vector de 8 elementos ordenados y se quiere encontrar
un valor en especial, para este caso el 19, se procede así:
El primer paso que se realiza es examinar el valor central del vector, o sea la
casilla número 4 (8 div 2), como el contenido de ella es menor que el número a
buscar se puede descartar la búsqueda en las casillas ubicadas a la izquierda.
La búsqueda binaria es la técnica de más alta velocidad y funciona eficientemente con arreglos grandes y
ordenados previamente. Consiste en eliminar, tras cada comparación, la mitad de los elementos del
arreglo en los que se efectúa la búsqueda. Primero localiza el elemento central del arreglo y luego lo
compara con la clave de búsqueda. Si son iguales, se ha encontrado dicha clave y se devuelve el
subíndice de ese elemento. De otro modo, el problema se reduce a buscar en una mitad del arreglo.
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD
ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA
Lógica de Programación - 204022
A continuación se repite este procedimiento, comparando el valor a la derecha
Ahora el elemento central es mayor que el valor que se está buscando, por lo
tanto hay que proceder hacia la izquierda
encontro = 0
menor = 1
mayor = n
mientras menor <= mayor hasta
central = (mayor + menor ) div 2
si X[central] = valor haga
mostrar “Elemento encontrado en la posición “, central
encontro =1
fin si
si X[central] < valor haga
menor = central + 1
si no haga
mayor = central - 1
fin si
fin mientras
si encontro = 0 haga
mostrar “No se encontró el elemento“
fin si
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD
ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA
Lógica de Programación - 204022
El código para la búsqueda binaria es el siguiente:
#include <stdio.h>
#include <conio.h>
#include <iostream>
using namespace std;
// Prototipos de las funciones.
void MostrarVector(int *arreglo, int n);
int buscar(int valor, int *arreglo, int n);
void main(void)
{
int n; // cantidad de elementos del vector
int valor; // numero a buscar
int i; // Contador
int arreglo[100];// Arreglo de enteros
system (“cls”);
cout<<"Digite el numero de elementos:";
cin>> n;
for (i=0;i<n;i++)
{
Menor, mayor y central
cout<<"Digite un valor para la posicion :", <<i<<" ";
cin>>arreglo[i];
}
cout<<"Digite el numero a buscar:";
cin>>valor;
cout<<"\nVector Leido:\n";
MostrarVector(arreglo,n);
cout<<"\n inicia el proceso de Búsqueda binaria:\n";
if ((i=buscar(valor, arreglo, n)) != -1)
cout<<"\nEncontrado en la posicion n"<<i;
else
cout<<"\nNo existe en el arreglo\n";
system (“”pause);
}
// función para mostrar en pantalla el vector
void MostrarVector(int *arreglo, int n)
{
int i; // Contador
for (i=0;i<n;i++)
cout<< arreglo[i];
cout<<"\n";
}
// función para realizar Búsqueda binaria.
int buscar(int valor, int *arreglo, int n)
{
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD
ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA
Lógica de Programación - 204022
int menor=0; // Posicion inferior de la sablista
int mayor; // Posicion superior de la sablista
int central; // Posicion central de la sablista
mayor = n;
while (menor <= mayor)
{
central = (mayor + menor) / 2;
if (arreglo[central] == valor) return central;
if (arreglo[central] < valor)
menor = central + 1;
else mayor = central - 1;
}
return -1;
}
Al igual que el código de la búsqueda lineal, se recomienda realzar la respectiva
prueba de escritorio
Descargar