No he hecho el análisis para confirmar qué tan uniforme (o no) sería esto, y podría ajustarse para que sea una mezcla aleatoria verdadera, pero ¿podría elegir, desde una matriz inicial del i
índice th = i + 1
, el (k + RandNum50() + RandNum50() - 1) mod (100 - k)
índice, con eliminación, para k
= 0..99?
Esto "empuja" el pico en la RandNum50() + RandNum50()
distribución hacia adelante de manera uniforme.
Estoy bastante seguro de que esto no es del todo correcto, ya que lo he dicho porque el índice 0 (1) no se puede obtener de la primera opción y no puedo ver rápidamente un ajuste alternativo 1..50 + 1..50 que produzca 0 ..99.
Actualizar
Para solucionar el problema que noté, utilicé efectivamente RandNum100
como se menciona en los comentarios de la pregunta para inicializar aleatoriamente el primer k
desplazamiento.
Esto produce una distribución con una onda significativa en el frente.
En lugar de avanzar por 1, usé otro RandNum50
para incrementar eso primero k
. Esto produce un resultado que es lo suficientemente aleatorio para mí, pero todavía no es "verdaderamente" aleatorio, como se puede ver fácilmente si cambia K a 2.
Probar el código VB.NET donde atendí a cualquier K. Tenga en cuenta que es O (K), 6K + 2, de hecho.