Je n'ai pas fait l'analyse pour confirmer à quel point cela serait uniforme (ou non), et cela pourrait être ajusté pour être un vrai mélange, mais pourriez-vous simplement choisir, à partir d'un tableau de départ du ith index = i + 1, l' (k + RandNum50() + RandNum50() - 1) mod (100 - k)index, avec suppression, pour k= 0..99?
Cela "pousse" RandNum50() + RandNum50()uniformément le pic de la distribution vers l'avant.
Je suis à peu près sûr que ce n'est pas tout à fait raison, comme je l'ai dit, car l'index 0 (1) ne peut pas être obtenu à partir du premier choix et je ne peux pas voir rapidement un autre ajustement 1..50 + 1..50 qui produit 0 ..99.
Mise à jour
Pour résoudre le problème que j'ai noté, j'ai effectivement utilisé RandNum100comme mentionné dans les commentaires de la question pour initialiser au hasard le premier kdécalage.
Cela produit une distribution avec une onde importante à l'avant.
Au lieu d'avancer de 1, j'en ai utilisé un autre RandNum50pour l'incrémenter en premier k. Cela produit un résultat qui est assez aléatoire pour moi, mais ce n'est toujours pas "vraiment" aléatoire, comme on peut le voir facilement si vous changez K en 2.
Test du code VB.NET où je répondais à tout K. pair. Notez que c'est O (K), 6K + 2 en fait.