Algorithme de RĂ©my
L'algorithme de Rémy est un générateur d'arbres binaires, dont la principale application est un algorithme efficace de génération aléatoire d'arbres binaires.
L'algorithme doit son nom Ă son inventeur Jean-Luc RĂ©my.
Histoire
L'algorithme de RĂ©my est dĂ» Ă Jean-Luc RĂ©my, chercheur au Centre de recherche en informatique de Nancy. Il a Ă©tĂ© crĂ©Ă© en 1978 sans ĂȘtre publiĂ© immĂ©diatement[1] et a fait partie du folklore de l'algorithmique et de la combinatoire Ă©numĂ©rative[2] jusqu'Ă sa parution dans une revue francophone en 1985[3].
Description de l'algorithme
Les arbres binaires sont dénombrés par les nombres de Catalan donnés par les formules de récurrence :
- .
Mais ces formules ne permettent pas de dériver un algorithme efficace de génération aléatoire.
L'idĂ©e de RĂ©my consiste Ă non plus compter les arbres binaires Ă nĆuds, mais les arbres binaires dĂ©corĂ©s Ă nĆuds, Ă savoir les arbres dont les feuilles ont Ă©tĂ© dĂ©corĂ©es par les nombres de Ă dans un ordonnancement quelconque. Il y a maniĂšres de dĂ©corer un arbre binaire, par consĂ©quent, le nombre d'arbres binaires Ă nĆuds internes est
Comme le note Knuth, Olinde Rodrigues avait déjà démontré cette formule, en 1838, dans un article du Journal de Liouville[4]. On note au passage que cela correspond à la récurrence linéaire sur les nombres de Catalan :
- .
RĂ©my a remarquĂ© qu'il y a moyens de construire un arbre dĂ©corĂ© de taille Ă partir d'un arbre dĂ©corĂ© de taille . On choisit un nĆud interne ou externe (une feuille) dans cet arbre, appelons le . Comme il y a nĆuds internes et feuilles, il y a choix possibles de . On insĂšre alors un nouveau nĆud interne et une nouvelle feuille dĂ©corĂ©e par , dont elle est la fille droite ou la fille gauche, tandis que en est alors le fils gauche ou le fils droit, comme cela est illustrĂ© dans les dessins ci-dessous.
- Ă gauche
- Ă droite
La suite d'arbres ci-dessus illustre des insertions de nĆuds conduisant Ă la construction d'un arbre binaire de taille .
On voit que ce processus est unique ; en effet, l'insertion peut ĂȘtre inversĂ©e par la coupe de la feuille de plus grand numĂ©ro. En consĂ©quence, la construction de RĂ©my produit alĂ©atoirement des arbres dĂ©corĂ©s de façon uniforme. Il suffit d'oublier les feuilles pour obtenir une gĂ©nĂ©ration alĂ©atoire des arbres ordinaires (donc non dĂ©corĂ©s).
Implémentation efficace
Pour engendrer alĂ©atoirement un arbre de taille , on peut Ă©crire un algorithme efficace qui utilise un tableau de taille et qui fait tirages alĂ©atoires dans des intervalles d'entiers, de taille respectivement, jusqu'Ă , d'oĂč une complexitĂ© linĂ©aire de l'algorithme en nombre de tirage uniforme dans un intervalle discret. Il est possible d'amĂ©liorer cet algorithme et d'atteindre un algorithme optimal en nombre de bits alĂ©atoires utilisĂ©s[5].
Extensions
L'algorithme de Rémy est à l'origine de plusieurs échantillonneurs aléatoires efficaces d'arbres non binaires comptés par des nombres qui sont solutions d'équations holonomes (en)[5], notamment d'échantillonneurs aléatoires pour les arbres unaires-binaires.
Références
- Jean-Luc Remy, « Un procédé itératif de dénombrement d'arbres binaires et son application à leur génération aléatoire », dans Actes des 3e journées de la RCP Complexité, Nice, , aussi Rapport CRIN n°80-P-053 (1980).
- Dominique Foata et Doron Zeilberger, « A Classic Proof of a Recurrence for a Very Classical Sequence », J. Comb. Theory, Ser. A, vol. 80(2),â , p. 380-384 (lire en ligne)
- Jean-Luc Remy, « Un procĂ©dĂ© itĂ©ratif de dĂ©nombrement d'arbres binaires et son application Ă leur gĂ©nĂ©ration alĂ©atoire », ITA, vol. 19(2),â , p. 179-195 (lire en ligne)
- Olinde Rodrigues, « Sur le nombre de moyens d'effectuer un produit de n facteurs », Journal de mathĂ©matiques pures et appliquĂ©es, vol. 3,â , p. 549 (lire en ligne)
- Axel Bacher, Olivier Bodini et Alice Jacquot, « Efficient random sampling of binary and unary-binary trees via holonomic equations », Theor. Comput. Sci., vol. 695,â , p. 42-53.
Bibliographie
- Jean-Luc Remy, « Un procĂ©dĂ© itĂ©ratif de dĂ©nombrement d'arbres binaires et son application Ă leur gĂ©nĂ©ration alĂ©atoire », ITA, vol. 19(2),â , p. 179-195 (lire en ligne)
- Donald E. Knuth, The Art of Computer Programming, vol. 4.4 (Generating all Trees), Addison Wesley, p. 18