AccueilđŸ‡«đŸ‡·Chercher

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.

Exemple de mélange de cinq lettres à l'aide de la version en place de Durstenfeld du mélange Fisher-Yates.

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

  1. Paul E. Black, « Fisher-Yates shuffle », sur Dictionary of Algorithms and Data Structures.
  2. 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
  3. Richard Durstenfeld, « Algorithm 235: random permutation », Communications of the ACM, vol. 7, no 7,‎ , p. 420
  4. Donald E. Knuth, Seminumerical algorithms, vol. 2, Reading, MA, Addison–Wesley, , p. 124-125

Liens externes

Cet article est issu de wikipedia. Text licence: CC BY-SA 4.0, Des conditions supplĂ©mentaires peuvent s’appliquer aux fichiers multimĂ©dias.