Codage de Prüfer

Un article de Wikipédia, l'encyclopédie libre.
Aller à : navigation, rechercher

Le codage de Prüfer est une méthode pour décrire de façon très compacte un arbre dont les sommets sont numérotés[1].

Ce codage permet de représenter un arbre numéroté de n sommets avec une suite P = (x_1, x_2, x_3, ..., x_{n-2}) de n-2 termes. Une suite P donnée correspond à un et un seul arbre numéroté de 1 à n.

En mathématiques, les suites de Prüfer ont été utilisées pour la première fois par Heinz Prüfer pour démontrer la formule de Cayley en 1918[2]. On peut aussi les utiliser en programmation informatique pour enregistrer la structure d'un arbre de façon plus compacte qu'avec les traditionnels pointeurs.

Codage[modifier | modifier le code]

Un arbre dont le codage de Prüfer donne (4, 4, 4, 5).

Note : tous les exemples qui suivent se réfèrent à l'arbre T ci-contre.

Algorithme[modifier | modifier le code]

La suite de Prüfer est construite à l'aide de l'algorithme suivant :

Données : Arbre T
Tant qu'il reste plus de deux sommets dans l'arbre T
    Identifier la feuille v de l'arbre ayant le numéro minimum
    Ajouter à la suite P le seul sommet s adjacent à v dans l'arbre T
    Enlever de l'arbre T le sommet v et l'arête incidente à v
Fin Tant que

Exemple[modifier | modifier le code]

Considérons l'arbre de la figure au-dessus.

Au départ, 1 est la feuille de numéro minimum, c'est donc elle qu'on retire en premier, et on met 4 (le numéro de la branche à laquelle elle était raccordée) dans la suite de Prüfer.

Les sommets 2 et 3 sont les suivants à être enlevés et on ajoute encore deux fois 4 à la suite de Prüfer.

Le sommet 4 est à présent une feuille et a le numéro le plus bas, donc on le retire et on ajoute 5 (la branche à laquelle il était raccordé) à la fin de la suite.

Il ne reste plus que deux sommets, donc on s'arrête. La suite de Prüfer codant l'arbre est P = (4, 4, 4, 5).

Décodage - Première méthode[modifier | modifier le code]

Cet algorithme s'appuie sur une suite D des degrés de chaque sommet de l'arbre T.

Algorithme[modifier | modifier le code]

L'arbre peut être reconstruit à l'aide de l'algorithme inverse suivant[3] :

Données : suite de Prüfer P de longueur n-2
Créer un graphe T composé de n sommets isolés numérotés de 1 à n
Créer une suite D composée de n valeurs toutes à 1
Pour chaque valeur xi de P
    Augmenter de 1 le degré du sommet numéroté xi dans D
Fin Pour chaque
Pour chaque valeur xi de P
    Trouver le sommet de degré 1 qui a le plus petit numéro, soit j ce numéro
    Ajouter l'arête allant de xi en j au graphe T
    Diminuer de 1 les degrés de xi et de j dans D
Fin Pour chaque
Ajouter l'arête reliant les deux sommets restants de degré 1

Exemple[modifier | modifier le code]

Considérons la suite P = (4, 4, 4, 5). Il faut qu'elle nous permette de reconstruire l'arbre de la figure au-dessus.

Dans une première phase, on crée un graphe à six sommets isolés numérotés de 1 à 6. On leur attribue à tous un degré par défaut égal à 1. Ensuite, on parcourt P en augmentant le degré des sommets qui y figurent : on augmente trois fois le degré du sommet 4 et une fois le degré du sommet 5. Finalement, on a les degrés D = (1, 1, 1, 4, 2, 1).

Dans la phase suivante, on parcourt à nouveau P :

  • Pour x1 = 4, on cherche le sommet de numéro le plus faible de degré égal à 1. C'est le sommet numéro 1 et on relie les sommets 1 et 4, tout en diminuant leurs degrés. On a à présent les degrés D = (0, 1, 1, 3, 2, 1)
  • Pour x2 = 4, on cherche le sommet de numéro le plus faible de degré égal à 1. C'est le sommet numéro 2 et on relie les sommets 2 et 4, tout en diminuant leurs degrés. On a à présent les degrés D = (0, 0, 1, 2, 2, 1)
  • Pour x3 = 4, on cherche le sommet de numéro le plus faible de degré égal à 1. C'est le sommet numéro 3 et on relie les sommets 3 et 4, tout en diminuant leurs degrés. On a à présent les degrés D = (0, 0, 0, 1, 2, 1)
  • Pour x4 = 5, on cherche le sommet de numéro le plus faible de degré égal à 1. C'est le sommet numéro 4 et on relie les sommets 4 et 5, tout en diminuant leurs degrés. On a à présent les degrés D = (0, 0, 0, 0, 1, 1)

