Tengo una cadena grande que debo barajar de manera segura. Será alrededor de 4000 caracteres. La permutación resultante de dicha cadena debe ser una en el conjunto de todas las permutaciones posibles (4000!). Por supuesto, las permutaciones resultantes también deben estar distribuidas equitativamente entre todos los estados posibles. Necesito probar razonablemente que mi implementación cumple con esos requisitos, pero no se necesitan métodos formales.
Estaba planeando usar un Knuth-Fisher-Yates simple para esto, pero me preocupa mi RNG. Estoy obligado a implementar esto en JavaScript, ya que mi aplicación debe ejecutarse en Thunderbird. De (lo que puedo leer) [ enlace , Mozilla puede proporcionar un criptográficamente asegure un valor aleatorio, y planeo combinarlo con (this) [ enlace para obtener números aleatorios en el rango deseado.
Ahora, creo que podría tener problemas con el espacio de estado interno del PRNG. Si tiene pocos, se "envolverá" y producirá un sesgo para ciertos números. Si tiene demasiados, podría aplicarse el módulo a escala reducida, lo que también produce un sesgo para los números en el rango inferior.
¿Cuánto tiempo necesitaría una semilla para inicializar un PRNG usado para KFY-Shuffle una cadena de 4000 caracteres? ¿Estoy pensando demasiado en esto, hay algo en lo que no pensé?