Popular

Obten claves web y navega gratis Router keygen para Android

Error 403 Forbidden con phpmyadmin y WAMP Server

Realizar suma, resta y división con javascript

Búsqueda binaria en C++.

Se preguntarán porque escribo a cerca de esté lenguaje, bueno me he encontrado impartiendo unas asesorías a cerca de esté lenguaje en estos por lo que he decido estar publicando material para que sirva de apoyo y ayude a entender mejor los conceptos, así también ponerlo a la disposición de más personas. 

La búsqueda binaria solo se puede implementar en arreglos ordenados. La idea consiste en ir dividiendo el arreglo en mitades. Por ejemplo, supongamos que tenemos un vector: 

int vector[10] = {2, 4, 6, 8, 10, 12, 14, 16, 18, 20 };

La clave a buscar es 6. El algoritmo funciona de la siguiente manera: 

  1. Se denominan un límite superior (LS) y un límite inferior (LI), LI = 0 y LS = tamaño del arreglo - 1 en este caso es 9. 
  2. Se determina el indice central, ICentro = (LI + LS) / 2, en esté caso el centro sería 4. 
  3. Evaluamos si el vector[ICentro] es igual a la clave de búsqueda, si es igual ya encontramos la clave de búsqueda y devolvemos ICentro
  4. Si son distintos, evaluamos si vector[ICentro] es mayor o menor que el dato que se está buscando, como el arreglo está ordenado al hacer esto ya podemos descartar una mitad del arreglo asegurándonos que en esa mitad no está la clave que buscamos. En nuestro caso vector[ICentro] = 4 < 6, entonces la parte del arreglo vector[12...20] ya puede descartarse. 
  5. Reasignamos los valores de LI o LS para obtener la nueva parte del arreglo en donde queremos buscar, LS, quedá igual ya que sigue siendo el tope. LI lo tenemos que subir a Centro + 1, esto nos daría LI = 5, entonces quedaría LS = 9 y LI = 5, y volvemos al paso 2. 
Si la clave no fuese encontrada en algún momento LI > LS, con un while vamos a controlar está condición para salir del cliclo en tal caso y devolver -1 o false para determinar que no se encontró (dato no encontrado). 


Aquí les muestro un método que indica como realizar la búsqueda binaria. 

void busquedaBinaria()
{
     int LI=0, centro = 0, numeroComparaciones=0; 
     int LS = tamVector -1 ;
     bool fueEncontrado = false;
     int datoBuscar = 0;
     cout << endl << "Que dato deseas buscar ";
     cin >> datoBuscar;
     
     while(fueEncontrado == false && LI <= LS)
     {
         centro = (LI + LS) / 2;
         numeroComparaciones++;
         
         if (Vector[centro] == datoBuscar)
         {
                            cout << endl << "El dato fue encontrado en " << centro << endl;
                            fueEncontrado = true;
         }   
         else
         {
             if (datoBuscar < Vector[centro])
                LS = centro -1;
             else
                 LI = centro + 1;
         }
     }
     
     if (!fueEncontrado)
        cout << "el numero no fue encontrado";
     else
         cout << "El número de comparaciones que se realizaron fue de " << numeroComparaciones;
     
 }


Cualquier duda o comentario quedo a sus ordenes.

Comentarios

Entradas populares de este blog

Error 403 Forbidden con phpmyadmin y WAMP Server

Número de filas afectadas por instrucción PL/SQL en Oracle [Utilidades].

Como truncar un número decimal en C# sin redondear.