Enfin, on relie les deux sommets restants de degré 1, à savoir les sommets de numéros 5 et 6. On a bien reconstitué l'arbre T original.

Décodage - seconde méthode[modifier | modifier le code]

À la place d'une suite D des degrés de chaque sommet, on peut utiliser une suite I des sommets que l'on n'a pas encore traités.

Algorithme[modifier | modifier le code]

L'arbre peut être reconstruit à l'aide de l'algorithme inverse suivant[1] :

Données : suite de Prüfer P de longueur n-2
Créer un graphe T composé de n sommets isolés numérotés de 1 à n
Créer une suite I des numéros de 1 à n
Tant qu'il reste des éléments dans P et plus de deux éléments dans I
    Soit s le premier élément de la suite P
    Identifier le plus petit élément j de I n'apparaissant pas dans la suite P
    Ajouter l'arête allant de j à s
    Enlever j de I et s de P 
Fin Tant que
Ajouter l'arête reliant les deux sommets restant dans I

Exemple[modifier | modifier le code]

Considérons la suite P = (4, 4, 4, 5). Il faut à nouveau qu'elle nous permette de reconstruire l'arbre de la figure au-dessus.

Au départ, I = (1, 2, 3, 4, 5, 6). Ensuite :

  • Le premier élément de P est 4 et le plus petit élément de I n'apparaissant pas dans P est 1. On relie les sommets 1 et 4 dans T et on les retire respectivement de I et de P. À ce stade, I = (2, 3, 4, 5, 6) et P = (4, 4, 5).
  • Le premier élément de P est 4 et le plus petit élément de I n'apparaissant pas dans P est 2. On relie les sommets 2 et 4 dans T et on les retire respectivement de I et de P. À ce stade, I = (3, 4, 5, 6) et P = (4, 5).
  • Le premier élément de P est 4 et le plus petit élément de I n'apparaissant pas dans P est 3. On relie les sommets 3 et 4 dans T et on les retire respectivement de I et de P. À ce stade, I = (4, 5, 6) et P = (5).
  • Le premier élément de P est 5 et le plus petit élément de I n'apparaissant pas dans P est 4. On relie les sommets 4 et 5 dans T et on les retire respectivement de I et de P. À ce stade, I = (5, 6) et P est vide.

On relie enfin les sommets restants 5 et 6. On a bien reconstitué l'arbre T original.

Démonstration de la formule de Cayley[modifier | modifier le code]

Il y a respectivement 1, 3 et 16 arbres décorés à 2, 3 et 4 sommets
Article principal : Formule de Cayley.

En science combinatoire, la formule de Cayley affirme que le nombre d'arbres « décorés » (numérotés) à n sommets est n^{n-2}. La figure ci-contre permet de voir qu'il existe effectivement 2^0, 3^1 et 4^2 arbres décorés distincts à 2, 3 ou 4 sommets respectivement.

Principe de la démonstration[modifier | modifier le code]

On montre d'abord que :

  • pour un arbre T, il existe une seule suite de Prüfer P décrivant T ;
  • pour une suite P donnée de longueur n-2, il y a un seul graphe T numéroté de 1 à n dont la suite de Prüfer est P, et c'est un arbre.

Le codage de Prüfer fournit donc une bijection entre l'ensemble des arbres numérotés à n sommets et l'ensemble des suites de longueur n-2 composées de valeurs dans l'intervalle [1, n]. Comme ce dernier possède n^{n-2} éléments, et comme le codage de Prüfer est bijectif, cela démontre la formule de Cayley.

Extension[modifier | modifier le code]

On peut aller plus loin et prouver que le nombre d'arbres couvrant un graphe complet K_n de degrés d_1, d_2, ..., d_n est égal au coefficient multinomial \frac{(n-2)!}{(d_{1}-1)!(d_{2}-1)!\cdots(d_{n}-1)!}.

La démonstration s'appuie sur le fait que, dans la suite de Prüfer, le numéro i apparaît exactement (d_{i}-1) fois.

Notes et références[modifier | modifier le code]

  1. a et b Codage de Prüfer sur Apprendre en ligne.net, Didier Müller, 10 février 2003
  2. (de) Prüfer, H., « Neuer Beweis eines Satzes über Permutationen », Arch. Math. Phys., vol. 27,‎ 1918, p. 742–744
  3. (en) Jens Gottlieb, Bryant A. Julstrom, Günther R. Raidl, and Franz Rothlauf., « Prüfer numbers: A poor representation of spanning trees for evolutionary search », Proceedings of the Genetic and Evolutionary Computation Conference (GECCO-2001),‎ 2001, p. 343–350 (lire en ligne)