MĂ©lange de Fisher-Yates
Le mélange de Fisher-Yates, aussi appelé mélange de Knuth, est un algorithme pour générer une permutation aléatoire d'un ensemble fini, c'est-à -dire pour mélanger un ensemble d'objets.
Il porte les noms de Ronald Aylmer Fisher, Frank Yates et Donald Knuth.
Description
Pour mélanger un tableau a de n éléments (indicés de 0 à n-1), l'algorithme est le suivant.
Pour i allant de n â 1 Ă 1 faire : j â entier alĂ©atoire entre 0 et i Ă©changer a[j] et a[i]
Cet algorithme a une complexitĂ© linĂ©aire et donne toutes les permutations avec la mĂȘme probabilitĂ©. Au k-iĂšme pas il y a n-k choix possibles, donc il y a n! dĂ©roulements possibles, de plus l'Ă©lĂ©ment placĂ© en k au pas k ne sera plus jamais modifiĂ© dans les pas suivants, ce qui prouve que toutes les permutations seront gĂ©nĂ©rĂ©es, et avec Ă©gale probabilitĂ©. Il peut ĂȘtre vu comme un tri par sĂ©lection inversĂ©[1].
Historique
L'algorithme apparait la premiÚre fois dans un ouvrage de Fisher et Yates[2] en 1938. Il est redécouvert sous une forme plus algorithmique par Richard Durstenfeld en 1964[3], puis popularisé par Donald Knuth sous le nom d'algorithme P[4].
Notes et références
- (en) Cet article est partiellement ou en totalitĂ© issu de lâarticle de WikipĂ©dia en anglais intitulĂ© « FisherâYates shuffle » (voir la liste des auteurs).
- Paul E. Black, « Fisher-Yates shuffle », sur Dictionary of Algorithms and Data Structures.
- Ronald A. Fisher et Frank Yates, Statistical tables for biological, agricultural and medical research, Londres, Oliver & Boyd, , 3e Ă©d. (1re Ă©d. 1938), p. 26-27
- Richard Durstenfeld, « Algorithm 235: random permutation », Communications of the ACM, vol. 7, no 7,â , p. 420
- Donald E. Knuth, Seminumerical algorithms, vol. 2, Reading, MA, AddisonâWesley, , p. 124-125
Liens externes
- Jeff Atwood, « The Danger of Naïveté », sur Coding Horror (Une comparaison de l'algorithme naïf et de l'algorithme de Fisher-Yates)
- Mike Bostock, « FisherâYates Shuffle » (Visualisation de diffĂ©rents mĂ©langes)