Génération exhaustive de graphes planaires

Luca Castelli Aleardi

La génération et codage des graphes planaires a été largement étudié dans les deux dernières décennies. En particulier, dans le cas des triangulations planaires, des travaux récents ont fournides solutions très éfficaces pour le problème de la génération aléatoire [2]: on fixe n, le nombre de sommets du graphe, et on veut produire en temps linéaire O(n) une triangulation planaire choisie au hasard parmi toutes les triangulations de taille n (avec une distribution uniforme).
D'autres travaux [1] ont considéré un problème différent, celui de la génération exaustive: dans ce cas il s'agit de générer toutes les triangulations de taille n, de manière éfficace.
Li et Nakano [1] on montré comment résoudre ce dernier problème très éfficacement: on génère les triangulations dans un certain ordre, et on veut passer d'une triangulation à la suivante en temps constant amorti. Leur algorithme est basée sur la définition d'un arbre généalogique (voir image ci-dessous), faisant intervenir les propriétés des ordre canoniques [3]. Les ordres canoniques jouent un role crucial dans le domaine des dessins de graphes, et sont aussi liés aux propriétés des arbres de Schnyder traités en cours.


Mot clés: triangulations planaires, generation exhaustive de graphes, ordres canoniques.

Références:
[1] Z. Li and S. Nakano, Efficient Generation of Plane Triangulations without Repetitions, Proc. of ICALP 2001.
[2] D. Poulalhon and G. Schaeffer, Optimal Coding and sampling of triangulations, Algorithmica, pages 505-527, 2006 (46). (online version)
[3] Goos Kant, Drawing Planar Graphs Using the Canonical Ordering , Algorithmica(1996). (online version)

(génération des triangulations de taille 5: image de Li et Nakano, prise de [1])



Génération de triangulations planaires: étapes principales

Construction (génération d'un arbre bourgeonnant)

On construit (de manière aléatoire ou autre), un mot binaire de longueur 4n et poids n (avec n symboles '1').
Ce mot constitue un codage d'un arbre plan à n sommets: en parcourant le contour de l'arbre, en partant de la racine en sens anti-horaire, on code avec un symbole '1' si l'on rencontre une arete interne de l'arbre une première fois; on écrit '0' pour les bourgeons, et aussi lorsqu'on rencontre une arete une deuxiè,e fois (en remontant dans l'arbre).

On construit l'arbre bourgeonnant à n sommets correspondant au mot binaire: si le mot est "correct" on obient un arbre plan à n sommets, où tous les sommets ont exactement deux bourgeons (fig. a)

Cloture partielle

En partant de la racine de l'arbre, on fait un parcours en profondeur (de gauche à droite) du contour de l'arbre: on renferme les bourgeons en sens horaire, de manière à créer des faces triangulaires (fig.(c) et (d) ).

Dernière étape: cloture complète

Une fois que tous les bourgeons ont été attachés, il ne reste qu'à ajouter deux sommets dans la face infinie, et relier les bourgeons incidents à la face externe (fig.(d) ) de manière à obtenir une triangulation planaire (fig.(e), (f) ).

(bijection entre arbres plans et triangulations: image de Poulalhon et Schaeffer, prise de [2])




Finalités du projet

Input du programme: un entier n (le nombre de sommets de la triangulation)

Niveau 1: implementer l'algorithme décrit dans [1] pour la génération exaustive de triangulations planaires

Niveau 2: implémenter l'algorithme de génération décrit dans [2]: l'input est un mot binaire (respectant les bonnes contraintes, de taille, poids et équilibrage), le résultat est une triangulation planaire

Niveau 3 (bonus): vérifier que les deux méthodes de génération fournissent une solution au problème suivant: étant donné un paramètre de taille n (le nombre de sommets), on veut engendrer toutes les triangulations de taille n.

Suggestion: on pourra se servir de la structure de demi-aretes de Jcg (Polyhedron_3) pour manipuler les arbres plans ainsi que les triangulations.