Me gustaría saber si hay una función de números de n bits a números de n bits que tenga las siguientes características:
- debe ser biyectivo
- Tanto como deben calcularse bastante rápidof - 1
- debería devolver un número que no tenga una correlación significativa con su entrada.
La razón es esta:
Quiero escribir un programa que funcione con datos. Parte de la información de los datos se almacena en un árbol de búsqueda binario donde la clave de búsqueda es un símbolo de un alfabeto. Con el tiempo, agrego más símbolos al alfabeto. Los nuevos símbolos simplemente obtienen el siguiente número gratuito disponible. Por lo tanto, el árbol siempre tendrá un pequeño sesgo en las teclas más pequeñas, lo que provoca un reequilibrio mayor de lo que creo que debería ser necesario.
Mi idea es manglear los números de los símbolos con manera que se extiendan ampliamente en todo el rango de . Dado que los números de los símbolos solo importan durante la entrada y la salida, lo que ocurre solo una vez, la aplicación de dicha función no debería ser demasiado costosa.[ 0 , 2 64 - 1 ]
Pensé en una iteración del generador de números aleatorios Xorshift, pero realmente no sé cómo deshacerlo, aunque en teoría debería ser posible.
¿Alguien sabe tal función?
¿Es esta una buena idea?