Le coup du rand() qui donne toujours la première valeur, il me semble qu'il a déjà été évoqué sur le forum...
Un truc genre un "bug connu de la libc"...
Version imprimable
Le coup du rand() qui donne toujours la première valeur, il me semble qu'il a déjà été évoqué sur le forum...
Un truc genre un "bug connu de la libc"...
bonjour
à mon avis la méthode de millie est la meilleure tant que l'alphabet n'est pas trop grand
car dans son algo il s'agit de fabriquer séquentiellement un arrangement de plus en plus grand sur l'alphabet, qui mènera à la fin à une permutation aléatoire de l' ensemble
sur un alphabet (ordonné!) dont la taille tend vers l'infini, il faudra faire autrement:
taille de l'aphabet = n
nb_tires = 0
faire tirage {
r = random entre 1 et n-nb_tires
k = nbr d'elements dans le tableau inférieurs au r ieme element de l'alphabet
r += k
mettre r dans le tableau tout en gardant le tableau trié
nb_tires += 1
retourner le r ieme element de l'alphabet
}
est je pense une solution correcte
La question revient en effet à générer une permuation aléatoire d'un ensemble 1,2,3,...N. une fosi la permutation faite, il suffit de prendre dans l'odre les éléments du tableau permuté.
l'algo pour cela est absolument codifié
on vérifie qu'il y a bien selon cet algo N! sorties possibles, ce qui correspond effectivement au nombre de permutations possible. donc ce programme tout simple garatit que toutes les permutations sont équiprobables.Code:
1
2
3
4 pour i = 1 à N-1 tirer un entier j aléatoire dans [i N] permuter les éléments i et j next
Note, en matlab, il y a une instruction pour cela : randperm
OL