stringtranslate.com

Mapeo de índices

El mapeo de índices (o direccionamiento directo , o una función hash trivial ) en informática describe el uso de una matriz , en la que cada posición corresponde a una clave en el universo de valores posibles. [1] La técnica es más efectiva cuando el universo de claves es razonablemente pequeño, de modo que la asignación de una matriz con una posición para cada clave posible es asequible. Su efectividad proviene del hecho de que una posición arbitraria en una matriz se puede examinar en tiempo constante .

Matrices aplicables

Existen muchos ejemplos prácticos de datos cuyos valores válidos están restringidos a un rango pequeño. Una función hash trivial es una opción adecuada cuando dichos datos deben actuar como una clave de búsqueda. Algunos ejemplos incluyen:

Ejemplos

El uso de una función hash trivial, en una búsqueda de tabla no iterativa, puede eliminar por completo las pruebas condicionales y las ramificaciones, reduciendo la longitud de la ruta de instrucciones de un programa de computadora.

Evite la ramificación

Roger Sayle da un ejemplo [2] de eliminación de una rama multidireccional causada por una declaración switch :

inline bool HasOnly30Days ( int m ) { switch ( m ) { caso 4 : // abril caso 6 : // junio caso 9 : // septiembre caso 11 : // noviembre return true ; predeterminado : return false ; } }               

Que se puede reemplazar con una búsqueda en la tabla:

bool en línea HasOnly30Days ( int m ) { constante estática bool T [] = { 0 , 0 , 0 , 1 , 0 , 1 , 0 , 0 , 1 , 0 , 1 } ; devolver T [ m -1 ] ; }                      

Referencias

  1. ^ Cormen, Thomas H. (2009). Introducción a los algoritmos (3.ª ed.). Cambridge, Mass.: MIT Press. pp. 253–255. ISBN 9780262033848. Recuperado el 26 de noviembre de 2015 .
  2. ^ Sayle, Roger Anthony (17 de junio de 2008). "Un análisis de superoptimizador de la generación de código de ramificación multidireccional" (PDF) . Actas de la Cumbre de desarrolladores del GCC : 103–116 . Consultado el 26 de noviembre de 2015 .