Algorithme de Rémy
![Page d’aide sur l’homonymie](http://upload.wikimedia.org/wikipedia/commons/thumb/a/a9/Logo_disambig.svg/20px-Logo_disambig.svg.png)
Pour les articles homonymes, voir Rémy (homonymie).
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 .
![Une suite d'arbres décorés illustrant l'algorithme de Rémy](http://upload.wikimedia.org/wikipedia/commons/2/25/Remy_sequence_of_decorated_trees.png)
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[5] ou les arbres de Schröder[2] qui sont en bijection avec les arbres planaires[6].
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).
- ↑ a et b 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)
- ↑ a b et c 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.
- ↑ Pierre Lescanne, « Holonomic equations and efficient random generation of binary trees », DMTCS, vol. 25, no 2, (lire en ligne).
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
Voir aussi
- Arbre (mathématiques)
- Arbre (graphe)
- Nombre de Catalan
- Nombre de Motzkin
- Nombre de Schröder-Hipparque
Portail des mathématiques
Portail de l'informatique théorique
Portail de la programmation informatique