Generador de funciones hash perfecto para funciones
Tengo un conjunto de funciones de C ++. Quiero asignar estas funciones en una tabla hash, algo así como:unordered_map<function<ReturnType (Args...)> , SomethingElse>
, dóndeSomethingElse
no es relevante para esta pregunta.
Este conjunto de funciones es conocido anteriormente, pequeño (digamos menos de 50) y estático (no va a cambiar).
Dado que el rendimiento de búsqueda es crucial (debe realizarse enO(1)
), Quiero definir una función de hashing perfecta.
¿Existe un generador de funciones hash perfecto para este escenario?
Sé que existen generadores de funciones de hashing perfectas (comoGPERF oCMPH) pero como nunca los he usado, no sé si son adecuados para mi caso.
RAZÓN:
Estoy tratando de diseñar un marco donde, dado un programa escrito en C ++, el usuario puede seleccionar un subconjuntoF
de las funciones definidas en este programa.
Para cadaf
perteneciendo aF
, el marco implementa unmemorización estrategia: cuando llamamosf
con entradai
, almacenamos(i,o)
dentro de alguna estructura de datos. Entonces, si vamos a llamar OTRA VEZf
coni
, volveremoso
sin volver a realizar el cálculo (costoso).
Los "resultados ya calculados" se compartirán entre diferentes usuarios (tal vez en la nube), por lo que si el usuariou1
ya ha calculadoo
usuariou2
ahorrará tiempo de computación llamandof
coni
(usando la misma anotación de antes).
Obviamente, necesitamos almacenar el conjunto de pares.(f,inputs_sets)
(dóndeinputs_sets
es el conjunto de resultados ya calculado que hablé antes),cuál es la pregunta original: ¿cómo lo hago??
Por lo tanto, usar el "truco de enumeración" propuesto en los comentarios en este escenario podría ser una solución, suponiendo que todos los usuarios usen elexactamente lo mismo enumeración, que podría ser un problema: suponiendo que nuestro programa tengaf1
,f2
,f3
y siu1
solo quiere memorizarf1
yf2
(entoncesF={f1,f2}
), mientrasu2
solo quiere memorizarf3
(entoncesF={f3}
)? Una solución excesiva podría ser enumerar todas las funciones definidas en el programa, pero esto podría generar una gran pérdida de memoria.