Articulo de referencia

Búsqueda binaria uniforme

La búsqueda binaria uniforme es una optimización del algoritmo de búsqueda binaria clásico inventado por Donald Knuth y presentado en The Art of Computer Programming de Knuth . ...

La búsqueda binaria uniforme es una optimización del algoritmo de búsqueda binaria clásico inventado por Donald Knuth y presentado en The Art of Computer Programming de Knuth . Utiliza una tabla de búsqueda para actualizar un índice de matriz único, en lugar de tomar el punto medio de un límite superior e inferior en cada iteración; por lo tanto, está optimizado para arquitecturas (como MIX de Knuth ) en las que

  • Una búsqueda en una tabla es generalmente más rápida que una adición y un desplazamiento, y
  • Se realizarán muchas búsquedas en la misma matriz o en varias matrices de la misma longitud.

Implementación en C

El algoritmo de búsqueda binaria uniforme se ve así, cuando se implementa en C.

#define LOG_N 4

int estático delta [ LOG_N ];  

void make_delta ( int N ) { int potencia = 1 ; int i = 0 ;  

       
       

    hacer { int mitad = potencia ; potencia <<= 1 ; delta [ i ] = ( N + mitad ) / potencia ; } mientras ( delta [ i ++ ] != 0 ); } 
           
          
              
        


int unisearch ( int * a , int key ) { int i = delta [ 0 ] - 1 ; /* punto medio de la matriz */ int d = 0 ;    

           
       

    mientras ( 1 ) { si ( clave == a [ i ]) { devuelve i ; } de lo contrario si ( delta [ d ] == 0 ) { devuelve -1 ; } de lo contrario { si ( clave < a [ i ]) { i -= delta [ ++ d ]; } de lo contrario { i += delta [ ++ d ]; } } } }  
            
             
              
             
          
                
                  
              
                  
            
        
    


/* Ejemplo de uso: */ 
#define N 10

int principal ( void ) { int a [ N ] = { 1 , 3 , 5 , 6 , 7 , 9 , 14 , 15 , 17 , 19 }; 

                

    hacer_delta ( N );

    para ( int i = 0 ; i < 20 ; ++ i ) printf ( "%d está en el índice %d \n " , i , unisearch ( a , i ));        
           

    devuelve 0 ; } 

Referencias

  • Una implementación del algoritmo de Knuth en Pascal , por Han de Bruijn
  • Una implementación del algoritmo de Knuth en Go , por Adrianus Warmenhoven
Obtenido de "https://es.wikipedia.org/w/index.php?title=Búsqueda_binaria_uniforme&oldid=1194512988"