Busqueda binaria o búsqueda dicotómica

Busqueda binaria:

Es un algoritmo de busqueada que para realizarla, es necesario contar con un array o vector ordenado. Luego tomamos un elemento central, normalmente el elemento que se encuentra a la mitad del arreglo, y lo comparamos con el elemento buscado. Si el elemento buscado es menor, tomamos el intervalo que va desde el elemento central al principio, en caso contrario, tomamos el intervalo que va desde el elemento central hasta el final del intervalo.

Procedemos de esta manera con intervalos cada vez menores hasta que lleguemos a un intervalo indivisible, en cuyo caso el elemento no está en el vector, o el elemento central sea nuestro elemento.

De esta forma la complejidad computacional se reduce a O(ln N).

Si necesitan los Algoritmos de ordenamiento ahi se los dejo.

Yo esta busqueda la voy a hacer de manera iterativa pero se puede utilizar recursion tambien:


public static void Buscar(int [] vect,int valor){

int pivote = vect.length/2;
for (int i=0; i < vect.length;i++){
System.out.println(vect[i]);
}

if (valor < pivote){

for (int x=0;x < pivote;++x){

if (valor == pivote){
System.out.println("Encontrado posicion "+pivote);
break;
}else if (valor == vect[x]){
System.out.println("Encontrado posicion "+x);
break;
}

}
}else if(valor < pivote){

for (int x=pivote;x < vect.length;++x){

if (valor == pivote){
System.out.println("Encontrado posicion "+pivote);
break;
}else if (valor == vect[x]){
System.out.println("Encontrado posicion "+x);
break;
}

}

}else{
System.out.println("Elemento no encontrado >:(");
}


}


Mas que todo les dejo el algortimo de la busqueda que es lo importante...
Espero que les sirva.











Busquedas secuenciales

Busqueda Secuencial

En este ocasion voy a explicar los algoritmos de busquedas secuenciales , este tipo de algoritmos nos facilita la forma de hacer consultas ya sea en una tabla de una base de datos como en un vector o matriz de datos (que al final viene siendo lo mismo que en una base de datos; xD ).

Este tipo de busqueda tiene mas puntos en contra que a favor porque en un vector de N posiciones este algoritmo va a buscar posicion a posicion hasta dar con el dato solicitado y en el caso de que no exista pues tambien va a recorrer todo el arreglo.

Lo bueno de este tipo de busqueda es que es muy sencillo de implementar y no se tiene que ordenar el vector si tomamos el ejemplo anterior todavia como valido.

Bueno mucha explicacion vamos a la practica...

Si tenemos un vector ya definido con los siguientes datos:

["aarona","aashta","abelarda","abelia","abigail","abril"] , todos de

tipo String y queremos saber si ya existe el nombre : "Abigail" en nuestro vector entonces tenemos que hacer lo siguiente:


public class BSecuencial {

public static void main(String[] args)throws IOException {

BufferedReader entrada = new BufferedReader (new InputStreamReader(System.in));
int encontrados=0;
String [] VectorNombres = {"Aarona","Aashta","Abelarda","Abelia","Abigail",
"Abril"};


System.out.print("Digite el nombre que desea buscar: ");
String nombre = entrada.readLine();
// entrada de dato a buscar

for (int i=0; i<VectorNombres.length;i++){

if(nombre.equalsIgnoreCase(VectorNombres[i])){

JOptionPane.showMessageDialog(null,"Elemento encontrado "+VectorNombres[i],"Encontrado",
JOptionPane.INFORMATION_MESSAGE);

encontrados++;
continue;
}


}

if(encontrados == 1 ){
System.out.println("Fin de busqueda, encontrado "+encontrados+" elemento igual");
}else{
System.out.println("Fin de busqueda, encontrados "+encontrados+" elementos iguales");
}


}

}



Con este codigo ya estan listos para usar las busquedas secuenciales y utilizarlas para casos mas complejos.


Saludos...........8 )