Générateur de graphes - v5.4 - © Cyril Gavoille - Février 2023

USAGE

gengraph [-options] graph [parameters]

DESCRIPTION

Génère sur la sortie standard un graphe. Par défaut le graphe est non orienté et affiché selon une liste d'arêtes (au format texte), mais d'autres formats sont possibles: liste d'adjacence, format dot de GraphViz, xfig ou pdf par exemple. En paramètre figure le nom du graphe ainsi que ses paramètres éventuels, typiquement le nombre de sommets. La commande appelée seule affiche l'aide sur les options du générateur. Si les paramètres d'une option ou d'un graphe sont absents ou remplacés par "?", une aide spécifique est affichée. Une console supportant l'UTF8 est préférable.

       Ex: gengraph -help
	   gengraph -list | sort
	   gengraph -not ?
	   gengraph -xy unique ?
	   gengraph tree ?
	   gengraph ? arbre
	   gengraph tutte
           gengraph hypercube 8
           gengraph mesh 7 3 -not
	   gengraph mesh 50 50 -dele .5 -maincc -visu
	   gengraph rdodecahedron -visu
           gengraph tree 100 -visu
	   gengraph web 10 3 -visu
	   gengraph gabriel 50 -caption "Grabriel with n=50" -visu
	   gengraph gabriel 2000 -xy seed 1 0.15 -visu
	   gengraph gabriel 700 -xy seed 1 -0.3 -visu
	   gengraph sierpinski 7 3 -visu
	   gengraph udg 400 .1 -visu
	   gengraph udg 400 .1 -xy seed 3 1.5 -visu
	   gengraph udg 400 -1 -vsize -vcolor deg -visu
	   gengraph arytree 6 3 3 -dot filter circo -visu
	   gengraph dyck -dot filter circo -visu
	   gengraph ringarytree 4 2 3 0 -label 1 -visu
	   gengraph arboricity 100 2 -vcolor degr -visu
	   gengraph prime 6 -directed -loop 0 -visu
	   gengraph aqua 3 2 1 . -label 1 -dot filter dot -visu
	   echo "0->1->2->0" | gengraph load - -check bfs 0
	   gengraph tutte | gengraph -filter - diameter p
           gengraph rplg 300 3 -maincc -vcolor degr -vcolor pal wz -vsize -visu
           gengraph -xy box 15 15 -xy round 0 -xy grid 16 rng 30 -visu
	   gengraph linial 7 3 -check kcolorsat 3 | glucose -model

LE FORMAT STANDARD

Le format par défaut (ou standard) est une liste d'arêtes ou de chemins écrits au format texte. Ce format minimaliste est très proche de celui du format "dot" de GraphViz. D'autres formats de sortie sont possibles, notamment le format "dot" (voir l'option -format). Les sommets sont numérotés consécutivement de 0 à n-1 où n est le nombre de sommets présents dans le graphe (en fait cela peut être changé avec l'option -shift). Une arête entre i et j est représentée par i-j, un arc de i vers j par i->j. Les sommets isolés sont simplement représentés par le numéro du sommet suivit d'un espace ou d'un retour de ligne. Le nombre de sommets du graphe est l'entier le plus grand plus un.

Pour une représentation plus compacte, les arêtes (ou arcs) consécutives d'un chemin du graphe peuvent être regroupées en blocs i-j-k-…. Par exemple, les deux arêtes 3-5 et 5-8 peuvent être regroupées en 3-5-8. Mais ce n'est pas obligatoire. Également, les arêtes (ou arcs) d'une étoile peuvent être groupées avec i-(j k …). Par exemple, 3-(5 7 8) représente les arêtes 3-5, 3-7 et 3-8. Il n'est pas possible cependant de combiner chemins et étoiles, comme 3-(5-7-8) ou 3-(5-(7 8)). Toutefois 3-5-(7 …) est correct, mais pas 3-(5 6)-7 ni (3 5)-6. Les sommets isolés et les arêtes (ou les blocs d'arêtes) sont séparés par des espaces ou des sauts de ligne. Une boucle sur un sommet i est codée par i-i. Les arêtes multiples sont codées par la répétition d'une même arête, comme par exemple i-j i-j, ou encore i-j-i (même convention pour les arcs i->j->i).

       Ex: 0 1-2-3-1            0   1
                                   / \
                                  3───2
représente un graphe à 4 sommets, composé d'un sommet isolé (0) et d'un cycle à trois sommets (1,2,3). Une représentation graphique possible est donnée à droite.

       Ex: 4-2-1-0-3-2-5
représente un graphe à 6 sommets composé d'un cycle de longueur 4 et de deux sommets de degré 1 attaché à 2. On aurait pu coder le même graphe avec l'expression 2-(1 3 4 5) 1-0-3. En voici une représentation graphique possible:

       Ex:        1
                 / \
              4-2   0
               / \ /
              5   3
Plus généralement, une famille de graphes peut être définie en précédant chaque graphe par "[n]" où n est un entier unique représentant l'identifiant du graphe.

       Ex: [17] 0-1 [22] 0->1->2->0
représente une famille composée de deux graphes: un chemin à deux sommets (d'identifiant 17) ainsi d'un cycle orienté à trois sommets (d'identifiant 22).

COMMENT FONCTIONNE LE GÉNÉRATEUR ?

Pour chaque graphe une fonction adj(i,j) est définie. Elle fournit d'adjacence (0 ou 1) entre les sommets i et j, des entiers entre 0 et n-1. Le graphe est affiché en générant toutes les paires {i,j} possibles et en appelant adj(i,j) (ou tous les couples (i,j) possibles dans le cas orienté). Les graphes sont ainsi générés de manière implicite. Les arêtes du graphe ne sont pas stockées en mémoire, mais affichées à la volée. Ceci permet de générer des graphes de très grande taille sans nécessiter O(n²) espace de mémoire centrale. Pour certains graphes cependant, comme les arbres aléatoires, les graphes géométriques ou certains graphes d'intersections, une structure de données en O(n) peut être utilisée. Pour les formats d'affichage liste, matrix, et smatrix une structure de données de taille linéaire (en O(n+m) où m est le nombre d'arêtes) est utilisée en interne. Pour la génération de très grand graphe, le format standard ou dot doit être privilégié.

COMMANDES EXTERNES

Le programme fait appel, pour certaines fonctions, aux commandes systèmes suivantes qui doivent être dispnibles: sed, grep, awk, more, sort, dot.

OPTIONS

-help [word]
? [word]
[option|graph] ?

Affiche l'aide en ligne qui est contenue dans le fichier source du générateur. Pour cela, le code source .c doit être dans le même répertoire que l'exécutable. Si "word" est précisé, alors les options et noms de graphe contenant "word" sont affichés. La variante "[option|graph] ?" affiche une aide détaillée sur une option ou un graphe précis.

       Ex: gengraph ? arbre
           gengraph ktree ?
	   gengraph ? hedron
	   gengraph ? planaire
La forme ? peut ne pas fonctionner correctement si un fichier d'un seul caractère existe dans le répertoire courant (à cause de l'interprétation du shell). Il faut alors utiliser '?' au lieu de ?.

-list

Affiche la liste des graphes et leurs paramètres qu'il est possible de générer. Sont listés d'abord les graphes de bases puis les composés. On obtient une aide sur un graphe particulier si son nom est suivit de " ?" ou si ses paramètres éventuelles sont absents (dans ce cas il doit être le dernier mot de la commande).

       Ex: gengraph -list | sort
	   gengraph gabriel

-version

Affiche la version courante du générateur (en fait du programme source), un réel > 1. Pour cela, le code source .c doit être dans le même répertoire que l'exécutable.

-directed
-undirected

L'option -directed produit le graphe orienté en testant les n² arcs possibles, l'option -undirected permettant de revenir à la situation par défaut, soit en testant les n(n-1)/2 paires de sommets. Les boucles peuvent être testées ou pas grâce à l'option -loop. En format standard ou dot, un arc apparaît comme i->j au lieu de i-j ou i--j pour une arête. Tous les graphes ne sont pas forcément définis pour fonctionner comme espéré avec l'option -directed car certaines fonctions d'adjacence supposent que i<j et l'option par défaut (-undirected). Avec -directed, la plupart des graphes vont apparaître comme orientés symétriques. L'option -directed active l'option -loop 1.

       Ex: gengraph clique 5 -directed
           gengraph cycle 5 -directed

-not

Inverse la fonction d'adjacence, et donc affiche le complément du graphe. Cette option est prioritaire sur l'option -redirect.

-loop p

Supprime (p=0), autorise (p=1) ou force (p=2) les boucles du graphe généré. L'option par défaut pour les graphes non-orientés est p=0, et pour les graphes orientés c'est p=1. Pour qu'une boucle apparaise avec p=1, il faut que le graphe définisse l'adjacence i-i ou i->i. Pour p=2, une boucle à chaque sommet sera générée, même si le graphe ne définit pas cette adjacence. L'option -loop étant modifiée par -(un)directed, elle doit être placée après pour avoir un effet.

       Ex: gengraph cycle 5 -loop 2
           gengraph cycle 5 -directed -loop 1
           gengraph cycle 5 -directed -loop 2

-dele p

Permet de supprimer chaque arête du graphe générée avec probabilité p.

-delv p

Similaire à -dele p mais concerne les sommets. Chaque sommet, et ses arêtes incidentes, est alors supprimés avec probabilité p. Si p est un entier <0, alors exactement |p| sommets sont supprimés uniformément aléatoirement. Dans tous les cas, si k sommets sont supprimés, alors le nom des sommets restant est dans l'intervalle [0,n-k[ où n est le nombre de sommets initial du graphe. Les noms des sommets sont donc éventuellement renumérotés. Voir aussi les options -permute et -shift. Bien sûr la fonction d'adjacence est appliquée sur les noms (i,j) originaux.

-redirect p

Redirige chaque arête uniformément avec probabilité p. Plus précisément, si {i,j} est une arête du graphe original G, alors avec probabilité p l'arête affichée est {i,k} au lieu de {i,j} où k est un sommet choisi uniformément parmi les sommets du graphe G. Si l'arête {i,j} est supprimée par -dele ou si le sommet i est supprimé par -delv, la redirection n'a pas lieu. Cette option est appliquée après l'option -not. Le graphe G tient donc compte de -not avant de rediriger ses arêtes.

-star n

Ajoute n sommets pendant (degré 1) aux sommets du graphe. Si n>0, alors n représente le nombre total de sommets ajoutés, chacun des n sommets étant connectés aléatoirement uniformément aux sommets du graphe original. Si n<0, alors |n| sommets sont ajoutés à chacun des sommets du graphe. [Cette option n'est plus effective depuis v4.5. Elle le sera de nouveau dans une prochaine version.]

-apex n

Ajoute n sommets universels, donc connectés à tous les sommets du graphe. [Cette option n'est plus effective depuis v4.5. Elle le sera de nouveau dans une prochaine version.]

-seed s

Permet d'initialiser le générateur aléatoire avec la graine s, permettant de générer plusieurs fois la même suite aléatoire. Par défaut, la graine est initialisée par une combinaison du numéro de processus de la commande et le temps. Donc le programme génère par défaut des suites différentes à chaque lancement. Le générateur est initialisé lorsque l'option est lue sur la ligne de commande. Le comportement du programme peut donc être affecté suivant son ordre d'apparition. Cependant le graphe est généré après l'analyse de la ligne de commande.

-width m

Limite à m le nombre d'arêtes et de sommets isolés affichés par ligne. Cette option n'a pas de signification particulière en dehors des formats standard et dot. Par exemple, -width 1 affiche une arrête (ou un sommet isolé) par ligne. L'option -width 0 affiche tout sur une seule ligne. La valeur par défaut est 12.

-shift s

Permet de renuméroter les sommets à partir de l'entier s positif. La valeur par défaut est -shift 0. L'intérêt de cette option est de pouvoir réaliser des unions de graphes simplement en renumérotant les sommets et en concaténant les fichiers aux formats standard ou list. Cette option n'a pas d'effets pour les formats de sortie de type matrice.

-permute

Permute aléatoirement uniformément le nom des sommets lorsqu'ils sont affichés (ou chargés en mémoire dans le cas d'options -check), et donc après la génération du graphe. Les numéros restent dans l'intervalle initial qui, sauf si l'option -shift a été utilisée, est [0,n[ où n est le nombre de sommets du graphe réellement généré. Voir aussi l'option -label.

-header

Affiche un préambule donnant certaines informations sur le graphe, sous forme de commentaire à la C++ (//). Par défaut aucun préambule n'est affiché. Les informations affichées sont: - l'heure, la date et la graine du générateur aléatoire - la ligne de commande qui a produit la génération du graphe - le nombre de sommets, d'arêtes, le degrés maximum et minimum Pour les formats standard et dot, le nombre d'arêtes (et les degrés min et max) n'est pas déterminé avant l'affichage du graphe. Pour cette raison ces nombres ne sont affichés qu'après le graphe. Pour n'avoir que les informations sur le graphe, utiliser -header avec l'option -format no. Voir aussi -check info.

-caption title

Permet d'ajouter une légende à un graphe. Cette option n'a d'effet qu'avec le format dot et ces variantes. Il est possible d'afficher la "seed" avec le format %SEED. On ne peut avoir plus d'une occurrence du même format (%SEED) dans cette option.

       Ex: gengraph gabriel 30 -caption ex1 -visu
           gengraph gabriel 30 -caption "Exemple 2" -visu
           gengraph gabriel 30 -caption "graph with seed=%SEED" -visu

-fast

Génère le graphe sans tester les O(n²) arêtes possibles, mais en utilisant directement la liste d'adjacence du graphe préalablement générée lors de l'initialisation du graphe, comme c'est le cas pour les graphes basés sur "load" (load, mst, bdrg, ...) ou sur une "k-orientation" (arboricity, kpage, planar, expander, ...). Le résultat est une génération du graphe en temps O(n+m) au lieu de O(n²) au détriment d'un espace mémoire O(m+n) supplémentaire. Le temps pris par chacun des deux types de génération peut être mesuré avec -check info. Voir aussi "loadc".

       Ex: gengraph load file -fast -delv 0.3 -check ncc
Cet exemple permet de calculer le nombre de composantes connexes sur un sous-graphe contenu dans un fichier le tout en temps linéaire. D'autres graphes peuvent supporter une génération rapide si elle est implantée dans l'initialisation de la fonction d'adjacence. Certaines options, comme -not et -loop 2, n'ont plus d'effet en présence de -fast. Cependant, -permute, -delv, -dele, et d'autres fonctionnent normalement.

-variant v

Permet de passer un entier v pour contrôler certaines fonctionnalités du générateur, la valeur par défaut étant v=0. Par exemple, "-variant 1 -check routing cluster -1" permettra de calculer une variante du schéma de routage "cluster". Seule la dernière occurence de l'option -variant est prise en compte.

-check [parameters]

Stocke en mémoire le graphe généré sous la forme d'une liste d'adjacence, et lui applique un algorithme. Le graphe est généralement affiché, sauf pour certaine options comme -check maincc ou -check routing. Utiliser "-format no" pour ne pas afficher le graphe généré. Cette option nécessite un espace supplémentaire en O(n+m) pour le stockage du graphe avant application de l'algorithme.

-check info

Affiche quelques caractéristiques du graphe, après avoir effectué un tri puis un simple parcours de ses listes d'adjacences. Indique, par exemple, si le graphe est orienté, s'il contient des boucles, des multi-arêtes, etc. Le graphe lui-même n'est pas affiché. Indique aussi l'occupation mémoire du graphe, le temps de génération ou de chargement et le temps de parcours.

-check simplify

Permet de simplifier un graphe en supprimant les boucles et multi-arêtes, ceci par un simple parcours du graphe après un tri de ses listes d'adjacences. Les arêtes sont affichées au format standard une par ligne, comme avec -width 1 -format standard. Cette option est un moyen rapide de sortir un graphe au "bon" format. Elle est insensible aux options d'affichage, en particulier -format. Il est possible de ne pas supprimer les boucles en utilisant -loop 0.

          Ex: gengraph loadc G -check simplify > H
	      gengraph load G -fast -permute -check simplify > H
La différence avec "gengraph load G > H", qui produit aussi une sortie valide, est qu'avec "gengraph loadc G -check simplify > H" le graphe G est lu et affiché en temps quasi-linéaire sans la (re)génération de ses arêtes en temps O(n²).

-check bfs s

Effectue un parcours en largeur d'abord sur le graphe généré depuis le sommet s. La distribution des distances depuis s est affichée, ainsi que l'arborescence (-1 indique que le sommet n'a pas de père). La longueur du plus petit cycle passant par s est aussi donnée. Elle vaut -1 s'il n'existe pas.

-check bellman s

Calcule les plus courts chemins depuis le sommet s par l'algorithme de Bellman-Ford. Si le graphe est géométrique, le poids de chaque arête correspond à la distance euclidienne entre ses extrémités, sinon il vaut 1 et le résultat sera similaire à un bfs. Dans le cas géométrique, l'étirement maximum depuis s est calculé, ainsi qu'un chemin le réalisant. L'implémentation à l'aide d'une file prend un temps linéaire en pratique.

-check stretch

Calcule, comme -check bellman s, l'étirement d'un graphe géométrique depuis chaque source s. On affiche une source atteignant l'étirement maximum, mais aussi une source atteignant l'étirement minimum, ainsi qu'un chemin réalisant ces étirements. Utilisez l'option "-format no" pour ne pas avoir l'affichage de la génération du graphe.

-check volm

Calcule la distribution du volume monotone des sommets. Le volume monotone d'un sommet u est le nombre d'arcs du sous-graphe des sommets accessibles depuis u dans le graphe où seuls les arcs u->v avec u<v ont été gardés. Cette mesure dépend de la numérotation des sommets. À utiliser en combinaison dans l'option -permute.

-check ball r

Calcule la distribution du nombre de sommets des boules fermées de rayon r des sommets.

          Ex: gengraph tree 1000 -format no -check ball 3

-check ncc
-check connected

Donne le nombre de composantes connexes, leur taille s'il y en a plusieurs, ainsi que le nombre de sommets d'articulations (cut-vertex) du graphe. Ces informations sont aussi affichées par -check dfs 0.

-check dfs s

Effectue un parcours en profondeur d'abord de toutes les composantes connexes du graphe généré depuis le sommet s. Complète l'affichage de -check ncc en affichant en plus l'arborescence (-1 indique une racine) ainsi que la distribution de profondeur des sommets.

-check deg
-check edge
-check edges

Affiche la distribution des degrés et le nombre d'arêtes du graphe.

-check degenerate

Donne la dégénérescence du graphe, ainsi que l'ordre d'élimination correspondant des sommets.

-check girth

Donne la maille du graphe dans le cas non orienté. La valeur -1 est renvoyée si le graphe est acyclique, et la valeur 0 dans le cas orienté.

-check diameter

Calcule le diamètre du graphe généré. Affiche +∞ pour un graphe non connexe.

-check radius

Calcule le rayon du graphe généré, soit la hauteur minimum d'un arbre couvrant. Affiche +∞ pour un graphe non connexe.

-check gcolor

Donne une borne supérieure sur le nombre chromatique du graphe en utilisant l'heuristique du degré minimum.

-check kcolor k

Donne une k-coloration du graphe (et la couleur pour chaque sommet), si c'est possible. Pour cela une recherche exhaustive de toutes les k-colorations est effectuée. Le temps est raisonnable si k=3 et n<20.

-check kcolorsat k

Donne une formulation SAT de la k-coloration du graphe. Il s'agit de la formulation multi-valuée classique, un sommet pouvant avoir plusieurs couleurs sans que cela nuise à la validité du résultat. Les contraintes sont décrites au format Dimacs CNF. On peut alors envoyer le résultat à un solveur SAT comme MiniSat ou Glucose. Le graphe n'est pas affiché, et donc "-format no" n'est pas nécessaire.

          Ex: gengraph linial 6 3 -check kcolorsat 3 | glucose -model

-check kindepsat k

Donne une formulation SAT d'un ensemble indépendant de taille k du graphe. Les variables i=1 à n indiquent si le sommet numéroté i-1 est dans la solution ou pas. Les contraintes sont décrites au format Dimacs CNF. On peut alors envoyer le résultat à un solveur SAT comme MiniSat ou Glucose. Le graphe n'est pas affiché, et donc "-format no" n'est pas nécessaire.

Pour le problème clique de taille k, il suffit de chercher un ensemble indépendant de taille k pour le complément du graphe. Et pour le problème "vertex cover" de taille k, c'est un ensemble indépendant de taille n-k sur le complémentaire qu'il suffit de chercher.

-check ps1
-check ps1b
-check ps1c
-check ps1x n u_1 v_1 … u_n v_n

Applique le test ps1 ou l'une de ses variantes (voir -filter ps1 pour plus de détail sur ce test). Affiche aussi le nombre de tests réalisés (nombre de paires de sommets et de chemins testés).

-check paths x y

Liste tous les chemins simples entre les sommets x et y. N'affiche rien si x et y ne sont pas connectés. L'ordre est défini suivant le premier plus court chemins dans l'ordre des sommets depuis le sommet x.

-check iso H

Teste si le graphe généré G est isomorphe à H. Ici H est un fichier de graphe au format standard ou bien - pour l'entrée standard. Si oui, l'isomorphisme de G à H est donné. Le nombre de tests affichés est le nombre de fois où les graphes sont comparés, la comparaison prenant un temps linéaire en la taille des graphes. Plus les graphes sont symétriques (comme un cycle ou un hypercube), plus le nombre de tests sera important.

          Ex: gengraph linial 4 2 | gengraph linialc 4 2 -check iso -
C'est exemple prend ~ 500 000 tests, soit 0"05 environ, pour ce graphe 4-régulier avec 12 sommets. Tester l'isomorphisme entre deux cycles de 8 sommets étiquetés aléatoirement prend environ 4 mille tests, et entre deux cycles de 12 sommets, 30 millions de tests soit 9" environ. Pour deux arbres à 75 sommets (aléatoires mais isomorphes), moins de 20 tests suffisent. En revanche, le teste pour des graphes arêtes et sommets transitifs à 16 sommets, comme "gpetersen 8 3" et "haar 133", est hors de portée.

-check sub H
-check span H

Teste si le graphe généré G est un sous-graphe couvrant de H (donc avec le même nombre de sommets). Ici H est un fichier de graphe au format standard ou bien - pour l'entrée standard. S'ils ont le même nombre d'arêtes, le test est équivalent à l'isomorphisme. Le nombre de tests est le nombre total de fois où deux graphes sont comparés. On peut tester si H est Hamiltonien en prenant pour G un cycle.

Tester un cycle de longueur 12 dans une grille 3x4 prend jusqu'à environ 32 millions de tests (parfois bien moins), soit au plus 10".

-check isub H

Teste si le graphe généré G est un sous-graphe induit de H. Contrairement à l'option -check sub, G et H n'ont pas forcément le même nombre de sommets. Ici H est un fichier de graphe au format standard ou bien - pour l'entrée standard.

-check minor H

Teste si le graphe G généré contient H comme mineur. Ici H est un fichier de graphe au format standard ou bien - pour l'entrée standard. Les graphes peuvent être non connexes. S'ils ont le même nombre de sommets le test est équivalent à celui du sous-graphe (voir -check sub). Dans le cas positif, un modèle de H dans G est fourni. Ci-dessous l'exemple teste si le graphe H = cube est un mineur de G = K_{3,7}. La réponse est non, après 2 729 118 tests en 16" environ.

          Ex: gengraph cube | gengraph bipartite 3 7 -check minor -
Le principe consiste à contracter des arêtes de G, de toutes les manières possibles, et à tester si H est un sous-graphe du graphe contracté. Le nombre de tests affichés est le nombre de contractions plus le nombre total de tests réalisés par les tests de sous-graphe. Pour H=K₄ il est préférable d'utiliser -check twdeg qui donne < 3 ssi le graphe ne contient pas K₄ comme mineur.

-check twdeg

Donne une borne supérieure et inférieure sur la treewidth du graphe. Pour la borne supérieure, on utilise l'heuristique du sommet de degré minimum que l'on supprime et dont on complète le voisinage par une clique. En cas d'égalité (même degré) on sélectionne le sommet dont il faut rajouter le moins d'arêtes. La borne inférieure qui est donnée provient de la dégénérescence. La treewidth est exacte si 0,1 ou 2 est retourné. L'algorithme est en O(n²).

-check tw

Calcule la treewidth du graphe en analysant tous les ordres d'éliminations. La complexité est donc en n!. Il ne faut l'utiliser que si le nombre de sommets est < 12 (Ex: gengraph random 12 .5 -check tw donne 5 en environ 750 millions de tests). Parfois, l'utilisation de -permute peut accélérer le traitement, car partir d'un ordre d'élimination déjà bon permet d'éliminer rapidement beaucoup d'ordres possibles.

-check maincc

Affiche, dans le mode standard seulement, le graphe correspondant à la composante connexe ayant le plus grand nombre de sommets. Le graphe initial n'est pas affiché. Les sommets sont renumérotés si le graphe initial n'était pas connexe. Attention ! l'affichage de la composante n'est sensible qu'à l'option -width. En particulier il n'est pas possible d'afficher la composante dans un autre format (-format) ou avec les noms originaux (-label). Cependant, avec "-check maincc | gengraph load -" on peut afficher le graphe dans le format souhaité, ou ajouter -visu. (Voir aussi le raccourcis -maincc.)

Notez que "-check maincc -visu" provoque une erreur, car -visu applique l'option "-format dot" incompatible avec -check maincc.

-check subdiv n

Affiche, dans le mode standard seulement, une subdivision uniforme du graphe telle que chaque arête possède n nouveaux sommets. Les variantes suivantes sont possibles, sélectionnables via l'option -variant v, m étant le nombre d'arêtes du graphe initial:

Si n<0, alors c'est équivalent à mettre |n·m| comme paramètre. Notez que "-check subdiv n -visu" provoque une erreur, car -visu applique l'option "-format dot" incompatible avec -check subdiv.

          Ex: gengraph clique 4 -check subdiv -30 | gengraph load - -visu

-check prune d

Affiche, dans le mode standard seulement, le sous-graphe obtenu en supprimant récursivement tous les sommets de degrés ≤ d.

          Ex: gengraph mesh 10 10 -delv .3 -check prune 1 | gengraph load - -visu

-check routing [hash h] [scenario [nomem] s] scheme [parameters]

Construit les tables de routage pour le graphe selon le schéma de routage "scheme", ce schéma pouvant comporter des paramètres spécifiques. La sortie consiste en statistiques sur les tables (taille, temps de calcul) et le graphe. L'option "scenario" permet en plus de tester certains types de routage (s) sur le graphe et d'afficher des statistiques sur les longueurs de routes générées (dont l'étirement). L'option "hash" permet de préciser la fonction de hashage (h) appliquée le cas échéant aux sommets souvent utilisés dans les schémas de type "name-independent". Le graphe doit être connexe et comporter au moins une arête, propriétés qui sont toujours testées.

          Ex: gengraph -permute rplg 200 2.3 -maincc > G1
	      gengraph loadc G1 -check routing scenario all cluster -1
L'option "nomem" après "scenario" permet d'optimiser la mémoire en ne stockant pas les distances calculées pour établir l'étirement (par défaut elles le sont). En contrepartie le temps de calcul est allongé. Cela peut avoir un intérêt si le graphe est très grand (n ≃ 1.000.000 sommets) et qu'un scenario comme "pair -1000" est testés. Les scenarii possibles sont (n=nombre de sommets du graphe):

Les fonctions de hachages h:[0,n[->[0,k[ possibles sont: (shuffle et mod atteignent le nombre de collisions minimum de ⎡ n/k⎤)

-check routing cluster k

Schéma de routage name-independent "cluster" de paramètre k. Un sommet de degré maximum est choisi comme "centre", puis k-1 de ces voisins de plus haut degrés sont choisis pour former un cluster de taille au plus k. Un arbre BFS est enraciné depuis le centre. Chaque sommet possède une boule par rayon croissant qui s'arrête avant de toucher un sommet du cluster. On route de u vers v d'abord dans la boule de u. Sinon on va dans le cluster pour chercher un sommet du cluster responsable du hash de v. Une fois atteint on route selon l'arbre BFS ou selon un plus court chemin si la distance à la destination est ≤ logn/loglogn. Les sommets ayant un voisin dans le cluster et qui ne sont pas eux-mêmes dans le cluster possèdent dans leur table tout leur voisinage. Les boules sont optimisées par l'usage d'un voisin par défaut.

Si k=-1, alors k est initialisé à ⎡ √n⎤. Si k=-2 il est initialisé à n si bien que le cluster est fixé à tout le voisinage du centre. Dans tous les cas, l'étirement est toujours ≤ 5. Il est même ≤ 3 si k=1. La taille des tables est réduit dans le cas de graphes power-law (comme RPLG). Il existe plusieurs variantes (option -variant v) où chacun des bits de v mis à 1 est interprété comme suit:

-check routing dcr k

Schéma de routage name-independent "dcr" de paramètre k>0 représentant le nombre de couleurs. C'est une simplification du schéma "agmnt". L'étirement est toujours ≤ 5 et le nombre d'entrées des tables est en moyenne f(k,n) = 2n/k + (k-1)·(H(k)+1) où H(k) ~ ln(k)+0.577… est le k-ième nombre harmonique. Le principe du schéma est le suivant. Chaque sommet possède une couleur, un entier aléatoire de [0,k[, les sommets landmarks étant ceux de couleur 0. Les boules de voisinages des sommets sont définies par volume comme la plus petite boule contenant au moins chacune des couleurs (ou tous les sommets s'il manque une couleur n'est pas représentée), les sommets du dernier niveau étant ordonnés par identifiant croissant. Le routage s→t s'effectue selon un plus court chemin si t est dans la boule de s ou si t est un landmark. Sinon, on route vers le sommet w de la boule de s dont la couleur est égale au hash de t, une valeur aussi dans [0,k[. Puis le routage w→t s'effectue dans l'arbre BFS enraciné dans le plus proche landmark de s ou de t, celui minimisant la distance de w à t.

Si k=-1, alors k est initialisé à sa valeur optimale théorique, celle qui minimise le nombre moyen d'entrées f(k,n), valeur calculée numériquement et qui vaut environ k ≃ √(n/ln(n))/2, ce qui donne environ 2√(n·ln(n·ln(n))) entrées en moyenne. Si k=-2, le nombre de couleur est initialisé à n. Les valeurs de k>n sont possibles, il s'agit alors d'un routage de plus court chemins comme pour le cas k=n ou k=1. Il existe une variante (-variant 1) lorsque k>1 qui a pour effet de choisir les landmarks comme les sommets de plus haut degré. Plus précisément, les ⎡ n/k⎤ sommets de plus haut degré sont coloriés 0 et les autres coloriés aléatoirement dans [1,k[. Dans cette variante, la borne sur l'étirement est toujours garantie mais plus sur le nombre maximum d'entrées. Cependant, pour certains graphes l'étirement moyen est amélioré.

-check routing agmnt k

Schéma de routage name-independent dit "agmnt" du nom de ces auteurs Abraham et al. (2008). C'est la version originale du schéma "dcr" qui diffère par l'algorithme de routage. Comme dans "dcr", le routage s→t s'effectue directement vers t si t est dans la boule de s ou est un landmark. Sinon, vers le sommet w de la boule de s dont la couleur est égale au hash de t. Le routage w→t s'effectue suivant la meilleure des options suivantes: router via un arbre BFS d'un des landmarks; ou bien router via un arbre couvrant la boule d'un sommet s' contenant à la fois w et un sommet x voisin d'un sommet y contenu dans la boule de t (les boules s' et de t, si elles existent, sont dites "contiguës via l'arête x-y"). L'étirement est toujours ≤ 3 et les tables ont le même nombre d'entrées que "dcr", bien que plus complexes. Le temps de calcul des tables est plus important que pour "dcr". Toutes les variantes de "dcr" (-variant, k<0) s'appliquent aussi à "agmnt".

-check routing tzrplg t

Schéma de routage étiqueté inspiré de celui de Thorup & Zwick (2001) optimisé pour les Random Power-Law Graphs (voir prlg) de paramètre réel t (power-law exponent) et proposé par Sommer et al. (2012). L'étirement est toujours ≤ 5. Les valeurs de t entre ]0,1.5] sont interdites. Le schéma utilise des sommets landmarks où des arbres BFS sont enracinés, ainsi que des boules (de voisinage) définies par rayons croissant qui s'arrête avant de toucher un landmark. Le routage s'effectue alors en priorité via les boules ou alors via le landmark le plus proche de la destination (sans raccourcis), information précisée dans l'étiquette de la destination. Les landmarks sont les sommets de plus haut degré. Par défaut (-variant 0) leur nombre vaut:

Si -variant 1 et t>1.5, alors les landmarks sont tous les sommets de degré > n^1/(2t-3). Si -variant 2 et t>0, alors les landmarks sont t sommets choisis aléatoirement. L'étirement est ≤ 3 si un seul landmark est choisi.

-check routing hdlbr k

Schéma de routage name-independent HDLBR selon Tang et al. (2013) avec k>0 landmarks qui sont les sommets de plus haut degré. Si k<0, alors k est initialisé à ⎡ √n⎤. Chaque sommet qui n'est pas un landmark possède une boule dont le rayon est juste inférieure au plus proche landmark. Chaque sommet possède sa boule boule inverse (qui peut être vide), définie comme l'ensemble des sommets le contenant dans leur boule. Chaque landmark a une couleur unique. On route directement de u à v si v est dans la boule de u, la boule inverse de u, ou si v est un landmark. Sinon, on route vers le landmark (selon un plus court chemin) dont sa couleur vaut le hash de v. Delà on route suivant un plus court chemin vers le plus proche landmark de v, l(v). On utilise ensuite le next-hop de l(v) vers v, un sommet nécessairement contenant v dans sa boule inverse. À chaque étape du routage, si v est dans la boule ou boule inverse du sommet courant, on route directement vers celui-ci. La longueur de route entre u et v est au plus 2d(u,v)+2r, où r est la distance maximum entre deux landmarks. La valeur de r est bornée par une constante pour k ≃ √n et pour les Random Power-Law Graphs (voir rplg).

-check routing bc k

Schéma de routage étiqueté selon Brady-Cowen (2006). L'étirement est additif ≤ 2k, et donc multiplicativement ≤ 2k+1. En particulier, si k=0, il s'agit d'un routage de plus court chemin. Il est adapté aux Power-Law Random Graphs (voir plrg). Le principe est le suivant: on construit un arbre BFS (=T) enraciné dans un sommet (=r) de plus haut degré. Le coeur (=C) est la boule de rayon k depuis r. On construit une liste (=L) de BFS couvrant G ainsi qu'une forêt (=H) de BFS de G comme suit. Au départ, L={T}, et H est la forêt T\C. Puis, pour chaque arête {u,v} de G\C\T, on vérifie si l'ajout de {u,v} à H crée un cycle ou pas. Si c'est non, on met à jour la forêt H en lui ajoutant {u,v}. Si c'est oui, on calcule un BFS de G de racine u (ou v) qu'on ajoute à L. Une fois le calcul de H terminé, on calcule une forêt BFS couvrante de H qu'on ajoute à L. L'algorithme de routage de u à v consiste simplement à router dans l'arbre de L qui minimise la distance de u à v.

-filter family[:range] [not] test [parameters]

Affiche les graphes d'une famille pour lesquels le test est vrai (ou faux si "test" est précédé de "not"). Le paramètre "family" est un nom de fichier ou "-" pour l'entrée standard. La lecture de la famille se fait en temps linéaire. Il contient la famille de graphes (ou un graphe seul) au format standard. La première ligne affichée contient le nombre de graphe de la famille résultante. L'affichage de chaque graphe est influencé par l'option -width qui doit être placée avant -filter. La variante "family:range" permet de sélectionner les graphes de la famille dont les identifiants sont spécifiés par "range", comme par exemple "family:5-8" qui sélectionne les graphes d'identifiant 5,6,7,8. De manière générale, "range" est un ensemble de valeurs selon le format "value" décrit ci-après (voir aussi -filter F id value). La variante "-:range" est possible.

Dans la suite, la présence de "value" dans les paramètres d'une option représente un ensemble de valeurs entières possibles. Par exemple, -filter F vertex '>5' filtre les graphes de la famille F comportant plus de 5 sommets. De manière générale, "value" est une suite d'intervalles d'entiers séparés par des "," (interprétées comme "ou"), chaque intervalle étant codé comme suit:

       Ex: -filter F vertex '5,7-13,>100'
           -filter F vertex '5-10,p'
           -filter F edge p
           -filter F id 5,7
           -filter F vertex p | head -1
           -filter … p | grep '^\[' | sort -rnk 3 | head
           -filter … p | grep '^\[' | sort -nk 3 | head
Le premier exemple filtre les graphes de la famille F ayant un nombre de sommets n vérifiant soit n=5, soit 7 ≤ n ≤ 13, ou soit n>100. L'exemple 2 affiche le nombre de sommets des graphes ayant entre 5 et 10 sommets. L'exemple 3 affiche le nombre d'arêtes de chaque graphe. L'exemple 4 affiche les graphes d'identifiant 5 et 7 de la famille F. L'exemple 5 affiche le nombre de graphes de la famille (ce qui correspond à la première ligne de commentaires). Les deux derniers exemples permettent d'avoir le maximum/minimum de "value".

Si "value" contient le symbole > ou < il est alors préférable de mettre des quotes ('>14' par exemple) pour que la commande soit correctement interprétée par le shell.

La différence principale avec -check est que le résultat de -filter est non verbeux alors que -check, qui ne s'applique pas a priori sur des familles de graphes mais sur un graphe seul, peut donner des explications sur l'exécution de l'algorithme dont la sortie n'est pas forcément un ou une liste de graphes. Aussi, avec -check l'algorithme s'applique au graphe généré, donc après un temps a priori en O(n²), alors qu'avec -filter c'est toujours à partir d'un fichier (ou de l'entrée standard), lu en temps linéaire.

-filter F id value

Filtre les graphes de F dont l'identifiant est déterminé par value. Cela permet d'extraire un ou plusieurs graphes donnés. C'est équivalent à "-filter F:value all".

-filter F rename shift

Affiche tous les graphes de la famille en renumérotant les graphes à partir de l'entier "shift".

-filter F vertex value

Filtre les graphes de F ayant un nombre de sommets déterminé par value.

-filter F edge value
-filter F edges value

Filtre les graphes de F d'un nombre d'arêtes déterminé par value.

-filter F all (= vertex t)

Affiche tous les graphes de F ce qui permet en particulier de savoir combien il y en a en examinant la première ligne affichée.

-filter F1 minus F2

Affiche F1\F2, c'est-à-dire tous les graphes de F1 qui ne sont pas isomorphes à F2 (si F2 est un graphe) ou à l'un des graphes de F2 (dans le cas d'une famille).

-filter F1 minus-id F2

Comme "minus" mais concerne les identifiants: supprime de F1 les graphes dont l'identifiant existe dans F2 (qui peut être un graphe ou une famille de graphes). La complexité est environ (|F1|+|F2|)·log|F2|, alors que pour "minus" elle est en |F1|·|F2|·T où T est le temps pour décider si deux graphes pris dans F1 et F2 sont isomorphes.

-filter F minor[-inv] H

Filtre les graphes de F contenant H comme mineur. La variante minor-inv filtre les graphes de F qui sont mineurs de H. Si H=K₄, il est préférable d'utiliser -filter tw2.

-filter F sub[-inv] H

Filtre les graphes de F contenant H comme sous-graphe, chaque graphe de F devant avoir le même nombre de sommets que H. La variante sub-inv filtre les graphes de F qui sont un sur-graphe de H.

-filter F isub[-inv] H

Filtre les graphes de F contenant H comme sous-graphe induit. La variante isub-inv filtre les graphes de F qui sont sous-graphes induits de H.

-filter F iso H

Filtre les graphes de F isomorphes à H.

-filter F degenerate value

Filtre les graphes de F de dégénérescence déterminée par value.

-filter F forest value

Filtre les graphes de F qui sont des forêts dont le nombre d'arbres est déterminé par value.

-filter F isforest (= forest t)

Filtre les graphes de F qui sont des forêts.

-filter F istree (= forest '=1')

Filtre les graphes de F qui sont des arbres.

-filter F cycle (= not forest t)

Filtre les graphes de F contenant au moins un cycle.

-filter F degmax/degmin value

Filtre les graphes de F de degré maximum (ou minimum) déterminé par value.

-filter F deg value

Filtre les graphes de F où tous les sommets ont un degré déterminé par value. Ainsi -filter deg 4-7 filtre les graphes avec un degré minimum au moins 4 et un degré maximum au plus 7.

-filter F gcolor value

Filtre les graphes de F dont le nombre de couleurs obtenu selon l'heuristique du degré minimum est déterminé par value.

-filter F bipartite (= gcolor <3)

Filtre les graphes de F qui sont bipartis.

-filter F component value

Filtre les graphes de F dont le nombre de composantes connexes est déterminé par value.

-filter F connected (= component 1)

Filtre les graphes de F qui sont connexes.

-filter F biconnected

Filtre les graphes de F qui sont 2-connexes. Un graphe G est k-connexe s'il n'y a pas d'ensemble avec <k sommets qui déconnecte G ou laisse G avec 1 sommet. Un graphe est 2-connexe s'il est connexe, ne possède pas de sommet d'articulation et a plus de 2 sommets. Les cliques de taille k+1 sont k-connexes.

-filter F radius value

Filtre les graphes de F dont le rayon est déterminé par value. Le rayon est la profondeur du plus petit arbre couvrant le graphe. Il vaut -1 si le graphe n'est pas connexe.

-filter F girth value

Filtre les graphes de F dont la maille est déterminée par value. La maille est la taille du plus petit cycle. Elle vaut -1 si le graphe n'a pas de cycle. Elle n'est définie que si les graphes sont orientés.

-filter F diameter value

Filtre les graphes de F dont le diamètre est déterminé par value. Le diamètre vaut -1 si le graphe n'est pas connexe.

-filter F cut-vertex value

Filtre les graphes de F dont le nombre de sommets d'articulations est déterminé par value. Un sommet est un point d'articulation si sa suppression augmente le nombre de composante connexe. Les sommets de degré 1 ne sont pas des point d'articulation. Le graphe est biconnexe ssi value<1 ou si le graphe est une clique avec au moins deux sommets. On peut tester si un graphe est une clique avec -filter degmin ou -filter deg.

-filter F ps1
-filter F ps1b
-filter F ps1c
-filter F ps1x n u_1 v_1 … u_n v_n

Filtre les graphes G de la famille F dont le test ps1 est vrai, c'est-à-dire si l'évaluation de la fonction f(G,{}) décrite ci-après est vraie.

Soit P un chemin d'un graphe G tel que G\P est connexe. La fonction f(G,P) est vraie ssi G est vide (en pratique |G|-|P|<3 suffit) ou s'il existe deux sommets x,y de G où y n'est pas dans P tels que pour tout chemin Q entre x et y dans G "compatible" avec P (c'est-à-dire P et Q s'intersectent en exactement un segment) on a les deux conditions suivantes: (1) il n'y a pas d'arête entre les sommets de P\Q et de G\(Q∪P); et (2) pour toute composante connexe C de G\(Q∪P), f(C∪Q,Q) est vraie. Le test est optimisé dans un certain nombre de cas, en particulier: les arbres (toujours vrai), les cliques (vrai ssi n<5).

La variante ps1b calcule et affiche de plus un graphe des conflits (affichage modifiable par -width), chaque noeud de ce graphe correspondant à un argument (C∪Q,Q) évalué à faux par f. La valeur (ou code) d'un noeud est 0 (=lourd ou faux), 1 (=léger ou vrai) ou - (indéterminée). Suivant certaines règles, les valeurs 0 ou 1 sont propagées selon le type des arêtes du graphes des conflits. Résoudre le graphe des conflits revient à trouver une affectation des valeurs 0 ou 1 aux noeuds qui respecte (sans contradiction) toutes les règles.

La fonction f(G,{}) est évaluée à vraie si le graphe des conflits n'a pas de solution, c'est-à-dire si une contradiction a été découverte ou si pour une paire de sommets (x,y) tous ses noeuds sont à 1.

On affiche le code d'un noeud (0,1,-) ainsi que les sommets de sa composante (par ex: [237]). Les noeuds du graphe des conflits sont reliées par des arêtes typées. Les voisins v d'un noeud u sont listés avec le type de l'arête, si l'un des 4 cas suivants se produit (il n'y a pas d'arête entre u et v dans les autres cas):

v< (la composante de v est incluse dans celle de u) v> (la composante de v contient celle de u) v= (les composantes de u et v sont les mêmes) v| (les composantes de u et v sont disjointes)

Parmi les règles on trouve par exemple: si deux noeuds du graphe des conflits u=(C∪Q,Q) et v=(C'∪Q',Q') sont disjoints, c'est-à-dire C n'intersecte pas C', alors seule une des expressions f(C∪Q,Q) ou f(C'∪Q',Q') peut être fausse, pas les deux. Dit autrement, les composantes de u et v ne peuvent pas être "lourdes" (=0) toutes les deux en même temps. Et donc, si le code de u est 0, celui de v est 1. Notons que le code de u et v égale à 1 est compatible avec cette règle.

La variante ps1c est similaire à ps1b sauf que récursivement seul le test ps1 est appliqué, et pas ps1b. Le test ps1c est plus long que ps1 mais plus rapide que ps1b. La variante ps1x est similaire à ps1b sauf que les valeurs v_i sont écrites dans le noeuds u_i du graphe des conflits principal (pas ceux générés lors des appels récursifs). Plus précisément, v_1 (0 ou 1) est écrit dans le noeud u_1, puis sa valeur est propagée. Ensuite v_2 est écrit puis propagée, etc.

Dans tous les cas, si G n'est pas connexe, le résultat n'est pas déterminé.

-filter F tw value

Filtre les graphes de F selon leur treewidth. L'algorithme pour le calcul de la treewidth est assez lent. Pour les petites valeurs de tw, des alternatives sont possibles (voir -check tw et -filter tw2). Pour savoir si un graphe G est de treewidth 3 il suffit de savoir si G contient l'un des 4 mineurs suivants:

              echo "[0]"  > F; ./gengraph clique 5 >> F
	      echo "[1]" >> F; ./gengraph wagner >> F
	      echo "[2]" >> F; ./gengraph prism 5 >> F
	      echo "[3]" >> F; ./gengraph hajos >> F ; echo "0-1-2-0" >> F
	      cat G |./gengraph -filter F minor-inv - -format no

-filter F tw2

Affiche les graphes de F de treewidth ≤ 2. L'algorithme est en O(n²). Ce test peut être utilisé pour tester (plus rapidement qu'avec -filter minor) les graphes sans mineur K₄.

-filter F hyper value

Filtre les graphes de F selon leur hyperbolicité. Il s'agit de la valeur (entière) maximum, sur tous les quadruplets de sommets {u,v,x,y}, de la différence des deux plus grandes sommes parmi les sommes de distance : uv+xy, ux+vy et uy+vx. La complexité est en O(n⁴).

-format type

Spécifie le format de sortie. Il est préférable d'utiliser cette option en dernier. Les valeurs possibles pour "type" sont:

Les formats matrix/smatrix/list/vertex nécessitent de stocker le graphe en mémoire, donc nécessite un espace en O(n+m), alors que le graphe est généré à la volée pour les formats standard, dot ou html. Pour html, nécessite le script vis.min.js qui est chargé soit localement s'il existe soit sur un dépôt externe officiel sinon. Le script peut être lent pour le calcul des coordonnées à partir d'une centaine de sommets. Les valeurs les plus utilisées de <type> pour le format dot<type> sont: pdf, fig, svg, ps, jpg, gif, png (voir man dot ou faire dot -T.).

L'option -format dot<type> est équivalent à "-format dot | dot -T<type>". Par conséquent, elle doit donc être utilisée en dernier. Le filtre dot utilisé pour dessiner le graphe peut être spécifié par l'option -dot filter. L'affichage des noms de sommets est contrôlé par l'option -label.

Les positions affichées dans le format dot ([pos="…"]) diffèrent d'un facteur proportionnel à √n par rapport aux positions originales du graphe (qui peuvent être affichées par -format xy ou -label -3). Ce facteur permet de garder une taille raisonnable pour les sommets car sous dot les sommets ont une taille fixe minimale.

-vcolor option [parameters]

Ces options permettent de modifier la couleur des sommets. Ces options n'ont d'effets qu'avec le format dot (et ses variantes y compris -visu). Par défaut les sommets sont de couleur noire. Notez que les attributs par défaut des sommets (couleurs, formes, etc.) peuvent être modifiés directement par dot (voir l'option -N de dot). Cependant l'option -vcolor permet d'individualiser la couleur d'un sommet, en fonction de son degré par exemple. Ici le degré est le degré non-orienté. Il peut avoir plusieurs options -vcolor pour une même commande.

-vcolor deg[r]

La couleur dépend du degré du sommet (deg) ou du rang du degré du sommet (degr). Ainsi, les sommets de plus petit degré obtiennent la première couleur de la palette, les sommets de plus grand degré la dernière couleur de la palette, et les autres sommets une couleur intermédiaire de la palette. Donc une seule couleur est utilisée si le graphe est régulier.

-vcolor degm

Effectue une coloration propre (deux sommets voisins ont des couleurs différentes) suivant l'heuristique du degré minimum: récursivement, le sommet de degré minimum obtient la plus petite couleur qui n'est pas utilisée par ses voisins. Cela donne des colorations avec assez peu de couleurs pour les graphes de faible arboricité (planaire, tw, pw, kout, expander, …) ou de faible degré. Avec cette technique, les graphes bipartis (tree, crown, …) sont coloriés avec deux couleurs. Cette option nécessite un espace et un temps en O(n+m).

-vcolor randg

Effectue une coloration propre en utilisant un algorithme glouton sur un ordre aléatoire des sommets: récursivement, le sommet d'indice i obtient la plus petite couleur qui n'est pas utilisée par ses voisins d'indice j<i. Cette option nécessite un espace et un temps en O(n+m).

-vcolor kcolor k

Effectue une k-coloration propre du graphe, si c'est possible. Si cela n'est pas possible, la première couleur est appliquée à tous les sommets. L'algorithme (exponentiel) est le même que celui utilisé pour -check kcolor.

-vcolor pal grad

Permet de fixer la palette de couleurs utilisée par les sommets. Le paramètre "grad" est un mot sur l'alphabet [a-z] (sans les guillemets). Les caractères en dehors de cet alphabet sont ignorés. Chaque lettre correspond à une couleur de base:

           a=aquamarine     h=hotpink      o=olive         v=violet
	   b=blue           i=indigo       p=purple        w=white
	   c=cyan           j=orange       q=pink          x=gray
	   d=darkorange     k=khaki        r=red           y=yellow
	   e=chocolate      l=lavender     s=salmon        z=black
	   f=forestgreen    m=magenta      t=teal
	   g=green (lime)   n=navy         u=yellowgreen
La palette est calculée selon une interpolation linéaire entre les points définis par le mot "grad". Par exemple, si "grad" vaut rb, la palette sera composée d'un dégradé allant du rouge (r) au bleu (b). Si "grad" vaut rgbr, le dégradé ira du rouge au vert puis au bleu et enfin au rouge. Pour avoir une couleur (de base) unique, disons w, sur tous les sommets, poser "grad" égale à w. Par exemple, pour avoir tous les sommets blancs, on peut faire:

              gengraph gabriel 30 -vcolor deg -vcolor pal w -visu
La palette par défaut correspond au mot "grad" suivant: redjykugfocatbhsqvmpinzxlw. On peut visualiser la palette avec l'option "-vcolor list".

-vcolor list

Produit l'affichage de la palette des couleurs utilisées pour un graphe plutôt que le graphe lui-même. Cela permet en particulier de savoir combien de couleur ont été utilisées. La palette est générée en affichant au format dot un graphe particulier où les sommets (représentés par un rectangle) sont les couleurs utilisées. Utilisez -visu pour visualiser la palette sous forme pdf. Le nom des sommets correspond à la lettre de la couleur de base comme spécifié par -vcolor pal.

          Ex1: gengraph gabriel 50 -vcolor degm -vcolor list
	  (génère la palette utilisée pour ce graphe de Gabriel)
          Ex2: gengraph prime 53 -vcolor list
	  (un moyen simple de générer la palette par défaut)
          Ex3: gengraph clique 100 -vcolor degm -vcolor pal rb -vcolor list
          (génère un dégradé de 100 couleurs allant du rouge au bleu)

-vsize

La taille des sommets est proportionnelle à son degré, alors que par défaut elle est fixe. Cette option n'a d'effet qu'avec le format dot (et ses variantes). Elle peut être combinée avec -vcolor.

-visu
-visuh

Crée un fichier "g.pdf" (ou "g.html" pour -visuh) permettant de visualiser le graphe. Il s'agit d'un raccourci de l'option "-format dotpdf" ("-format html") qui rajoute également la redirection "> g.pdf" ("> g.html") en fin de la ligne de commande.

-maincc

Affiche la composante connexe principale du graphe, les sommets étant éventuellement renumérotés si le graphe n'est pas connexe. C'est un raccourci pour "-check maincc | gengraph load - -fast". (Voir aussi -check maincc.) Cet affichage est réalisé en temps linéaire grâce à l'option -fast. Les options placées avant -maincc affectent le graphe initial alors que celles placées après affectent la composante principale. Les options ayant un effet pour les formats hors standard (comme -vsize ou -visu) ne devraient être placées qu'après cette option.

-dot option [parameters]

Cette option permet de contrôler la sortie au format dot. Elle permet par exemple de modifier le filtre, la longueur des arêtes ou l'échelle du dessin.

-dot scale s

Spécifie le facteur d'échelle pour le format dot. Cela affecte les coordonnées des sommets et des arêtes, pas des étiquettes (sommets ou arêtes). Cela permet d'écarter les sommets les uns des autres si nécessaires. Le format pour s prend plusieurs formes: x ou x,y pour un facteur d'échelle identique ou pas en X et Y. La valeur par défaut est s=1. On peut aussi mettre "auto" qui calcule automatiquement un facteur d'échelle (symétrique en X et Y) qui vaut 1/√n ou 1/max(ΔX,ΔY) dans le cas de graphes géométriques.

          Ex: gengraph gabriel 10 -label -3 -dot scale 3,2 -visu

-dot len p

Spécifie la longueur des arêtes pour le format dot et le filtre "neato". La valeur par défaut est 1, et une valeur plus grande (comme 2.5 ou 3) allonge les arêtes et permet dans certains cas de mieux visualiser le graphe. C'est parfois nécessaire pour éviter l'intersection des sommets lorsqu'on utilise -label 1. On peut obtenir le même genre d'effet avec -dot scale.

-dot dir type

Spécifie le type d'orientation et l'affichage d'une arête pour le format dot. Cela revient à mettre l'attribut dir=type pour les arêtes. Il faut que "type" soit l'un des mots clés suivants: forward, back, both, none. L'effet est de modifier le rendu d'un arc A->B, voir d'une arête A--B, présent dans le .dot. Cela n'affecte pas les autres format. Pour type=back, c'est l'arc inverse qui sera affiché, comme si on avait mis B->A (car en dot A<-B n'est pas autorisé). C'est très utile en combinaison avec l'option -directed. Pour type=both, c'est A<->B qui sera affiché. Pour type=none, c'est A--B qu'on affiche (cas non-orienté par défaut) et pour type=forward, c'est A->B (cas orienté par défaut).

L'exemple ci-après affiche un arbre avec une orientation vers ses fils (au lieu de son père comme par défaut).

          Ex: gengraph tree 15 -label 1 -directed -dot dir back -visu

-dot filter f

Spécifie le filtre de GraphViz, c'est-à-dire l'algorithme de dessin utilisé par dot. Par défaut, le filtre est "neato". Les filtres principaux sont: dot, neato, twopi, circo, fdp, sfdp, … Faire "dot -K ." pour afficher les filtres disponibles.

-dot attr s

Ajoute un ou plusieurs attributs lors de la génération du graphe au format dot. La chaîne de caractères s est simplement ajoutée au corps du graphe avant la description des arêtes et des sommets. On peut mettre dans s autant d'attributs que l'on veut, mais on ne peut mettre qu'une seule option -dot attr. Attention ! L'ajout d'attributs d'arêtes peut provoquer la création de multi-arêtes.

         Ex: gengraph tree 20 -dot attr "0 [color=red]; 0--1 [color=blue];" -visu

-pos b

Active (b=1) ou désactive (b=0) la génération des positions des sommets pour le format dot. Cela sert à indiquer à l'algorithme de dessin dot de respecter (b=1) ou pas (b=0) les coordonnées des sommets. L'option par défaut est -pos 0, mais cette option est activée pour tous les graphes géométriques (udg, gabriel, thetagone, …).

-label b

Active (b≠0) ou désactive (b=0) l'affichage du nom des sommets pour les formats dot et standard. Les valeurs possibles de l'entier b sont b∈[-3,3]. Si b=1, il s'agit du nom original du sommet, par exemple un mot binaire pour l'hypercube. Cette fonctionnalité n'est pas implémentée pour tous les graphes, le nom par défaut étant les entiers de [0,n[ où n est le nombre de sommets du graphe généré. L'option -label 1 -visu permet alors d'afficher sur le dessin du graphe le nom des sommets. Ils ne le sont pas par défaut (b=0). L'option -label 2 -visu force l'affichage des noms sous forme d'entiers de [0,n[ et non pas du nom original (s'il était défini). L'option -label 3 permet, dans le cas de graphe géométrique (ou si -pos 1), d'afficher les coordonnées des points. Si b<0, alors l'effet est similaire à -label |b| sauf que le nom du sommet est affiché à coté du sommet et non au centre. L'option -label 1 annule l'option -permute, mais -label 2 ne le fait pas. Comme l'option -label influence -format dot<type>, -label devrait être placée avant -format.

       Ex: gengraph petersen -label 1 -width 1
           gengraph petersen -label 1 -format dot | grep label
           gengraph petersen -label 1 -dot len 2 -visu
           gengraph gabriel 30 -pos 0 -label 1 -visu
	   gengraph gabriel 30 -label -3 -dot scale 4 -xy round 2 -visu

-norm ℓ [parameters]

Fixe la norme d'un vecteur (x,y) du plan (ou la fonction de distance entre deux points du plan) pour l'adjacence de certains graphes géométriques (dont udg, gabriel, rng, nng, …). Par défaut c'est la norme Euclidienne qui est utilisé. Les valeurs possibles pour ℓ sont:

Il s'agit de pseudo-norme (ou pseudo-distance) puisque par exemple la norme "Lmin" ne vérifie pas l'inégalité triangulaire. La norme polygonale est le rayon du cercle inscrit dans le polygone régulier convexe à p cotés contenant (x,y), le polygone étant centré en (0,0) et orienté de façon à avoir son coté le plus à droit vertical. Ainsi "poly 4" correspond à la norme "Lmax". Une valeur de p<3 est interprétée comme p=+∞ ce qui correspond à la norme Euclidienne. Attention ! la norme "poly p" n'est pas toujours symétrique, lorsque p est impair par exemple. La norme (ou distance) hyperbolique n'est définie que pour des points du disque ouvert unité centré en (0,0).

-xy option [parameters]

Cette option contrôle la façon dont sont générées les coordonnées des sommets d'un graphe géométrique. Par défaut les positions sont tirées aléatoirement uniformément dans le carré [0,1[², mais cela peut être changé grâce à -xy. Notez bien que, même si c'est improbable, deux sommets peuvent avoir les mêmes positions (voir l'option -xy unique). Il est possible de visualiser les points issus des options -xy (voir le graphe "point n"). La présence d'une option -xy active l'option -pos et rend le graphe géométrique comme:

       Ex: gengraph path 20 -xy unique -visu

-xy load file

Charge les positions à partir du fichier "file" ou de l'entrée standard si file=-. Cela permet de tester les adjacences d'un graphe géométrique à partir de positions pré-déterminées. Le format est celui de -format xy.

          Ex: gengraph gabriel 10 -xy load file.pos
Le nombre de sommets du graphe est déterminé par le fichier et non par les paramètres du graphe. Cette option n'a d'effet que pour les graphes géométriques. La structure du fichier texte doit être:

                 n
		 x_1 y_1
		 x_2 y_2
		 …
		 x_n y_n
où n est le nombre de positions. Les positions x_i y_i ne sont pas forcément dans l'intervalle [0,1[. Notez qu'avec l'option -format xy, il est possible d'effectuer la transformation d'un fichier de positions. L'exemple suivant normalise les coordonnées du fichier g.pos dans le carré unité:

          Ex: gengraph -xy load g.pos -xy box 1 1 -format xy

-xy box a b

Effectue un redimensionnement des positions de sorte quelles se situent dans le rectangle [0,a[ × [0,b[. En prenant a=b=1, les coordonnées seront renormalisées dans le carré [0,1[². Cette opération est effectuée juste avant la génération des arêtes, mais après avoir effectué l'opération -xy noise (voir ci-après) et/ou -xy load.

-xy grid p

Ajoute une grille p × p au graphe généré, ce qui est utile lorsque les coordonnées des points sont entiers. Techniquement, on ajoute au format de sortie dot un sous-graphe représentant la grille où les sommets et les arêtes sont de couleur grise. Si p<0, alors le paramètre est initialisé à 1+⎣ √n⎦ ou bien à n si l'option "-xy permutation" est présente, n étant le nombre de sommets du graphe. Pour être visible, le nombre de lignes (et de colonnes) de la grille générée doit être au moins 2.

-xy zero

Ajoute l'origine (0,0) au dessin qui est représenté par un cercle rouge.

-xy vsize f

Facteur de grossissement des sommets pour le format dot. Par défaut f=1.

-xy noise r p

Effectue une perturbation aléatoire sur les positions des sommets. Le déplacement de chaque sommet est effectué dans sa boule de rayon r (pour p>0) selon une loi en puissance de paramètre p. Prendre p=0.5 pour une perturbation uniforme dans cette boule, p>0.5 pour une concentration des valeurs vers le centre et p<0.5 pour un écartement du centre. Les valeurs <0 de p donne des écartements au delà du rayon r.

Plus précisément, une direction (angle de 0 à 2𝜋) est choisie aléatoirement uniformément, puis, selon cette direction, un décalage aléatoire est effectué selon une loi en puissance: si x est uniforme dans [0,1[, le décalage sera d(x)=r·x^p. Après cette opération, il est possible que les points ne soient plus dans le rectangle d'origine, ce qui peut bien sûr être corrigé par -xy box.

-xy seed k p

Génère les points à partir (ou autour) de k>0 graines. Les graines sont choisies uniformément dans le carré [0,1[² puis centrées par rapport à leur barycentre. Chaque point est alors tiré aléatoirement autour d'une des graines et à une distance variant selon une loi en puissance (voir -xy noise) de paramètre p et de rayon r ≃ √(ln(k+1)/k). Ce rayon correspond au seuil de connectivité pour un Unit Disk Graph à k sommets dans le carré [0,1[² (voir udg n r). On peut obtenir une distribution uniforme dans un disque avec -xy seed 1 0.5 (voir aussi -xy disk) sauf que le centre est en (1/2,1/2) au lieu de (0,0) comme avec -xy disk.

          Ex: gengraph point 1000 -xy seed 1 1
	      gengraph point 1000 -xy seed 1 0.5

-xy permutation

Génère les points correspondant à une permutation 𝜋 aléatoire uniforme. Le point i aura pour position (i,𝜋(i)).

-xy mesh x y

Génère tous les points de coordonnées entières correspondant aux sommets d'une grille de x colonnes et de y lignes.

-xy cycle

Génère les points régulièrement espacés le long d'un cercle de centre (0,0) et de rayon 1. Les points sont ordonnées selon l'angle de leurs coordonnées polaires.

          Ex: gengraph cycle 10 -xy cycle -visu

-xy unif

Génère les points aléatoirement uniformément dans le carré [0,1[². C'est la distribution par défaut.

-xy circle

Génère les points aléatoirement uniforme le long d'un cercle de centre (0,0) et de rayon 1. Les points sont ordonnées selon l'angle de leurs coordonnées polaires.

-xy disk

Génère les points aléatoirement uniforme dans le disque unité de centre (0,0) triés selon l'angle de leurs coordonnées polaires. Cette distribution permet de générer, par exemple, un polygone "star-shaped". La distribution est similaire à l'option "-xy seed 1 0.5" sauf que les points sont ordonnées.

          Ex: gengraph cycle 25 -xy disk -visu
Remarque: les points sont générés avant l'application des options comme -xy round, -xy noise, ou -xy unique qui modifient les coordonnées et qui peuvent donc produire des croisements avec le graphe cycle par exemple.

-xy hyper p

Génère les points aléatoires selon une loi exponentielle de paramètre p dans le disque unité de centre (0,0), chaque point étant placé à une distance exp(-p·u) du centre où u est uniforme dans [0,1]. Les points sont triés selon l'angle de leurs coordonnées polaires.

-xy convex
-xy convex2

Génère les points aléatoirement en position convexe à l'intérieur d'un cercle de rayon 1 et de centre (0,0), ce qui peut être modifié par -xy ratio. Ils sont numérotés consécutivement selon le parcours de l'enveloppe convexe. On les génère comme suit, n étant le nombre points à générer. Inductivement, une fois que n-1 points en position convexe ont été générés, on choisit un angle 𝛼 aléatoire du cercle de rayon 1 et de centre (0,0) supposé à l'intérieur du convexe. On détermine ensuite la partie S du segment d'angle 𝛼 où chacun des points de S=[a,b[ forment avec les n-1 points précédant un convexe. Enfin, on choisit aléatoirement un point de S selon la probabilité √|b-a| pour obtenir n points en position convexe. Les angles des trois premiers points sont choisis parmi trois secteurs non adjacents d'angle 𝜋/3 si bien que l'origine est toujours à l'intérieur de l'ensemble convexe.

La variante -xy convex2 génère également des points aléatoires en position convexe, selon la méthode suivante. On génère n points aléatoires u_i du carré [0,1[² puis on calcule les vecteurs différences v_i ≡ u_{i+1}-u_i (mod n). Les vecteurs (dont la somme est nulle) sont ensuite triés par angle croissant, puis les points en position convexe sont obtenus de proche en proche en ajoutant chacun des vecteurs v_i. Cette méthode tend à générer des points proches d'un cercle, chaque angle et chaque longueur entre deux points consécutifs suivant une loi normale.

          Ex: gengraph cycle 25 -xy convex -visu
	      gengraph dtheta 100 6 -xy convex -visu
L'ordre des sommets peut être modifié par certaines options (voir la remarque de l'option -xy disk).

-xy polygon p

Génère des points aléatoires uniformément dans un polygone convexe régulier à p≥3 cotés inscrit dans le cercle de centre (0,0) et de rayon 1 de sorte qu'un des cotés du polygone soit vertical. Les sommets ne sont pas spécifiquement ordonnés. Pour une distribution uniforme dans un disque, soit lorsque p=+∞, utiliser -xy disk. L'option pour p=4 est similaire à -xy unif, sauf que pour p=4 la distribution est dans le carré [-c,+c[ × [-c,+c[ où c = cos(𝜋/4) = ½√2 ≃ 0.707… au lieu du carré [0,1[².

-xy ratio r

Modifie les distributions de points faisant intervenir une forme de largeur 1 et de hauteur r, comme: -xy unif, -xy circle, -xy cycle, -xy convex, -xy disk, -xy seed. La valeur par défaut est r=1. Le réel r>0 est donc le ratio de la hauteur par la largeur de la forme. Par exemple, pour la distribution par défaut (-xy unif), les points seront aléatoires uniformes dans le rectangle [0,1[ × [0,r[. Si la forme est un cercle (-xy circle ou -xy disk), alors la forme devient une ellipse dont le rayon horizontal est 1 et celui vertical r. Dans le cas de -xy seed, les graines sont alors générés dans le rectangle [0,1[ × [0,r[.

-xy surface s

Définit la signature s de la surface sur laquelle va être construit le graphe géométrique. La surface peut-être orientable ou non, avec ou sans bord. Elle est représentée par un polygone convexe régulier inscrit dans un cercle de rayon 1 et dont les 2|s| cotés sont appariés. Cette option se charge également de générer des points aléatoirement uniformes sur la surface. La signature est un mot s sur l'alphabet {h,c,b} de longueur |s|=2g, où g est le genre de la surface, indiquant comment sont appariés les 4g cotés du polygone. Chaque coté est apparié avec le coté +2 (le suivant du suivant) ou le coté -2 selon l'une des trois coutures suivantes:

La caractéristique d'Euler de la surface (ou sa courbure) vaut 2-|s| = 2-2g. Certaines signatures ont des synonymes. Par exemple, "-xy surface torus" est synonyme de "-xy surface hh" (voir ci-dessous leurs listes).

          Ex: -xy surface bb (ou plane ou square)  → plan réel
              -xy surface hb (ou cylinder) ....... → cylindre
              -xy surface cb (ou mobius) ......... → ruban de Möbius
              -xy surface hh (ou torus) .......... → tore
	      -xy surface ch (ou klein) .......... → bouteille de Klein
              -xy surface cc (ou projective) ..... → plan projectif
	      -xy surface hhhh ................... → double tore
Cette option active également -xy polygon 4g et -xy ratio 1 pour générer des points aléatoires uniformément sur la surface.

-xy round p

Arrondi les coordonnées à 10^-p près. Il faut que p soit un entier < DBL_DIG, soit p<15 en général. Donc p=0 arrondi à l'entier le plus proche. Cet opérateur est appliqué après -xy box. Il sert aussi à préciser le nombre de décimales à afficher pour l'option -format xy (par défaut p=6). Par exemple, la combinaison -xy box 100 100 -xy round -1 permet d'avoir des coordonnées multiples de 10.

-xy unique

Supprime les sommets en double, correspondant aux mêmes positions. Cela peut être utile lorsqu'on utilise -xy round par exemple. Cette opération est appliquée après toutes les autres, notamment après -xy box et -xy round. Ceci est réalisé à l'aide d'un tri des points, l'ordre n'est donc pas préservé).

GRAPHES

Deux types de graphes sont possibles : les graphes de base et les graphes composés. Ces derniers sont obtenus en paramétrant un graphe de base. Une catégorie importante de graphes sont les graphes géométriques (qui peuvent être composés ou de bases). L'adjacence est déterminée par les coordonnées associées aux sommets. De nombreuses options s'y réfèrent. Ils activent tous par défaut l'option -pos. Les graphes orientés activent quant à eux tous l'option -directed.

GRAPHES DE BASE :

grid n_1 … n_k .

Grille à k dimensions de taille n_1 × ⋯ × n_k. Si la taille n_i est négative, alors cette dimension est cyclique. Par exemple, "grid -10 ." donnera un cycle à 10 sommets.

ring n c_1 … c_k .

Anneaux de cordes à n sommets chacun ayant k cordes de longueur c_1,…,c_k. Par exemple, "ring 10 1 ." donnera un cycle à 10 sommets. Chaque cᵢ peut être positif ou négatif, mais il faut cᵢ≥-n. Si k=0, il s'agit d'un stable à n sommets. L'option -directed permet d'obtenir une k-orientation.

cage n c_1 … c_k .

Graphe pouvant servir à la construction de graphes n-cage, c'est-à-dire aux plus petits graphes cubiques à n sommets de maille donnée. Ils sont toujours Hamiltoniens. Ils peuvent être vus comme des anneaux de cordes irréguliers. Ils sont construits à partir d'un cycle de longueur n découpé en n/k intervalles de k>0 sommets. Le i-ème sommet de chaque intervalle, disons le sommet numéro j du cycle, est adjacent au sommet numéro j+cᵢ du cycle (modulo n). Chaque cᵢ peut être positif ou négatif, mais il faut cᵢ≥-n. Il est aussi possible de construire des graphes avec des sommets de degré 4 comme "cage 8 0 2 .", le graphe de Chvátal, ou avec des sommets de degré 2 comme "cage 4 2 0 .".

arboricity n k

Graphe d'arboricité k à n sommets aléatoire. Ce graphe est composé de l'union de k>0 arbres aléatoires. Il est donc toujours connexe. Chacun des arbres est un arbre plan enraciné aléatoire uniforme dont les sommets sont permutés aléatoirement, sauf le premier arbre dont les sommets sont numérotés selon un parcours en profondeur. Ces graphes possèdent au plus k·(n-1) arêtes, et pour k=1 il s'agit d'un arbre. L'option -directed permet d'obtenir une k-orientation.

rarytree n b z

Arbre b-aire plan aléatoire uniforme à n noeuds internes. Il faut b≥2. Il possède bn+1+z sommets, z étant un paramètre valant 0 ou 1. La racine est de degré b+z, les autres sommets sont de degré b+1 (soit b fils) ou 1 (=feuille). Les sommets sont numérotés selon un parcours en profondeur modifié: tous les fils du sommet courant sont numérotés avant l'étape de récursivité. Si n=1, alors le graphe est une étoile à b+z feuilles. Le dessin avec dot (-visu) ne respecte pas le plongement de l'arbre. L'option -directed permet d'obtenir une 1-orientation.

ringarytree h k r p

Arbre de hauteur h où chaque noeud de profondeur < h à exactement k fils, sauf la racine qui en possède r. Lorsque p>0, un chemin (si p=1) ou un cycle (si p=2) est ajouté entre les sommets de même profondeur. Notez que "ringarytree h 1 r 0" génère une étoile de degré r où chaque branche est de longueur h. Numérotés selon un parcours en profondeur, le nom des sommets est un mot correspondant au chemin depuis la racine.

rectree h f_1 f_2 ... f_d .

Arbre récursif de hauteur h où chaque noeud profondeur < h à exactement d fils, le i-ème fils étant la racine d'un arbre similaire de profondeur h-fᵢ. Il faut fᵢ>0. Ainsi "rectree h 1 1 ." est un arbre binaire complet de hauteur h. Le graphe "rectree h 1 1 ... 1 ." est un arbre complet de hauteur h identique à "ringarytree h d d 0". L'arbre est composé d'un seul sommet si d=0 ou h<=0. C'est une étoile si h>0 et d>=h. Le nombre de sommets est exponentiel en h dès que d≥2, plus précisément de la forme 𝛼·ρ^h-1 pour des constantes 𝛼>0 et ρ>1 dépendant des fᵢ. Pour f₁=f₂=1, 𝛼=ρ=2. Pour f₁=1 et f₂=2, 𝛼≃1.23 et ρ≃1.61. Pour f₁=1 et f₂=3, 𝛼≃1.34 et ρ≃1.47. Numérotés selon un parcours en profondeur, le nom des sommets est un mot correspondant au chemin depuis la racine.

kpage n k

Graphe k-pages connexe aléatoire. Un graphe k-page peut être représenter en plaçant les sommets le long d'un cercle, en dessinant les arêtes comme des segments de droites, et en coloriant les arêtes en k>0 couleurs de façon à ce que les arêtes de chaque couleur induisent le dessin d'un graphe planaire-extérieur. La numérotation des sommets est faite le long du cercle. Les graphes 1-page sont les graphes planaires-extérieurs, les 2-pages sont les sous-graphes de graphes planaires Hamiltoniens. Les graphes planaires de degré au plus 4 sont 2-pages, les 3-arbres planaires (ou graphes Apolloniens) sont 3-pages, et les cliques avec 2k-1 ou 2k sommets des k-pages. L'option -directed permet d'obtenir une 2k-orientation.

Ces graphes sont construits par le processus aléatoire suivant. On génère k graphes planaires-extérieurs aléatoires uniformes connexes à n sommets (plan et enraciné) grâce à une bijection avec les arbres plans enracinés dont tous les sommets, sauf ceux de la dernière branche, sont bicoloriés. On fait ensuite l'union de ces k graphes en choisissant aléatoirement la racine des arbres, sauf celui du premier planaire-extérieur, ce qui correspond à une permutation circulaire des sommets sur la face extérieure.

cactus n

Graphe cactus aléatoire à n sommets. Il s'agit d'arbres de cycles, c'est-à-dire de graphes connexes où chaque arête appartient à au plus un cycle. Ce sont aussi les graphes planaires-extérieurs connexes sans cordes. Ils sont générés à partir d'un "outerplanar n" dans lequel les arêtes internes (ou cordes) des composantes biconnexes ont été supprimés. L'option -directed permet d'obtenir une 2-orientation.

ktree n k

k-arbre aléatoire à n sommets. Il faut n>k≥0. C'est un graphe chordal appelé aussi graphe triangulé (triangulated). Il est généré à partir d'un arbre enraciné aléatoire uniforme à n-k noeuds de manière similaire à "tree n-k". Cela constitue les "sacs" que l'on remplit avec les n sommets comme suit: on met k+1 sommets dans le sac racine connecté en clique, puis, selon un parcours en profondeur de l'arbre, on met un sommet différent pour chacun des autres sacs. Ce sommet est alors connectés à exactement k sommets choisis aléatoirement dans le sac parent et sont ajoutés à son sac. Lorsque k=1, c'est un arbre, et lorsque k=0, c'est un stable. L'option -directed permet d'obtenir une k-orientation.

kpath n k

k-chemin aléatoire à n sommets. La construction est similaire à celle utilisée pour ktree, sauf que l'arbre est un chemin. Ces graphes sont des graphes d'intervalles particuliers (voir "interval n"). L'option -directed permet d'obtenir une k-orientation.

kstar n k

k-star aléatoire à n sommets. La construction est similaire à celle utilisée pour ktree, sauf que l'arbre est une étoile. Ces graphes, qui sont des "split graphs", sont composés d'une clique à k+1 sommets et de n-k-1 sommets indépendants connectés à k sommets aléatoire de la clique. Il est possible d'obtenir le graphe "split n k" si à chaque fois les k sommets de la clique tirés aléatoires sont toujours les mêmes. L'option -directed permet d'obtenir une k-orientation.

rig n k p

Graphe d'intersections aléatoire (Uniform Random Intersection Graph). Il possède n sommets, chaque sommet u étant représenté par un sous-ensemble S(u) aléatoire de {1,…,k} tel que chaque élément appartient à S(u) avec probabilité p. Il y a une arête entre u et v ssi S(u) et S(v) s'intersectent. La probabilité d'avoir une arête entre u et v est donc Pₑ=1-(1-p²)^k, mais les arêtes ne sont pas indépendantes (Pr(uv|uw)>Pr(uv)). En général, pour ne pas avoir Pₑ qui tend vers 1, on choisit les paramètres de façon à ce que kp²<cste. Lorsque k≥n³, ce modèle est équivalent au modèle des graphes aléatoires d'Erdös-Reny (voir random n p). Si p<0, alors p est fixée au seuil théorique de connectivité, à savoir p=√(ln(n)/(nk)) si k>n et p=ln(n)/k sinon.

apollonian n

Graphe Apollonien aléatoire uniforme à n≥4 sommets. Les graphes Apolloniens sont les 3-arbres planaires ou encore les graphes planaires maximaux chordaux. Ils sont obtenus en subdivisant récursivement un triangle en trois autres. Ils sont 3-dégénérés, de treewidth 3, et de nombre chromatique 4. La distance moyenne est ϴ(logn). Ils sont en bijection avec les arbres ternaires à n-3 noeuds internes. Pour n=5, il s'agit d'un K₅ moins une arête qu'on peut obtenir aussi avec "split 5 3". L'option -directed permet d'obtenir une 3-orientation.

polygon n

Triangulation aléatoire uniforme d'un polygone convexe à n≥3 cotés. Ce sont aussi des graphes planaires-extérieurs maximaux aléatoires. Ils sont Hamiltoniens, 2-dégénérés, de treewidth 2, et de nombre chromatique 3. Ils sont en bijection avec les arbres binaires (complets) à n-2 noeuds internes ou encore les mots de Dyck de longueur 2(n-2). La numérotation des sommets n'est pas cyclique le long du polygone. Ce graphe n'est pas un graphe géométrique contrairement à ses variantes utilisant -xy convex comme dans l'exemple ci-après.

       Ex: gengraph polygon 20 -dot filter circo -visu
           gengraph td-delaunay 20 -xy convex2 -visu

planar n f d

Graphe planaire aléatoire composé de n faces internes de longueur f≥3, les sommets internes étant de degré au moins d et ceux de la face externe au moins 2. Ils possèdent entre n+f-1 et n(f-2)+2 sommets, sont 2-connexes, 2-dégénérés, de maille f. Si d>4 alors ils sont d'hyperbolicité O(f). Ils sont construits en ajoutant itérativement les faces par le processus aléatoire suivant. Au départ, il s'agit d'un cycle de longueur f. Pour chaque nouvelle face on ajoute un sommet u que l'on connecte à un sommet quelconque du cycle C formant le bord de la face extérieure du graphe courant. Puis on ajoute un chemin allant de u à un sommet v de C de façon à respecter: 1) la contrainte des degrés des sommets qui vont devenir internes; et 2) la contrainte sur la longueur de la nouvelle face créée. Le sommet v est choisit uniformément parmi tous les sommets possibles de C respectant les deux contraintes. Si d<0, alors on fait comme si d=+∞ (aucun sommet ne pouvant alors être interne) et le résultat est un graphe planaire-extérieur Hamiltonien, c'est-à-dire 2-connexe. Si f<0, alors chaque face créée est de longueur aléatoire uniforme prise dans [3,|f|] au lieu d'être de longueur exactement |f|. Si f=d=4, il s'agit d'un "squaregraph". Les valeurs d=0,1,2 sont équivalentes. L'option -directed permet d'obtenir une 2-orientation.

hyperbolic p k h

Graphe issu du pavage du plan hyperbolique ou euclidien par des polygones réguliers à p≥3 cotés où chaque sommets est de degré k≥2. Le graphe est construit par couches successives de polygones, le paramètre h≥1 représentant le nombre de couches. Lorsque h=1, il s'agit d'un seul polygone, un cycle à p sommets. Dans tous les cas les graphes sont planaires avec O((pk)^h) sommets, ils sont 2-connexes et d'arboricité 2 pour p>3. Lorsque p=3, ils sont 3-connexes et d'arboricité 3. L'option -directed permet d'obtenir une 3-orientation. Sans être les mêmes graphes, il y a des similarités avec les graphes "planar n f d". Pour paver le plan hyperbolique, représentable sur le disque de Poincaré, il faut 1/p + 1/k < 1/2. Dans ce cas, le graphe est d'hyperbolicté O(p). Pour paver le plan euclidien il faut prendre p=k=4 (grille carrée) ou p=3, k=6 (grille triangulaire) ou p=6, k=3 (grille hexagonale). Si k≤3 et p≤5, alors le graphe existe que pour certaines valeurs de h≤3. Le cas k=3, p=4, h=2 correspond au cube, et k=3, p=5, h=3 est le graphe dodécahèdre ("dodecahedron"). Si k=2, alors h=1 et le graphe est un cycle à p sommets.

rlt p q d

Random Lattice Triangulation. Il s'agit d'un graphe planaire aléatoire construit à partir d'une triangulation de la grille p × q. Toutes les faces, sauf celle extérieure, sont des triangles. Il possède pq sommets et (2p-1)(2q-1)-pq arêtes, dont les 2(p+q-2) qui sont sur le bord de la grille et le reste est à l'intérieur. Le paramètre d contrôle la longueur des arêtes suivant la norme Lmax. Par exemple, si d=1, les arêtes seront soit celles de la grille (verticales ou horizontales) ou diagonales. Si d<0, alors l'effet est similaire à d=+∞. Si d=0, on obtient un stable. Si p=1 ou q=1 (et d≠0), on obtient un chemin.

       Ex: gengraph rlt 8 14 2 -dot scale 0.1 -visu
Il est difficile de générer de telles grilles aléatoirement uniformément. Il faut pour cela utiliser une technique de flips avec une chaîne de Markov dont le mixing time n'est pas connu. Il est cependant bien connu que le milieu de chaque arête e d'une triangulation T de grille a pour coordonnées (i+1/2,j) ou (i+1/2,j+1/2) où i,j sont des entiers. Et inversement, chaque point "milieu" de la grille est coupé par exactement une arête de T. Il est aussi connu que si l'on parcourt les points milieux de la grille de bas en haut et de gauche à droit, alors il n'y qu'au plus deux choix possibles pour l'arête ayant ce milieu. Malheureusement, suivre ce parcours et choisir aléatoirement l'une ou l'autre de ces arêtes ne donne pas une distribution aléatoire uniforme. On propose ici la construction d'une triangulation T de manière aléatoire comme suit:

Tant qu'il reste au moins un point milieu faire: 1. choisir uniformément un point milieu R parmi les points restant 2. déterminer la liste L des arêtes possibles ayant pour milieu R (respectant la planarité et le critère de longueur) 3. choisir uniformément une arête de L et l'ajouter au graphe

kneser n k r

Graphe de Kneser généralisé. Le graphe de Kneser K(n,k) classique est obtenu avec r=0. Les sommets sont tous les sous-ensembles à k éléments de [0,n[ (il faut donc 0≤k≤n). Deux sommets sont adjacents ssi leurs ensembles correspondant ont au plus r éléments en commun. Le nombre chromatique de K(n,k), établit par Lovász, vaut n-2k+2 pour tout n≥2k-1>0. Le graphe de Petersen est le graphe K(5,2). Ils ont un lien avec les graphes de Johnson J(n,k) et les odd graphs.

gpetersen n r

Graphe de Petersen généralisé P(n,r), 0≤r<n/2. Ce graphe cubique possède 2n sommets qui sont u_1,…,u_n,v_1,…,v_n. Les arêtes sont, pour tout i: u_i-u_{i+1}, u_i-v_i et v_i-v_{i+r} (indice modulo n). Il peut être dessiné tel que toute ses arêtes sont de même longueur (unit distance graph). Ce graphe est biparti ssi n est pair et r est impair. C'est un graphe de Cayley ssi r²=1 (modulo n). P(n,r) est Hamiltonien ssi r≠2 ou n≠5 (modulo 6). P(n,r) est isomorphe à P(n,(n-2r+3)/2)). P(4,1) est le cube, P(5,2) le graphe de Petersen, P(6,2) le graphe de Dürer, P(8,3) le graphe de Möbius-Kantor, P(10,2) le dodécaèdre, P(10,3) le graphe de Desargues, P(12,5) le graphe de Nauru, P(n,1) un prisme.

squashed n k p

Squashed Cube aléatoire à n sommets. Il faut 0<k<n et p∈[0,1]. Les sommets sont des mots aléatoires de k lettres sur {0,1,'*'} où p est la probabilité d'obtenir '*'. La probabilité d'obtenir 0 est la même que celle d'obtenir 1, soit (1-p)/2. Deux sommets sont adjacents si la distance de Hamming entre leur mots vaut 1 avec la convention que la distance à la lettre '*' est nulle. Lorsque que p=0, le graphe généré est un sous-graphe isométrique de l'hypercube où certains sommets sont dupliqués en sommets jumeaux non-adjacents (ce sont les sommets correspondant au même mot). En particulier, le graphe est biparti et la distance entre deux sommets est données par la distance de Hamming entre leur mot, sauf s'ils ont le même mot. Si p=-1 alors p est fixée à l'équiprobabilité de chacune des lettres, soit p=1/3.

antiprism n

Graphe composé de deux cycles à n sommets connectés par 2n triangles. Le prisme est similaire sauf que pour ce dernier les deux cycles sont connectés par des carrés. Il est ainsi planaire, 4-régulier, possède 2n sommets et 4n arêtes. C'est aussi le dual du trapézoèdre n-gonal.

rpartite a_1 … a_k .

Graphe k-parti complet K_{a_1,…,a_k}. Ce graphe possède a_1 + ⋯ + a_k sommets partitionnés en k parts. La i-ème part contient a_i sommets numérotés consécutivement dans l'intervalle [ a_1 + ⋯ + a_{i-1}, a_1 + ⋯ + a_i [. Les sommets i et j sont adjacents ssi i et j appartiennent à des parts différentes.

ggosset p d_1 v_1 … d_k v_k .

Graphe de Gosset généralisé. Les sommets sont tous les vecteurs entiers (et leurs opposés) de dimension d = d_1 + ⋯ + d_k dont les coordonnées comprennent exactement dᵢ≥1 fois la valeur vᵢ. Le nombre de sommets est donc n = 2·∏_i binomial(d-(∑_{j<i}d_i), d_i). Il existe une arête entre les vecteurs u et v si et seulement le produit scalaire entre u et v vaut l'entier p. Des valeurs intéressantes sont par exemple "ggosset 1 2 -1 2 0 ." ou "ggosset 8 2 3 6 -1 ." (le graphe de Gosset).

schlafli

Graphe de Schläfli. Il s'agit du sous-graphe induit par les voisins d'un quelconque sommet du graphe de Gosset. Il possède 27 sommets, 216 arêtes et est 16-régulier. Il est sans-griffe, Hamiltonien, de diamètre 2, de maille 3 et de nombre chromatique 9.

crown n

Graphe biparti régulier à 2n sommets où le i-ème sommet de la première partie de taille n est voisin au j-ème sommet de la seconde partie ssi i≠j. Pour n=3, il s'agit du cycle à 6 sommets, pour n=4, il s'agit du cube (à 8 sommets).

split n k

Graphe split (ou fendu) à n sommets et de clique maximum k. Il s'agit d'un graphe à n sommets composé d'une clique à k sommets et d'un ensemble indépendant de n-k sommets connectés chacun à tous ceux de la clique. C'est un graphe triangulé (chordal) et un cas particulier de "kstar n k". On peut montrer que presque tous les graphes triangulés à n sommets sont des graphes split (Bender et al. 1985). Si k≥n-1, alors il s'agit d'une clique, et si k=n-2, il s'agit d'une clique moins une arête. Si k=1 il s'agit d'une étoile à n-1 branches.

fan p q

Graphe de p+q sommets composé d'un chemin à p sommets et de q sommets, chacun connectés à tous ceux du chemin. Le graphe classique "fan n" correspond à p=n et q=1.

flip n

Graphe des flips des triangulations d'un polygone convexe à n>2 sommets. Les sommets, qui sont les triangulations, sont en bijection avec des arbres binaires (complets) à m=n-2 noeuds internes qui sont codés par les mots de Dyck de longueur 2m (mots que l'on peut afficher avec -label 1). Le nombre de sommets est donc C(m) = binom(2m,m)/(m+1), le nombre de Catalan d'ordre m. Les adjacences peuvent être vues aussi comme des rotations d'arbres. Le diamètre est 2n-10 pour n>12. Le nombre chromatique n'est pas connu. On sait pas s'il est constant ou pas. Il vaut 3 pour n=5..9, et 4 pour n=10 et 11.

interval n

Graphe d'intersection de n intervalles d'entiers aléatoires uniformes pris dans [0,2n[. Des graphes d'intervalles peuvent aussi être générés par "kpath n k".

circle n

Graphe d'intersection de n cordes aléatoires d'un cercle. Il est réalisé par le graphe d'inclusion de n intervalles d'entiers aléatoires uniformes pris dans [0,2n[. Les graphes de permutation et les planaires extérieurs sont des exemples de circle graphs.

permutation n

Graphe de permutation sur une permutation aléatoire uniforme des entiers de [0,n[.

prime n

Graphe à n sommets tel que i est adjacent à j ssi i>1 et j divisible par i.

paley n

Graphe de Paley à n sommets. Deux sommets sont adjacents ssi leur différence est un carré modulo n. Il faut que n soit la puissance d'un nombre premier et que n≡1 (mod 4), mais le graphe est aussi défini pour les autres valeurs. Les premières valeurs possibles pour n sont: 5, 9, 13, 17, 25, 29, 37, 41, 49, … Ces graphes sont Hamiltoniens. Si n est simplement premier, alors ils sont de plus auto-complémentaires et réguliers. Paley 17 est le plus grand graphe G où ni G ni son complémentaire ne contient K₄, d'où Ramsey(4)=18.

mycielski k

Graphe de Mycielski de paramètre (nombre chromatique) k. C'est un graphe sans triangle, k-1 (sommets) connexe, et de nombre chromatique k. Le premier graphe de la série est M2 = K2, puis on trouve M3=C5, M4 est le graphe de Grötzsch à 11 sommmets.

windmill n

Graphe composé de n cycles de longueur trois ayant un sommet commun.

barbell n1 n2 p

Graphe des haltères (Barbell Graph) composé de deux cliques de n1 et n2 sommets reliées par un chemin de longueur p. Il possède n1+n2+p-1 sommets. Si p=0 (p=-1), le graphe est composé de deux cliques ayant un sommet (une arête) en commun. Plus généralement, si p≤0, le graphe est composé de deux cliques s'intersectant sur 1-p sommets.

chess p q x y

Graphe composé de p x q sommets représentant les cases d'un échiquier p x q, deux cases étant connectée s'il existe un déplacement d'une case vers l'autres avec un saut de x cases selon un axe et y selon un autre. Le "knight graph" classique est donc un "chess 8 8 2 3", et "chess n 2 1 0" correspond à "ladder n".

sat n m k

Graphe aléatoire issu de la réduction du problème k-SAT à Vertex Cover. Le calcul d'un Vertex Cover de taille minimum pour ce graphe est donc difficile pour k>2. Soit F une formule de k-SAT avec n>0 variables x_i et m>0 clauses CNF de k>0 termes. Le graphe généré par "sat n m k" possède un Vertex Cover de taille n+(k-1)m si et seulement si F est satisfiable.

Ce graphe est composé d'une union de n arêtes indépendantes et de m cliques à k sommets, plus des arêtes dépendant de F connectant certains sommets des cliques aux n arêtes. Les n arêtes représentent les n variables, une extrémité pour x_i, l'autre pour ¬(x_i). Ces sommets ont des numéros dans [0,2n[, x_i correspond au sommet 2i-2 et ¬(x_i) au sommet 2i-1, i=1…n. Les sommets des cliques ont des numéros consécutifs ≥ 2n et correspondent aux clauses. Le p-ème sommet de la q-ème clique (pour p=1…k et q=1…m) est connecté à l'une des extrémités de la i-ème arête (pour i=1…n) ssi la p-ème variable de la q-ème clause est x_i ou ¬(x_i).

La formule F est construite en choisissant indépendamment et uniformément pour chacune des m clauses et chacun des k termes une des variables parmi x_1,…,x_n,¬(x_1),…,¬(x_n). Ainsi chaque sommet d'une clique possède exactement un voisin (choisi aléatoirement uniforme) parmi les 2n extrémités d'arêtes.

tree_fibo n

Arbre des appels pour la fonction récursive calculant le (n+1)-ième nombre f(n) de la suite de Fibonacci pour tout n≥0. Il est défini par la récurrence f(n) = n si n<2, f(n) = f(n-1) + f(n-2). L'arbre est orienté et possède 2f(n+1)-1 ≃ 1.789*1.618^n sommets. Le nombre de feuilles vaut précisément f(n), ce qui donne un moyen de le calculer en comptant les feuilles avec -undirected -check deg.

       Ex: gengraph tree_fibo 10 -label 1 -dot filter dot -visu
           gengraph tree_fibo 10 -undirected -format no -check deg

tree_part n k

Arbre des appels pour la fonction récursive calculant le nombre p(n,k) de partition de l'entier n>0 en 0<k≤n parts. Il est défini par la récurrence p(n,k) = 1 si k=1, p(n,k) = p(n-1,k-1) si n<2k, et p(n,k) = p(n-1,k-1) + p(n-k,k) sinon. L'arbre est orienté et le nombre de feuilles vaut précisément p(n,k), ce qui donne un moyen de le calculer en comptant les feuilles avec -undirected -check deg.

       Ex: gengraph tree_part 22 6 -label 1 -dot filter dot -visu
           gengraph tree_part 22 6 -undirected -format no -check deg
Il existe une variante (-variant 1), calculant également p(n,k), avec une récurrence légèrement différente qui est: p(n,k) = 0 si n<k, p(n,k) = 1 si k=n ou k=1, et p(n,k) = p(n-1,k-1) + p(n-k,k) sinon. Dans ce cas l'arbre est binaire complet (chaque sommet a 0 ou 2 fils), mais le nombre de feuilles n'est plus p(n,k), il est plus grand. De plus il a plus de sommets que la variante par défaut (-variant 0).

tree_binom n k

Arbre des appels pour la fonction récursive calculant le coefficient binomial binom(n,k) pour tout entiers n≥1 et 0≤k≤n. Il est défini par la récurrence binom(n,k) = binom(n-1,k-1) + binom(n-1,k) si 0<k<n, et binom(n,k) = 1 si k=0 ou k=n. L'arbre est un arbre binaire orienté et possède binom(n,k) = n!/k!/(n-k)! feuilles, ce qui donne un moyen de calculer ce nombre en comptant les feuilles avec -undirected -check deg.

       Ex: gengraph tree_binom 5 2 -label 1 -dot filter dot -visu
           gengraph tree_binom 5 2 -undirected -format no -check deg

kout n k

Graphe à n sommets k-dégénéré crée par le processus aléatoire suivant: les sommets sont ajoutés dans l'ordre croissant de leur numéro, i=0,1,…,n-1. Le sommet i est connecté à d voisins qui sont pris aléatoirement uniformément parmi les sommets dont le numéro est < i. La valeur d est choisie aléatoirement uniformément entre 1 et min{i,k}. Il faut 0<k<n. Le graphe est connexe, et pour k=1, il s'agit d'un arbre. L'option -directed permet d'obtenir une k-orientation.

       Ex: gengraph kout 50 2 -directed -vcolor deg -vcolor pal wbn -vsize -visu

expander n k

Graphe à n sommets composé de k>0 cycles Hamiltoniens aléatoires. Le degré des sommets varie entre 2 et 2k pour n>2. Il possède le cycle 0,1,…,n-1,0 comme cycle Hamiltonien, et a la propriété d'expansion à partir de k≥4. Plus précisément, avec grande probabilité, les valeurs propres de la matrice d'adjacence du graphe sont ≤ 2√(2k). On rappelle que la constante d'expansion, isopérimétrique, ou de Cheeger, h(G) d'un graphe d-régulier G est toujours comprise entre (d-λ₂)/2 ≤ h(G) ≤ √(2d(d-λ₂)) où λ₂ est la deuxième plus grande valeur propre de la matrice d'adjacence de G. L'option -directed permet d'obtenir une k-orientation.

margulis n

Graphe de Margulis à n^2 sommets. Il s'agit d'un expandeur avec λ₂ ≤ 5√2 (cf. graphe "expander n k") de degré maximum 8 et de degré minimum 2. Les sommets sont les paires d'entiers (x,y) avec x,y ∈ [0,n[ avec les 8 adjacences suivantes: (x+y,y), (x-y,y), (x,y+x), (x,y-x), (x+y+1,y), (x−y+1,y), (x,y+x+1) et (x,y−x+1), toutes ces opérations étant modulo n.

comb n
centipede n

Arbre de 2n sommets en forme de peigne, composé d'un chemin à n sommets avec un sommet pendant à chacun d'eux. On peut l'obtenir en supprimant une arête d'un sunlet n.

sunlet n

Cycle à n sommets avec un sommet pendant à chacun d'eux. Un sunlet 3 est parfois appelé netgraph.

parachute n

Graphe Parachute. Il est planaire à n+3 sommets composés du graphe "fan n 2" dont un des deux sommets de degré n possède un sommet pendant. Le graphe classique correspond à n=4. C'est le complémentaire du graphe parapluie n.

alkane t n

Graphe planaires dont les sommets sont de degré 1 ou 4 représentant la structure moléculaire d'hydrocarbure alkalin à n atomes de carbones. Le paramètre t (voir ci-dessous les six types possibles) contrôle la topologie des liaisons simples entre atomes de carbone (C), les atomes d'hydrogènes (H) étant des sommets pendants de sorte que chaque atome C soit de degré 4. Certaines topologies ne sont définies que pour certaines valeurs de n. Les alkalins, de formule C_n H_{2n+2} si type≠"cyclo", sont des arbres de 3n+2 sommets alors que les cycloalkalin, de formule C_n H_{2n} si type="cyclo", ont 3n sommets et possède un cycle. Chaque type peut abrégé par ses 2 premières lettres. L'option "-label 1" activée par défaut permet de distinguer les atomes C et H.

           t      topologie     n             t     topologie     n
                                                    C─┐
          normal  C─ ⋯ ─C      n≥1           neo    C─C─ ⋯ ─C    n≥5
                                                    C─┘
                  ┌─C─ ⋯ ─C                           ┌─C─ ⋯ ─C
          cyclo   C       │    n≥3           sec    C─C          n≥6
                  └─C─ ⋯ ─C                           └─C─ ⋯ ─C
                  C─┐                                 ┌─C─ ⋯ ─C
          iso       C─ ⋯ ─C    n≥4           tret   C─C─C─ ⋯ ─C  n≥7
                  C─┘                                 └─C─ ⋯ ─C
Il est possible d'utiliser les alias suivants:

            n-alkane n ......... (= alkane normal n) 
            cyclo-alkane n ..... (= alkane cyclo n)
	    iso-alkane n ....... (= alkane iso n)
	    neo-alkane n ....... (= alkane neo n)
	    sec-alkane n ....... (= alkane sec n)
	    tret-alkane n ...... (= alkane tret n)
	    methane ............ (= alkane normal 1)
	    ethane ............. (= alkane normal 2)
	    propane ............ (= alkane normal 3)
	    butane ............. (= alkane normal 4)
	    pentane ............ (= alkane normal 5)
	    hexane ............. (= alkane normal 6)
	    heptane ............ (= alkane normal 7)
	    octane ............. (= alkane normal 8)
	    nonane ............. (= alkane normal 9)
Il est possible aussi de combiner les préfixes cyclo-, iso-, neo-, sec-, tret- avec les radicaux meth, eth, prop, but, hex, hept, oct, non, lorsque la condition sur n est satisfaite. Par exemple, cyclo-pentane (= alkane cyclo 5) et iso-butane (= alkane iso 4).

icosahedron

Isocahèdre: graphe planaire 5-régulier à 12 sommets. Il possède 30 arêtes et 20 faces qui sont des triangles. C'est le dual du dodécahèdre.

rdodecahedron

Rhombic-dodécaèdre: graphe planaire à 14 sommets avec des sommets de degré 3 ou 4. Il possède 21 arêtes et 12 faces qui sont des carrés. C'est le dual du cuboctaèdre.

deltohedron n
trapezohedron n

Deltoèdre ou trapézoèdre n-gonal: graphe composé de 2n faces en forme de cerf-volant (deltoïdes) décalées symétriquement. C'est un graphe planaire de 2n+2 sommets et 4n arêtes où toutes les faces sont des carrées. C'est aussi le dual de l'antiprisme n-gonal. Il s'agit d'un cube si n=3.

tutte

Graphe de Tutte. C'est un graphe planaire cubique 3-connexe à 46 sommets qui n'est pas Hamiltonien.

hgraph

Arbre à six sommets dont quatre feuilles en forme de H.

rgraph
fish

Fish Graph, graphe à six sommets en forme de R ou de poisson. Il est composé d'un cycle à quatre sommets dont un ayant deux sommets pendants.

cricket

Cricket Graph, graphe à cinq sommets composé d'un triangle où à l'un des sommets est attaché deux sommets pendant (de degré 1).

moth

Moth Graph, graphe à six sommets composé de deux triangles partageant une arête et de deux sommets pendant (degré 1) attachés à un sommet de degré trois.

dart

Dart Graph, graphe à cinq sommets composé de deux triangles partageant une arête et d'un sommet pendant (degré 1) attaché à un sommet de degré trois. Il peut être obtenu à partir du graphe moth en supprimant un sommet pendant.

bull

Bull Graph, graphe à cinq sommets auto-complémentaire en forme de A.

antenna

Antenna Graph, graphe planaire à six sommets formé du graphe house et d'un sommet pendant attaché à son toit. Plus précisément, il est composé d'un carré, d'un triangle partageant une arrête et d'un sommet pendant au sommet de degré 2 du triangle. C'est le complémentaire du graphe formé d'un carré et de deux triangles partageant deux arêtes consécutive du carré.

suzuki

Graphe de Suzuki (2010). C'est l'unique graphe 1-planaire à n=11 sommets et ayant le nombre optimal d'arêtes, soit 4n-8 arêtes (ici 36 donc).

harborth

Graphe de Harborth. C'est un graphe planaire 4-régulier à 52 sommets qui est distance unitaire aussi appelé graphe allumette (voir theta0 et diamond). Il peut ainsi être dessiné sans croisement d'arête qui ont toutes la même longueur.

doily

Graphe Doily (de Payne). C'est un graphe de 15 sommets qui est un carré généralisé pouvant être représenté par 15 points et 15 lignes, avec 3 points par ligne et 3 lignes par point, et sans triangle.

herschel

Graphe de Herschel. C'est le plus petit graphe planaire 3-connexe qui ne soit pas Hamiltonien. Il est biparti, possède 11 sommets et 18 arêtes.

goldner-harary

Graphe de Goldner-Haray. C'est le plus petit graphe planaire maximal qui ne soit pas Hamiltonien. Il possède 11 sommets et donc 27 arêtes (voir aussi Herchel). C'est un 3-arbre planaire (voir apollonian).

fritsch

Graphe de Fritsch. Il est planaire maximal à 9 sommets qui peut être vu comme un graphe de Hajós dans un triangle. C'est, avec le graphe de Soifer, le plus petit contre-exemple à la procédure de coloration de Kempe. C'est le plus petit graphe où l'heuristique de degré minimum donne cinq couleurs.

triplex

Graphe cubique de maille 5 à 12 sommets 1-planaire pouvant être dessiné avec seulement deux croisements d'arête. Un des cinq graphes (avec le Petersen) a être cycliquement-5-connexe (McCuaig 1992).

jaws

Graphe cubique de maille 5 à 20 sommets qui est un doublecross, c'est-à-dire dessinable sur le plan avec deux paires d'arêtes se croisant sur la face extérieure. Il est donc 1-planaire. Tout graphe theta-connecté sans Petersen mais avec Jaws comme mineur est un doublecross.

starfish

Graphe cubique de maille 5 à 20 sommets non-planaire, mais peut-être dessiné comme une étoile à cinq branches avec une couronne centrale à 15 sommets formant un circulant avec une corde de longueur 3. Un graphe theta-connecté (cf. Seymour et al. 2015) ssi il ne contient pas de Petersen comme mineur, si c'est un graphe apex (planaire plus un sommet), un doublecross (voir jaws) ou un starfish.

soifer

Graphe de Soifer. Il est planaire maximal à 9 sommets. C'est, avec le graphe de Fritsch, le plus petit contre-exemple à la procédure de coloration de Kempe. C'est le plus petit graphe où l'heuristique de degré minimum donne cinq couleurs.

poussin

Graphe de Poussin. Il est planaire maximal à 15 sommets. C'est un contre-exemple à la procédure de coloration de Kempe.

heawood4

Graphe de Heawood pour la conjecture des 4 couleurs, contre-exemple de la preuve de Kempe. Il est planaire maximal avec 25 sommets, est de nombre chromatique 4, de diamètre 5, de rayon 3 et Hamiltonien.

errera

Graphe d'Errera. Il est planaire maximal à 17 sommets. C'est un contre-exemple à la procédure de coloration de Kempe.

kittell

Graphe de Kittell. Il est planaire maximal à 23 sommets. C'est un contre-exemple à la procédure de coloration de Kempe.

frucht

Graphe de Frucht. Il est planaire cubique à 12 sommets. Il n'a pas de symétrie non-triviale. C'est un graphe de Halin de nombre chromatique 3, de diamètre 4 et de rayon 3.

treep p

Arbre aléatoire à p>2 feuilles sans sommets internes de degré deux. Il possède entre p+1 et 2p-2 sommets. Ce graphe est à la base de la construction des graphes de Halin.

halin p

Graphe de Halin aléatoire basé sur un arbre à p>2 feuilles. Il possède entre p+1 et 2p-2 sommets. Il est constitué d'un arbre sans sommets de degré deux dont les p feuilles sont connectés par un cycle (de p arêtes). Ces graphes planaires de degré minimum au moins trois sont aussi arête-minimale 3-connexes, Hamiltonien (et le reste après la suppression de n'importe quel sommet), de treewidth exactement 3 (ils contiennent K₄ comme mineur). Ils contiennent toujours au moins trois triangles et sont de nombre chromatique 3 ou 4.

butterfly d

Graphe Butterfly de dimension d. Les sommets sont les paires (x,i) où x est un mot binaire de d bits et i un entier de [0,d]. Les sommets peuvent être représentés en d+1 niveaux chacun de 2^d sommets, les arêtes connectant les niveaux consécutifs. Le sommet (x,i) est adjacent à (y,i+1) ssi les bits de x sont identiques à ceux de y sauf pour celui de numéro i+1 (le bit 1 étant le bit de poids le plus faible). Il possède (d+1)·2^d sommets et d·2^(d+1) arêtes, les sommets de niveau 0 et d étant de degré 2 les autres de degré 4.

shuffle d

Graphe Shuffle-Exchange de dimension d. Les sommets sont les mots binaires de d lettres. Le sommet w et w' sont voisins si w et w' diffèrent du dernier bit, ou bien si w' peut être obtenu par décalage cyclique à droite ou à gauche de w.

debruijn d b

Graphe de De Bruijn de dimension d≥0 et de base b>0. Il a b^d sommets qui sont tous les mots de d lettres sur un alphabet de b lettres. Le sommet (x_1,…,x_d) est voisin des sommets (x_2,…,x_d,*). Ce graphe est Hamiltonien, de diamètre d et le degré de chaque sommet est 2b, 2b-1 ou 2b-2. Pour d=3 et b=2, le graphe est planaire.

kautz d b

Graphe de Kautz de dimension d>0 et de base b>1. Il a b·(b-1)^(d-1) sommets qui sont tous les mots de d lettres sur un alphabet de b lettres avec la contrainte que deux lettres consécutives doivent être différentes. L'adjacence est celle du graphe de De Bruijn. C'est donc un sous-graphe induit de De Bruijn (debruijn d b). Il est Hamiltonien, de diamètre d et le degré de chaque sommet est 2b-2 ou 2b-3. Pour d=b=3 le graphe est planaire.

linial n t

Neighborhood graph des cycles introduit par Linial. C'est le graphe de voisinage des vues de taille t d'un cycle orienté symétrique à n sommets ayant des identifiants uniques de [0,n[. Il faut n≥t>0 et n≥2. Les sommets sont les t-uplets d'entiers distincts de [0,n[. Le sommet (x_1,…,x_t) est voisin des sommets (x_2,…,x_t,y) où y≠x_1 si n>t et y=x_1 si n=t. Le nombre chromatique de ce graphe est k ssi il existe un algorithme distribué qui en temps t-1 (resp. en temps (t-1)/2 avec t impair) peut colorier en k couleurs tout cycle orienté (resp. orienté symétrique) à n sommets ayant des identifiants uniques et entiers de [0,n[. C'est un sous-graphe induit de "linialc n t", et donc du graphe de Kautz (kautz t n) et de De Bruijn (debruijn t). Le nombre de sommets est n·(n-1)┅(n-t+1). Certaines propriétés se déduisent du graphe linialc n t. Pour n=4 et t=2, il s'agit du cuboctaèdre.

linialc m t

Neighborhood graph des cycles colorés. Il s'agit d'une variante du graphe linial n t. La différence est que les sommets du cycle n'ont plus forcément des identités uniques, mais seulement une m-coloration avec m≤n. Il faut m≥t≥0 et m≥2. L'adjacence est identique, mais les sommets sont les t-uplets (x_1,…,x_t) d'entiers de [0,m[ tels que x_i≠x_{i+1}. Il s'agit donc d'un sous-graphe induit de linialc m t, lui-même sous-graphe induit du graphe de Kautz (kautz t m) et donc de De Bruijn (debruijn t m). Le nombre de sommets est m·(m-1)^{t-1} et son degré est ≤ 2·(m-1). La taille de la clique maximum est 3 si m>2 et t>1. Le nombre chromatique de ce graphe pour t=3 est 3 pour m=4, 4 pour 5≤m≤24. Pour 25≤m≤70 c'est au moins 4 et au plus 5, la valeur exacte n'étant pas connue. Tout comme "linial 4 2", pour m=4 et t=2, il s'agit du cuboctaèdre.

pancake n

Graphe "pancake" de dimension n. Il a n! sommets qui sont les permutations de {1,…,n} et (n-1)-régulier. Une permutation, c'est-à-dire un sommet, est voisine de toutes celles obtenues en retournant un de ces préfixes. Plus précisément, les sommets x=(x_1,…,x_n) et y=(y_1,…,y_n) sont adjacents s'il existe un indice k tel que y_i=x_i pour tout i>k et y_i=x_{k-i} sinon. Son diamètre, qui est linéaire en n, n'est pas connu précisément. Les premières valeurs connues, pour n=1…17, sont: 0, 1, 3, 4, 5, 7, 8, 9, 10, 11, 13, 14, 15, 16, 17, 18, 19. Donc les diamètres 2,6,12 n'existent pas.

bpancake n

Graphe "burn pancake" de dimension n. Il a n!·2^n sommets qui sont les permutations signées de {1,…,n}. Les sommets x=(x_1,…,x_n) et y=(y_1,…,y_n) sont adjacents s'il existe un indice k tel que y_i=x_i pour tout i>k et y_i=-x_{k-i} sinon. Dit autrement la permutation de y doit être obtenue en retournant un préfixe de x et en inversant les signes. Par exemple, le sommet (+2,-1,-5,+4) est voisin du sommet (+5,+1,-2,+4). Comme le graphe pancake, c'est un graphe (n-1)-régulier de diamètre linéaire en n.

gpstar n d

Graphe "permutation star" généralisé de dimension n. Il a n! sommets qui sont les permutations de {1,…,n}. Deux sommets sont adjacents si leurs permutations diffèrent par d positions. Si d<2, il s'agit d'un stable. C'est un graphe régulier.

pstar n

Graphe "permutation star" de dimension n. Il a n! sommets qui sont les permutations de {1,…,n}. Deux sommets sont adjacents si une permutation est obtenue en échangeant le premier élément avec un autre. Le graphe est (n-1)-régulier. Le graphe est biparti et de diamètre ⎣ 3(n-1)/2)⎦. C'est un sous-graphe induit d'un "gpstar n 1".

hexagon p q

Grille hexagonale p x q. C'est un planaire composé de p rangées de q hexagones, le tout arrangé comme un nid d'abeille. Ce graphe peut aussi être vu comme un mur de p rangées de q briques, chaque brique étant représentée par un cycle de longueur 6. Il possède (p+1)·(2p+2)-2 sommets et est de degré maximum 3. Sont dual est le graphe whexagon.

       Ex: gengraph hexagon 20 20 -dele 0.2 -maincc -visu

whexagon p q

Comme le graphe hexagon p q sauf que chaque hexagone est remplacé par une roue de taille 6 (chaque hexagone possède un sommet connecté à ses 6 sommets). C'est le dual de l'hexagone. Il possède p·q sommets de plus que l'hexagone p q.

hanoi n b

Graphe de Hanoï généralisé, le graphe de de Hanoï classique est obtenu avec b=3. Le paramètre n correspond au nombre de disques et b au nombre de piquets. La numérotation des sommets (avec -label 1) correspond aux mots de n lettres choisies parmi l'alphabet [0,b[, indiquant sur quel piquet est chacun des disque. Par exemple, si n=4, alors "2010" indique que le disque 1 est sur le piquet 2, le disque 2 et le disque 4 sur le piquet 0 et le disque 3 sur le piquet 1. Sur un piquet donné, les disques sont ordonnés selon leur taille croissante. Une arête correspond à un mouvement possible. Par exemple "2010" est voisin de "2012". Pour b=3, il est 3-coloriable et hamiltonien. Résoudre le problème de la tour de Hanoï revient à cherche un chemin de "00...0" à "22...2". Le plus court d'entre eux est de longueur ≤ 2^n - 1 (c'est égale si b=3).

[Ce graphe est à revoir, ce n'est plus le graphe Hanoï au delà de b>3. Voir p. 257 du livre [HKP18] où il y a la description du graphe de Hanoi pour n et b quelconque.]

Il est planaire avec b^n sommets et peut être défini de manière récursive comme suit. Le niveau n>0 est obtenu en faisant b copies du niveau n-1 qui sont connectés comme un cycle par une arête, le niveau 0 étant le graphe à un sommet. On obtient le graphe de sierpinski n b en contractant ces arêtes là. Il faut b≥2 et n≥0. Lorsque n=2, on obtient un sorte de fleur, pour n=1 c'est un cycle et pour b=2 il s'agit d'un chemin.

sierpinski n b

Graphe de Sierpiński généralisé, le graphe classique, le triangle Sierpiński qui est planaire, est obtenu avec b=3. Il a ((b-2)·b^n+b)/(b-1) sommets et est défini de manière récursive comme suit. Le niveau n est obtenu en faisant b copies du niveau n-1 qui sont connectés comme un cycle, le niveau 1 étant un cycle de b sommets. Il faut b≥3 et n≥1. À la différence du graphe d'Hanoï, les arêtes du cycle sont contractées. Le graphe de Hajós est obtenu avec n=2 et b=3. Pour n=1 il s'agit d'un cycle.

banana n k

Arbre à n·(k+1)+1 sommets composés de n>0 copies d'étoiles à k branches connectées, par une feuille, à un unique sommet. Si k=0, il s'agit d'un stable à k+1 sommets.

moser

Graphe "Moser spindle" découvert par les frères Moser. C'est un "unit distance graph" du plan (deux points sont adjacents s'ils sont à distance exactement 1) de nombre chromatique 4. Il est planaire et possède 7 sommets. On ne connaît pas d'unit distance graphe avec un nombre chromatique supérieur. C'est aussi le complémentaire du graphe K_{3,3} dont une arête a été subdivisée.

markstrom

Graphe de Markström. Il est cubique planaire à 24 sommets. Il n'a pas de cycle de longueur 4 et 8.

robertson

Graphe de Robertson. C'est le plus petit graphe 4-régulier de maille 5. Il a 19 sommets, est 3-coloriable et de diamètre 3.

wiener-araya

Graphe découvert en 2009 par Wiener & Araya. C'est le plus petit graphe hypo-Hamiltonien planaire connu, c'est-à-dire qu'il n'a pas de cycle Hamiltonien mais la suppression de n'importe quel sommet le rend Hamiltonien. Il possède 42 sommets, 67 arêtes, et est de diamètre 7.

zamfirescu

Graphe de Zamfirescu à 48 sommets découvert en 2007. Il est planaire et hypo-Hamiltonien. C'est le second plus petit (voir wiener-araya). Il possède 76 arêtes et a un diamètre de 7.

hatzel

Graphe de Hatzel. Il est planaire, de diamètre 8, possède 57 sommets et 88 arêtes, et est hypo-Hamiltonien (voir wiener-araya). C'était le plus petit planaire hypo-Hamiltonien connu avant le graphe de Zamfirescu.

clebsch n

Graphe de Clebsch d'ordre n. Il est construit à partir d'un hypercube de dimension n en ajoutant une arête entre chaque paire de sommets opposés, c'est-à-dire à distance n. Le graphe classique de Clebsch est réalisé pour n=4 dont le diamètre est deux.

gear n

Graphe planaire à 2n+1 sommets composé d'une roue à n rayons ("wheel n") et de n sommets chacun connectés deux sommets voisins consécutifs du bord de la roue. Il est construit à partir du graphe "cage 2n 2 0 ." auquel on ajoute un sommet central. Pour n=3, c'est le complémentaire de "helm 3".

helm n

Graphe planaire à 2n+1 sommets composé d'une roue à n≥3 rayons ("wheel n") et de n sommets pendants connectés au bord de la roue. Pour n=3, c'est le complémentaire de "gear 3".

haar n

Graphe de Haar H(n) pour l'entier n>0. C'est un graphe biparti régulier possédant 2k sommets où k=1+⎣ log₂(n)⎦ est le nombre de bits dans l'écriture binaire de n. Ses sommets sont les u_i et v_i pour i=0,…,k-1. Le sommet u_i est adjacent à v_{i+j mod k} ssi le bit j de n vaut 1 (j=0,…,k-1). Si n est impair, H(n) est connexe et de maille 4 ou 6. La valeur maximale de n est 2^32-1 = 4,294,967,295 correspondant à un graphe de 64 sommets. On retrouve respectivement les graphes de Franklin (n=37), de Heawood (n=69) et de Möbius-Kantor (n=133). On a aussi que H(2^n-1) est le biparti K_{n,n}, H(2^n) est "matching n+1", H(2^n+1) est un cycle à n+1 sommets, H(2^n+3) est le "mobius n+1" si n est pair et le "prism n+1" si n est impair, et H(3·2^n-1) est le "crown n+2".

turan n r

Graphe de Turán à n sommets et r parts. Il s'agit d'un graphe r-parti complet de n sommets avec r-(n mod r) parts de ⎣ n/r⎦ sommets et (n mod r) parts de ⎡ n/r⎤ sommets. Il faut n≥r>0. On peut aussi le définir comme le graphe ayant une arête entre i et j ssi |i-j| mod r ≠ 0. C'est la définition utilisée pour générer ce graphe. Il est régulier lorsque r divise n. Il possède ⎣(r-1)n^2/(2r)⎦ arêtes et est de nombre chromatique r. C'est le graphe sans clique de taille r+1 ayant le plus grand nombre d'arêtes. Lorsque n=r, il s'agit d'une clique. Lorsque n=r+1, il s'agit d'une clique moins une arête. Lorsque n=2r, il s'agit du "cocktail party graph" et pour n=8 et r=4 le graphe est 1-planar. Lorsque n=3r, il s'agit du graphe de Moon-Moser, le graphe possédant le plus grand nombre de cliques maximales (soit 3^(n/3)). Lorsque n=6 et r=3, c'est l'octaèdre.

klein p q

Maillage quadrangulaire de genre un, incluant le tore, la bouteille de Klein et le plan projectif. C'est un graphe 4-régulier composé d'une grille |p|×|q| augmentée d'arêtes connectant les bords opposés. La connexion est torique ou en twist suivant le signe de chaque dimension (>0 pour torique et <0 pour twist). Pour la bouteille de Klein, il faut p·q<0, et pour le plan projectif il faut p<0 et q<0. Le nombre chromatique est 4 si |p|≠1 et |q|≠1 (cas d'un cycle) et qu'il y a une dimension <0 impaire, ou que p·q=-4 (K₄). Sinon il est < 4. Les plus petits exemples avec un nombre chromatique 4, à part K₄, sont "klein 3 -3" et "klein -3 -3" (qui de plus est sans K₃). Par défaut, les sommets sont dessinés selon une grille |p|×|q|.

       Ex: gengraph klein -3 -4 -label -1 -xy noise .3 .7 -dot len 1 -visu

flower_snark n

Graphe cubique à 4n sommets construit de la manière suivante: 1) on part de n étoiles disjointes à 3 feuilles, la i-ème ayant pour feuilles les sommets notés u_i,v_i,w_i, i=1…n; 2) pour chaque x∈{u,v,w}, x_1-⋯-x_n induit un chemin; et enfin 3) sont adjacents: u_0-u_n, v_0-w_n et w_0-v_n. Pour n>1, ces graphes sont non planaires, non Hamiltoniens, 3-coloriables et de maille au plus 6. Pour n=1, il s'agit d'un K_{1,3} (claw).

biggs n

Graphe de Biggs-Smith généralisé. Il est cubique sauf pour n=1,2,4,8,16 où son degré maximum est 3. Il possède 6n sommets partitionnés en six blocs de n sommets de numéros consécutifs. Les blocs sont connectés comme le graphe H selon un produit cartésien: les sommets homologues dans chaque blocs (de même modulo n) sont adjacents. Chaque bloc (0…5) induit un anneau de corde de longueur c=0,1,2,4,8 répartis comme ceci:

           2   0     [2n,3n[      [0,n[
           |   |       c=4         c=1
           |   |        |           |
           5---4     [5n,6n[ --- [4n,5n[
           |   |       c=0         c=0
	   |   |        |           |
           1   3      [n,2n[     [3n,4n[
                       c=2         c=8
Donc deux sommets de deux blocs différents sont adjacents si leurs blocs sont adjacents dans H et s'ils ont même modulo n (sommets homologues). Et deux sommets dans un même bloc sont adjacents si leurs différences modulo n vaut c. Sinon, ils ne sont pas adjacents.

udg n r

Graphe géométrique aléatoire (random geometric graph) sur n points du carré [0,1[² (distribution par défaut). Deux sommets sont adjacents si leurs points sont à distance ≤ r. Il s'agit de la distance selon la norme L2 (par défaut), mais cela peut être changée par l'option -norm. Le graphe devient connexe avec grande probabilité lorsque r=rc ~ √(ln(n)/n). Si r<0, alors le rayon est initialisé à rc. Un UDG (unit disk graph) est normalement un graphe d'intersection de disques fermés de rayon 1.

gabriel n

Graphe de Gabriel. Graphe géométrique défini à partir d'un ensemble de n points du carré [0,1[² (distribution par défaut). Les points i et j sont adjacents ssi le plus petit disque (voir -norm) passant par i et j ne contient aucun autre point. Ce graphe est connexe et planaire à condition toutefois qu'ils n'existe pas 4 points co-cycliques et par paires diamétralement opposées (dans ce cas une clique et des croisements d'arêtes apparaissent). C'est un sous-graphe du graphe de Delaunay. Son étirement est non borné.

rng n

Graphe du proche voisinage (Relative Neighborhood Graph). Graphe géométrique défini à partir d'un ensemble de n points du carré [0,1[². Les points i et j sont adjacents ssi il n'existe aucun point k tel que max{d(k,i),d(k,j)} < d(i,j) où d est la distance (L2 par défaut, voir -norm). Dit autrement, la "lune" définie par i et j doit être vide. Ce graphe est planaire et connexe. C'est un sous-graphe du graphe de Gabriel.

knng n k

Graphe des k plus proches voisins (k-Nearest Neighbor Graph). Graphe géométrique défini à partir d'un ensemble de n points du carré [0,1[² (distribution par défaut). Chaque point i est connecté aux k plus proches autres points (par défaut selon la norme L2, voir -norm). Si la norme est L2, le degré des sommets est ≤ 6k. Il peut comporter des croisements d'arêtes dès que k>1. Cependant, chaque arête ne peut être coupée que O(k²) fois. Plus précisément, c'est un t-planaire pour t≤78k^2-6k (cf. [DMW19]). À partir de k=3 apparaît une composante connexe de taille linéaire.

mst n

Graphe aléatoire géométrique définissant un arbre couvrant de poids minimum du graphe complet Euclidien sur n points tirés aléatoirement uniformément dans le carré [0,1[² (distribution par défaut). Par défaut la distance est la norme L2 (voir -norm).

       Ex: gengraph mst 2000 -xy seed 1 .3 -visu

thetagone n p k w

Graphe géométrique défini à partir d'un ensemble de n points du carré [0,1[² (distribution par défaut). En général le graphe est planaire et connexe avec des faces internes de longueur au plus p (pour k diviseur de p et w=1). On peut interpréter les paramètres comme suit: p≥3 est le nombre de cotés d'un polygone régulier, k≥1 le nombre d'axes (ou de direction), et w∈[0,1] le cône de visibilité. Toute valeur de p<3 est interprétée comme une valeur infinie, et le polygone régulier correspondant interprété comme un cercle. L'adjacence entre une paire de sommets est déterminée en temps O(kn).

Plus formellement, pour tout point u et v, et entier i, on note P_i(u,v) le plus petit p-gone (polygone convexe régulier à p cotés) passant par u et v dont u est un sommet, et dont le vecteur allant de u vers son centre forme un angle de i·2𝜋/k avec l'axe des abscisses, intersecté avec un cône de sommet u et d'angle w·(p-2)·𝜋/p (w·𝜋 si p est infini) et dont la bissectrice passe par le centre du p-gone. Alors, u est voisin de v s'il un existe au moins un entier i∈[0,k[ tel que l'intérieur de P_i(u,v) est vide. La distance entre u et le centre du p-gone définit alors une distance (non symétrique) de u à v.

Si w=1 (visibilité maximale), P_i est précisément un p-gone. Si w=0 (visibilité minimale), P_i se réduit à l'axe d'angle i·2𝜋/k pour un entier i. Si w=.5, P_i est un cône formant un angle égale à 50% de l'angle défini par deux cotés consécutifs du p-gone, ce dernier angle valant (p-2)𝜋/p. Si w=2p/((p-2)k) (ou simplement 2/k si p est infini) alors la visibilité correspond à un cône d'angle 2𝜋/k, l'angle entre deux axes. Comme il faut w≤1, cela implique que k≥2p/(p-2) (k≥2 si p infini). On retrouve le Theta_k-Graph pour chaque k≥6 en prenant p=3 et w=6/k, le demi-Theta-Graph pour tout k≥3 en prenant p=3 et w=3/k, le Yao_k-Graph pour chaque k≥2 en prenant p=0 (infini) et w=2/k, et la triangulation de Delaunay si p=0 (infini), k très grand et w=1. En fait, ce n'est pas tout-à-fait le graphe Yao_k, pour cela il faudrait que u soit le centre du polygone (c'est-à-dire du cercle).

pat p q r

Graphe possédant pqr sommets, issu d'un jeu à un joueur proposé par Pat Morin (Barbade, mars 2016). Le jeu se déroule sur une grille p×q et comprend r coups. Un coup est un ensemble de positions de la grille strictement croissantes (coordonnées en x et en y strictement croissantes). De plus, si la position (x,y) est jouée alors toutes les positions situées sur la même ligne mais avec une abscisse au moins x ou sur la même colonne mais avec une ordonnées au moins y sont interdites pour tous les coups suivants. Le score est le nombre total de positions jouées en r coups. Il s'agit de trouver le score maximum. Lorsque r=1, le score maximum vaut min(p,q). Lorsque p=q=n et r=2, alors le score maximum vaut ⎣ 4n/3⎦. La question est ouverte lorsque r>2, c'est au moins n^1.516 pour r=n où la constante vaut log_9(28).

Les sommets du graphes sont les positions dans les r grilles p×q et deux sommets sont adjacents les positions sont en conflits. Le score du jeu est alors un ensemble indépendant du graphe. Si r=1, le graphe est une grille p×q. Ce graphe active l'option -pos car un dessin de ce graphe (sous forme de grilles) est proposé.

       Ex: gengraph pat 4 4 4 -check kindepsat 8 | glucose -model

line-graph n k

Graphe ligne aléatoire à n sommets et de paramètre k>0 entier. Plus k est petit, plus le graphe est dense, le nombre d'arêtes étant proportionnel à (n/k)². Si k=1, il s'agit d'une clique à n sommets. Ces graphes sont obtenus en choisissant, pour chaque sommet, deux couleurs de [0,k[. Deux sommets sont adjacents ssi ils possèdent la même couleur. Il contient le graphe "uno n k k" comme sous-graphe. Ces graphes sont claw-free (c'est-à-dire sans K_{1,3} induit). Tout graphe ligne est claw-free, et les graphes ligne connexes avec un nombre pair de sommets possèdent toujours un couplage parfait. On rappelle qu'un graphe G est le graphe ligne d'un graphe H si les sommets de G correspondent aux arêtes de H et où deux sommets de G sont adjacents ssi les arêtes correspondantes dans H sont incidentes. On parle parfois de graphe adjoint.

uno n p q

Graphe ligne aléatoire à n sommets issu d'un graphe biparti de parts de taille p>0 et q>0. Plus précisément, les sommets sont des paires (i,j) d'entiers aléatoires de [0,p[ × [0,q[, pas nécessairement distinctes. Les sommets (i,j) et (i',j') sont adjacents ssi i=i' ou j=j'. C'est un sous-graphe induit du produit cartésien de deux cliques, K_p × K_q. Ce graphe est géométrique, les sommets étant des points de la grille p×q. Les sommets représentent aussi des cartes du jeu de UNO et les arêtes indiquent si un carte peut être jouée consécutivement à une autre. Le graphe "uno n k k" est un sous-graphe de "line-graph n k".

unok n p q k_p k_q

Graphe "uno n p q" particulier où les n points correspondant aux sommets sont pris uniformément parmi les ensembles de n points distincts de [0,p[ × [0,q[ ayant au plus k_p sommets par ligne et k_q par colonne. Il faut n ≤ min{p·k_p,q·k_q} et p, q, k_p, k_q>0. Si k_p<0, alors on fait comme si k_p=p, de même pour k_q=q si k_q<0. Contrairement à uno, deux sommets ont toujours des coordonnées distinctes. Le graphe résultant est de degré au plus k_p+k_q-2, et est de path-width (et aussi de tree-width) au plus celle du produit de clique K_{k_p} × K_{k_q} soit environ k_p·k_q/2. Le temps de génération des n points est en O(npq) contre O(n) pour uno, mais une optimisation (algorithme par rejets) fait qu'il est très souvent en O(n+p+q), dans les cas peu dense par exemple. Si k_p ou k_q=1, le graphe est une union de cliques, et si k_p=k_q=2 et n=2p=2q, c'est une union de cycles.

       Ex: gengraph unok 200 100 100 3 2 -visu

wpsl n p q
upsl n p q
wpsld n p q
upsld n p q

Weighted/Uniform Planar Stochastic Lattice. Graphe planaire aléatoire connexe dont les sommets correspondent à certains points d'une grille p×q et les arêtes à des lignes horizontales ou verticales. Il est généré selon un processus en n≥0 étapes décrit dans un paragraphe ci-après. Il faut p,q≥2. Il comprend au plus 3n+1 faces internes rectangulaires, appelés blocs, qui forment une partition des cases de la grille p×q. C'est un graphe 2-dégénéré qui possède au plus min{5n+4,p·q} sommets dont 4 sont de degré 2, les autres étant de degré 3 ou 4 selon une répartition moyenne 80%-20%. La variante wpsld (ou upsld) représente le graphe dual qui est 4-dégénéré et connexe. Les sommets (au plus 3n+1) correspondent aux blocs (positionnés en leurs centres), deux blocs étant adjacents s'ils ont un bord en commun. Pour le dual les coordonnées des centres des blocs sont doublées pour être entières, et le dessin n'est pas forcément planaire. L'option -directed permet d'obtenir une 2-orientation et une 4-orientation pour le dual.

       Ex: gengraph -seed 0 wpsl 100 400 500 -dot scale auto -visu
           gengraph -seed 0 wpsld 100 400 500 -dot scale auto -visu
	   gengraph wpsl 2500 70000 70000 -dot scale auto -visu
	   gengraph wpsl 2 10 10 -dot scale auto -xy grid 10 -visu
Le graphe est construit en n étapes. Au départ il y a un seul bloc contenant toutes les cases d'une grille p×q. Le bord de ce bloc correspond aux 4 coins de la grille et forme un cycle de longueur 4. À chacune des n étapes ont sélectionne un bloc B parmi ceux déjà construits selon une probabilité proportionnelle de sa surface (pour wpsl) ou uniformément parmi tous les blocs (pour upsl). Ici la surface d'un bloc est le nombre de cases -- et non de points -- de la grille qu'il contient. Puis B est découpé selon une croix dont le centre est un point de la grille interne de B (pas sur un bord) choisi aléatoirement uniformément. (La variante consistant à découper un bloc en deux correspond au graphe wdis et ses variantes.) Le bloc n'est pas découpé s'il ne contient pas de points de la grille. Une autre façon de concevoir le processus pour wpsl est de choisir n points de la grille p×q aléatoirement et uniformément. Puis, depuis chaque point et dans un ordre quelconque, faire pousser une croix jusqu'à atteindre un bord ou une croix précédente, les points se trouvant sur le passage d'une croix étant supprimés. La création du graphe prend un temps O(nlogn) en moyenne, indépendant des dimensions p et q qui peuvent être donc relativement grandes. Ensuite, le test d'adjacence, lié à sa k-orientation, est constant.

wdis n p q
udis n p q
wdisd n p q
udisd n p q

Rectangular Dissection. Graphe planaire aléatoire connexe dont les sommets correspondent à certains points d'une grille p×q et les arêtes à des lignes horizontales ou verticales. Il est généré selon un processus en n≥0 étapes similaires à wpsl (et ses variantes). Les variantes wdisd et udisd correspondent au graphe dual. À chaque étape du processus on sélectionne aléatoirement un bloc, soit proportionnellement à sa surface (wdis) soit uniformément (udis), que l'on le coupe en deux sous-blocs. Le sens de la découpe (verticalement ou horizontalement) est soit aléatoire uniforme (udis) soit selon une probabilité proportionnelle à la longueur des cotés (wdis), préférant découper le plus grand coté. Il possède au plus min{2n+4,p·q} sommets: 4 de degré 2, presque tous les autres de degré 3 sauf quelqu'uns de degré 4. Le dual possède n+1 sommets. Il partage un grand nombres de propriétés communes avec wpsl, en particulier l'orientation. Tous les graphes wpsl peuvent être générés par un wdis.

ngon p c x

Triangulation particulière d'un polygone régulier. Plusieurs types de triangulations sont produites suivant la valeur des paramètres. Elles ont p, 3p ou 4p sommets. Si x&4=0, alors la triangulation a 3p sommets (avec p>0) et est composée d'un triangle équilatéral central. Si x&4=1, alors la triangulation a 4p sommets et est composée d'un carré central avec une diagonale. La triangulation est symétrique dans chacun des 3 ou 4 croissants délimités par chacune des arêtes du polygone central. Si AB est l'une de ces arêtes (A avant B dans le sens direct), alors on note C le point de l'arc de cercle de A à B à distance c de A. On doit avoir c∈[0,p/2]. Les deux bits de poids faible de x définissent comment sont construits les triangulations de l'arc AC et CB. Tous les points de AC sont connectés à A si x&1=1 et à C sinon. Et, tous les points de BC sont connectés à B si x&2=1 et à C sinon. Si x&8=1 alors la triangulation est asymétrique. On remplace c par p-c pour un arc AB sur deux.

Si x=-1, alors il s'agit d'une autre triangulation. Elle a p sommets et est symétrique par rapport à un axe horizontal comprenant trois "fan": un depuis le point 0 vers tous ceux de [c,n-c], un depuis c vers tous ceux de [0,c], et enfin un depuis n-c vers tous ceux de [n-c,n].

Si x=-2, alors il s'agit de la triangulation récursive à 3p sommets. Le paramètre c n'a pas de rôle. Chacun des trois arc est coupé en deux récursivement. Si p n'est pas une puissance de deux, alors le graphe peut ne pas être une triangulation complète, mais le graphe reste cependant planaire.

La triangulation qui expérimentalement minimise le stretch maximum (voir -check stretch) est obtenue avec "ngon p 𝛼p 3" où 𝛼 = 231/512 ≃ 45%. Le stretch maximum est environ 1.455 réalisé entre les sommets u=p+30% et v=3p-20%.

behrend p k

Graphe régulier de p·k sommets possédant un très grands nombre de cycles de longueur k arête-disjoints où p,k ≥ 2. Si p est premier, il en possède exactement p·c! = p^{2-o(1)} où c ~ log(p)/loglog(p). Son degré est 2c! si k>2 ou c! si k=2. Le graphe est défini que p soit premier ou pas. Il est construit à partir de k stables S_0,…,S_{k-1} de chacun p sommets. Chacun des cycles de longueur k contient exactement un élément de chaque S_j qui est le sommet d'indice i+j·x (mod p) dans S_j avec i∈[0,p[ et x∈X où X⊂[0,p[ est un ensemble où k entiers quelconques ne sont jamais en progression arithmétique. On construit X comme l'ensemble de tous les entiers < p/(k-1) s'écrivant sur c chiffres distincts pris dans [0,c[ en base ck+1 avec c maximum. Donc |X|=c!. Lorsque p est petit, le graphe peut ne pas être connexe.

Par exemple, pour p=421 et k=3 on obtient c=3 et X = { 012, 021, 102, 120, 201, 210 } (nombres écrits en base ck+1=10). On vérifie qu'on a bien p > (k-1)·max{X} = 420. Ce graphe et donc 12-régulier possède p·k = 1263 sommets et p·c! = 5052 triangles arête-disjoints car 421 est premier. La table ci-dessous donne en fonction de k et du degré souhaité la plus petite valeur de p=p(k) possible. Si p est plus petit que p(k), alors le degré sera moindre. Lorsque k=2, le degré est c! au lieu de 2·c!.

                     2·2!   2·3!    2·4!       2·5!
              degré    4     12      48        240
    	     ──────────────────────────────────────
               p(2)    6    106   2,359     62,811
               p(3)   15    421  13,885    549,921
               p(4)   28  1,054  46,003  2,419,831
    	     ──────────────────────────────────────
Ces graphes sont utilisés en "property testing" pour montrer qu'il est difficile de déterminer si un graphe dense possède ou pas un cycle de longueur k.

rplg n t

Random Power-Law Graph. Graphe aléatoire à n sommets où les degrés des sommets suivent une loi de puissance d'exposant t>1 (typiquement un réel t∈]2,3[). L'espérance du degré du sommet i=0…n-1 est w_i = (n/(i+1))^(1/(t-1)). La probabilité d'avoir l'arête i-j est min{w_i·w_j/S,1} avec S=∑_k w_k. La valeur communément observée pour le réseau Internet étant t=2.1.

bdrg n_1 d_1 … n_k d_k .

Bounded Degree Random Graph. Graphe aléatoire dont la distribution des degrés des sommets est fixée par les paires (nᵢ,dᵢ) signifiant qu'il y a nᵢ sommets de degré au plus dᵢ. Ainsi "bdrg n 3 ." génère un graphe sous-cubique aléatoire à n sommets, si n est pair. Les sommets sont dupliqués selon leur distribution de degré puis un couplage aléatoire détermine les arêtes. Les boucles et les arêtes multiples sont supprimer. Il suit que le degré des sommets ne dépasse pas dᵢ. Ils peuvent cependant être inférieurs. Le nombre de sommets est n=∑ᵢ nᵢ et le nombre d'arêtes au plus m = ½∑ᵢ (nᵢ·dᵢ). Si cette somme n'est pas entière, alors le degré d'un des sommets ayant dᵢ>0 est diminué d'un. (C'est un sommet avec dᵢ>0 avec le plus grand i qui est choisi.)

fdrg n_1 d_1 … n_k d_k .

Fixed Degree Random Graph. Graphe aléatoire asymptotiquement uniforme dont les degrés des sommets sont fixées par les paires (nᵢ,dᵢ) signifiant qu'il y a nᵢ sommets de degré dᵢ. La suite des degrés doit être graphique, à savoir qu'il existe au moins un graphe simple ayant ces degrés (sinon une erreur est affichée). Ainsi "fdrg n 3 ." génère un graphe cubique aléatoire asymptotiquement uniforme, à condition que n soit pair. Il est possible d'obtenir des graphes non connexe, comme avec "fdrg 3 2 1 0 ." composé d'un triangle et d'un sommet isolé. La complexité est en moyenne O(mΔ+Δ⁴) où m=∑ nᵢdᵢ et Δ=max{dᵢ}, et pour être asymptotiquement uniforme, il faut Δ=o(m^¼) ou Δ=o(√n) pour les graphes réguliers (tous les dᵢ égaux ou k=1).

matching n

Graphe composé de n arêtes indépendantes, c'est-à-dire de n copies de K₂. L'option -directed permet d'obtenir une 1-orientation.

load file[:range]
loadc file[:range]

Graphe défini à partir du fichier "file" ou de l'entrée standard si file vaut "-". Si "file" est une famille de graphes, alors il est possible d'utiliser la variante "file:range" pour préciser l'identifiant du graphe souhaité (sinon c'est le premier graphe de la famille qui sera considéré). Le graphe (ou la famille) doit être au format standard, les sommets numérotés par des entiers positifs. Les caractères situés sur une ligne après "//" sont ignorés, ce qui permet de mettre des commentaires.

Le temps et l'espace nécessaire au chargement du graphe sont linéaires en la taille du fichier (si "file" est une famille de graphes, le fichier est entièrement lu). Cependant, pour la génération à proprement parlée du graphe final, qui peut comprendre l'option -not par exemple, toutes les arêtes potentielles, soit O(n²), sont passées en revue pour être testées. La variante "loadc" (pour "load & check") permet une génération plus rapide lorsqu'utilisée avec -check (ou les alias utilisant -check, comme -maincc par exemple). Elle permet de passer directement de l'étape de chargement du graphe à l'étape du test de l'algorithme en sautant la phase de génération des arêtes. En contre-partie, le graphe n'est pas affiché et les options comme -not, -permute, -delv, -dele, etc. n'ont plus d'effet. La variante "loadc file" est environ 20% plus rapide que "load file -fast".

Pour charger un graphe au format dot on peut utiliser le script dot2gen.awk en amont, comme dans l'exemple suivant:

           nop file.dot | awk -f dot2gen.awk | gengraph load -
Le filtre nop de GraphViz, qui est recommandé mais pas nécessaire, permet de standardiser le format dot initial. Il transforme par exemple les expressions du type "a--{b;c;}" en "a--b;a--c;".

Notez que la suite d'options "load file -fast -format dot<type>" permet de convertir "file" au format <type> souhaité. Ce graphe active l'option -directed si "file" contient au moins un arc. Dans ce cas l'option -undirected n'aura pas d'effet.

GRAPHES ORIENTÉS :

aqua c_1 … c_n .

Graphe orienté dont les sommets sont les suites de n entiers positifs dont la somme fait c_1 et dont le i-ème élément est au plus c_i. Ils représentent les façons de répartir une quantité c_1 de liquide dans n récipients de capacité c_1 … c_n. Il y a un arc u->v s'ils existent i et j tels que v est le résultat du versement du récipient c_i vers le récipient c_j. Le graphe est isomorphe au graphe où les c_i=0 ont été supprimés, les c_i ont été triés par ordre décroissant et où c_1 a été remplacé par min{c_1,c_2+…+c_n}. Par exemple, "aqua 4 1 0 2 ." est isomorphe à "aqua 3 2 1 .". Le nombre de sommets ne peut pas dépasser binom{n+c_1}{n}. Le graphe peut être connexe mais non fortement connexe comme "aqua 2 2 .".

       Ex: gengraph aqua 3 2 1 . -label 1 -dot filter dot -visu

collatz n a_0 b_0 … a_{k-1} b_{k-1} .

Graphe de Collatz généralisé. Il est basé sur la relation C: x ↦ (aᵢ·x + bᵢ)/k, définie pour tout entiers x>0, où i = x%k et où aᵢ,bᵢ sont entiers (pas forcément positifs). Il faut aᵢ·i + bᵢ ≡ 0 (mod k) pour tout i pour que C(x) soit entier, sinon ⎣C(x)⎦ est considérée et C⁻¹ n'est plus forcément injective. Les entiers générés forment les sommets du graphe, les arcs étant les relations x→C(x).

Le graphe pour le problème "3x+1", défini par la relation x↦x/2 si x≡0 (mod 2) et x↦x/2 si x≡1 (mod 2), est donc le graphe "collatz n 1 0 3 1 .".

Si n>0, la boule de volume n est générée en itérant la relation inverse depuis x=1, soit C⁻¹: x ↦ (k·x-bᵢ)/aᵢ pour chaque i tel que aᵢ divise k·x-bᵢ. Il est important que C(x) soit entier pour que C⁻¹ soit injective. Si n<0, la relation est itérée depuis chaque entier x∈[1,|n|]. Dans le cas n>0, le graphe est connexe et comprend au plus n sommets, alors que pour n<0, il peut ne pas être connexe et contenir plus de |n| sommets. Il s'agit de deux sous-graphes (n>0 et n<0) induit du même graphe infini. Dans tous les cas c'est un graphe orienté avec au plus un successeur (arc sortant) et k prédécesseurs (arcs entrant), et peut contenir des cycles dont des boucles et des arcs symétriques.

       Ex: gengraph collatz -65 1 0 5 -1 5 1 3 1 . -label 1 -visu
La fameuse conjecture de Collatz pour le problème "3x+1" affirme que le graphe "collatz n 1 0 3 1 ." est connexe quel que soit n<0 (voir aussi "syracuse n"). Pour de grandes familles de coefficients aᵢ,bᵢ, il est conjecturé que le graphe possède un nombre constant de composantes connexes, comme par exemple 3 pour "collatz n 1 0 5 1 .". Savoir si le graphe généralisé de Collatz est connexe est indécidable, même si tous les bᵢ=0 [Conway'72].

La génération du graphe proprement dite est basée sur une file initialisée aux valeurs 1..|n| pour lesquelles la relation C est successivement appliquée (si n<0). Il s'agit donc d'une sorte de parcours en largeur du graphe depuis n sources en parallèle. La construction est limitée arbitrairement à n² sommets car, suivant les coefficients aᵢ,bᵢ, ce parcours peut ne pas converger pour certain x∈[1,|n|]. Attention! Les valeurs C(x) négatives sont exclues du graphe, ce qui peut aussi exclure les valeurs dépassant 2³¹ et donc déconnecter le graphe. Si n>0, on initialise la file avec seulement la valeur 1 et on itère les k relations inverses, si elles s'appliquent, jusqu'à produire exactement n sommets. Il s'agit donc d'un simple parcours en largeur depuis 1. Bien que le nombre d'arcs soit linéaire, la génération de tous les successeurs prend un temps quadratique en le nombre de sommets final du graphe si n<0, et O(kn²) si n>0.

GRAPHES COMPOSÉS :

mesh p q (= grid p q .)

Grille 2D de p x q sommets.

hypercube d (= grid 2 … 2 .)

Hypercube de dimension d.

path n (= grid n .)

Chemin à n sommets.

cycle n (= ring n 1 .)

Cycle à n sommets.

torus p q (= grid -p -q .)

Tore à p x q sommets.

stable n (= ring n .)
empty n (= ring n .)

Stable à n sommets.

clique n (= -not ring n .)

Graphe complet à n sommets.

bipartite p q (= rpartite p q .)

Graphe biparti complet K_{p,q}.

utility (= rpartite 3 3 .)

Graphe biparti complet K_{3,3} qui doit son nom au problème de la connexion planaire de trois maisons à trois stations (eau, gaz, électricité). C'est aussi le graphe de Haar H(7).

domino (= grid 2 3 .)

Graphe planaire à 6 sommets composé de deux carrés partageant une arête.

kite (= -not banana 1 3)

Kite Graph, graphe à cinq sommets composé de deux triangles partageant une arête et d'un sommet pendant (degré 1) attaché à un sommet de degré deux. C'est aussi un "parachute 2".

parapluie n (= -not parachute n)

Graphe planaire à n+3 sommets, complémentaire du parachute. Le graphe "parapluie" classique correspond à n=4.

hourglass (= barbell 3 3 0)

Graphe Papillon ou encore Butterfly. Il a 5 sommets et est composé de deux triangles partageant un sommet.

cuboctahedron (= linial 4 2)

Cuboctaèdre: graphe planaire 4-régulier à 12 sommets. Il possède 24 arêtes et 14 faces qui sont des triangles ou des carrés. C'est le dual du rhombic-dodécaèdre.

octahedron (= antiprism 3)

Octaèdre: graphe 4-régulier planaire à 6 sommets ayant 8 faces triangulaires. Il s'agit de deux pyramides dont la base à 4 sommets est commune. C'est aussi le graphe de Johnson J(4,2).

d-octahedron d (= -not matching d)

Octaèdre de dimension d: obtenu à partir d'un octaèdre de dimension d-1 auquel on ajoute deux sommets universels, l'octaèdre de dimension 1 étant composé d'un stable de deux sommets. L'octaèdre classique est obtenu avec d=3, pour d=2 il s'agit d'un carré.

tetrahedron (= -not ring 4 .)

Tétraèdre: pyramide composée de 4 faces triangulaires. C'est aussi une clique à 4 sommets.

cube (= crown 4)
hexahedron (= crown 4)

Hypercube de dimension 3, graphe planaire cubique à 8 sommets où toutes les faces sont des rectangles. C'est aussi un hexaèdre (6 faces carrées) ou encore le graphe de Haar H(11).

associahedron (= flip 6)

Associaèdre (3D): graphe planaire cubique à 14 sommets composé de 3 faces carrées et 6 faces pentagonales.

johnson n k (= -not kneser n k k-2)

Graphe de Johnson J(n,k). Les sommets sont tous les sous-ensembles à k éléments de [0,n[ (il faut donc 0≤k≤n). Deux sommets sont adjacents ssi leurs ensembles correspondant ont k-1 éléments en commun. La distance entre deux sommets est la distance de Hamming entre les ensembles correspondant. Ils sont réguliers de degré k(n-k), de diamètre min{k,n-k}, de sommet-connectivité k(n-k). Ils sont aussi distance réguliers. J(n,1) est la clique K_n, J(n,2) est le complément du graphe de Kneser K(n,2) et le graphe ligne de K_n. En fait, tout sous-graphe induit de J(n,2) est un graphe ligne. J(4,2) est l'octaèdre, J(5,2) le complément du graphe de Petersen.

odd n (= kneser 2n-1 n-1 0)

Odd graph de paramètre n>0. Il s'agit du graphe de Kneser K(2n-1,n-1) dont les sommets correspondent aux binom(2n-1,n-1) sous-ensembles à n-1 éléments de {0,…,2n-2}. Le plus petit cycle impair est toujours de longueur 2n-1. Il est n-régulier et son diamètre est n-1. Il est distance-transitif (automorphisme entre paires de sommets à même distance) et donc distance-régulier. Si n>3, il est Hamiltonien et de maille 6. Il n'est jamais un graphe de Cayley si n>2. Pour n=2, il s'agit de K₃ et pour n=3 du graphe de Petersen (et donc non Hamiltonien).

biggs-smith (= biggs 17)

Graphe de Biggs-Smith. Il est cubique, possède 102 sommets, et est distance-régulier. Il n'existe que 13 graphes cubiques distance-réguliers. De nombre chromatique 3, son diamètre est 7, comme son rayon, alors que sa maille est 9.

claw (= rpartite 1 3 .)

Graphe biparti complet K_{1,3}.

star n (= rpartite 1 n .)

Arbre (étoile) à n feuilles et de hauteur 1.

tree n (= arboricity n 1)

Arbre plan enraciné aléatoire uniforme à n sommets. Les sommets sont numérotés selon un parcours en profondeur depuis la racine et le long de la face extérieure.

caterpillar n (= grid n-r . -star r)

Arbre à n sommets dont les sommets internes (de degré > 1) induisent un chemin. Il est obtenu à partir d'un chemin de longueur n-r (où r est un nombre aléatoire entre 0 et n-1) et en appliquant l'option -star r. Si l'option -seed est présente, (pour intervenir sur la valeur "r"), il est important qu'elle figure avant caterpillar. [Ce graphe est désactivé, voir l'option -star.]

outerplanar n (= kpage n 1)

Graphe planaire-extérieur aléatoire connexe à n sommets (plan et enraciné). Ils sont en bijection avec les arbres plans enracinés dont tous les sommets, sauf ceux de la dernière branche, sont bicoloriés. Les sommets sont numérotés le long de la face extérieure. C'est aussi une numérotation selon un parcours en profondeur depuis la racine de l'arbre bicolorié. Il est aussi possible de générer des graphes planaires-extérieurs aléatoires Hamiltoniens, donc 2-connexes, avec "planar n f -1" ou "polygon n". L'option -directed permet d'obtenir une 2-orientation.

squaregraph n (= planar n 4 4)

Squaregraph aléatoire à n faces. Ce sont des graphes planaires 2-connexes dont toutes les faces (sauf l'extérieure) sont des carrées. De plus, les sommets des faces internes sont de degré au moins 4. Ce sont des sous-graphes de quadrangulations et donc des 2-pages. Ce sont éqalement des graphes médians: pour chaque triplet de sommets {u,v,w}, il existe un seul sommet, le médian, appartenant à un plus court chemin u-v, de v-w et de u-w. L'option -directed permet d'obtenir une 2-orientation.

random n p (= -not ring n . -dele 1-p)

Graphe aléatoire à n sommets et dont la probabilité d'avoir une arête entre chaque paire de sommets est p. L'option -dele étant déjà présente, il n'est pas conseillé de la réutiliser pour ce graphe.

netgraph (= sierpinski 2 3 -not)

Graphe à 6 sommets composé d'un triangle avec un sommet pendant à chacun d'eux. C'est le complémentaire du graphe de Hajós. On peut aussi le générer en utilisant "fdrg 3 3 3 1 .".

sunflower n (= cage 2n 2 2 .)

Tournesol à n pétales. C'est un graphe planaire-extérieur à 2n sommets composé d'un cycle de longueur n≥3 où chaque arête partage le coté d'un triangle. C'est le graphe "gear n" sans le sommet central. Pour n=3, c'est le graphe de Hajós.

gem (= fan 4 1)

Graphe à 5 sommets composé d'un chemin et d'un sommet universel.

egraph (= comb 3)

Arbre à 6 sommets et 3 feuilles en forme de E.

tgraph (= banana 1 3)
fork (= banana 1 3)

Fork Graph, arbre en forme de T à 5 sommets dont 3 feuilles.

ygraph (= banana 3 1)

Arbre à 7 sommets composé d'une étoile à trois branches.

cross (= banana 1 4)

Cross Graph, arbre à six sommets en forme de croix chrétienne.

knight p q (= chess p q 1 2)

Graphe des déplacements possible du chevalier dans un échiquier p q.

antelope p q (= chess p q 3 4)

Graphe des déplacements possible d'une antilope dans un échiquier p q, une antilope étant une pièce hypothétique se déplaçant de 3 cases selon un axe et de 4 selon l'autre.

camel p q (= chess p q 1 3)

Graphe des déplacements possible d'un chameau dans un échiquier p q, un chameau étant une pièce hypothétique se déplaçant de 1 case selon un axe et 3 de selon l'autre.

giraffe p q (= chess p q 1 4)

Graphe des déplacements possible d'une giraffe dans un échiquier p q, une giraffe étant une pièce hypothétique se déplaçant de 1 case selon un axe et de 4 selon l'autre.

zebra p q (= chess p q 2 3)

Graphe des déplacements possible d'un zèbre dans un échiquier p q, un zèbre étant une pièce hypothétique se déplaçant de 2 cases selon un axe et de 3 selon l'autre.

petersen (= kneser 5 2 0)

Graphe de Kneser particulier. Il est cubique et possède 10 sommets. Il n'est pas Hamiltonien et c'est le plus petit graphe dont le nombre de croisements (crossing number) est 2. C'est le complément du graphe ligne de K₅.

tietze (= flower_snark 3)

Graphe de Tietze. Il est cubique avec 12 sommets. Il possède un chemin Hamiltonien, mais pas de cycle. Il peut être plongé sur un ruban de Möbius, a un diamètre et une maille de 3. Il peut être obtenu à partir du graphe de Petersen en appliquant une opération Y-Delta.

mobius-kantor (= gpetersen 8 3)

Graphe de Möbius-Kantor. Graphe cubique à 16 sommets de genre 1. Il est Hamiltonien, de diamètre 4 et de maille 6. C'est aussi le graphe de Haar H(133).

dodecahedron (= gpetersen 10 2)

Dodécaèdre: graphe planaire cubique à 20 sommets. Il possède 30 arêtes et 12 faces qui sont des pentagones. C'est le dual de l'icosaèdre.

desargues (= gpetersen 10 3)

Graphe de Desargues. Il est cubique à 20 sommets. Il est Hamiltonien, de diamètre 5 et de maille 6.

durer (= gpetersen 6 2)

Graphe de Dürer. Graphe cubique planaire à 12 sommets de diamètre 4 et de maille 3. Il peut être vu comme un cube avec deux sommets opposés tronqués (remplacés par un cycle de longueur 3).

prism n (= gpetersen n 1)

Prisme, c'est-à-dire le produit cartésien d'un cycle à n sommets et d'un chemin à deux sommets. Pour n=3, c'est un graphe de Halin et aussi le complémentaire d'un cycle de longueur 6, et pour n=4 il s'agit du cube.

cylinder p q (= grid p -q .)

Produit cartésien d'un chemin à p sommets et d'un cycle à q sommets. Cela généralise le prisme (prism n = cylinder n 3). Un cube est un "cylinder 2 4".

nauru (= pstar 4)

Graphe de Nauru. C'est un graphe cubique à 24 sommets. Il s'agit d'un graphe "permutation star" de dimension 4. C'est aussi un graphe de Petersen généralisé P(12,5).

heawood (= cage 14 5 -5 .)

Graphe de Heawood. C'est un graphe cubique bipartis à 14 sommets, de maille 6 et de diamètre 3. C'est le graphe d'incidence du plan projectif d'ordre 2 (plan de Fano). Il est 1-planar. C'est le plus petit graphe dont le nombre de croisements (crossing number) est 3. C'est aussi le graphe de Haar H(69).

franklin (= cage 12 5 -5 .)

Graphe de Franklin. C'est un graphe cubique à 12 sommets, de maille 4 et de diamètre 3. C'est aussi le graphe de Haar H(37).

mcgee (= cage 24 12 7 -7 .)

Graphe de McGee. C'est un graphe cubique à 24 sommets, de maille 7 et de diamètre 4.

bidiakis (= cage 12 -4 6 4 .)

Graphe ou cube de Bidiakis. C'est un graphe planaire cubique à 12 sommets. Il est Hamiltonien et son nombre chromatique est 3. On peut le représenter comme un cube où deux faces opposées comportent une arête supplémentaire perpendiculaire joignant deux bord opposés. On peut aussi le représenter comme un cycle avec 3 colonnes et 3 lignes parallèles joignant des sommets opposés (comme une raquette de tennis).

dyck (= cage 32 5 0 13 -13 .)

Graphe de Dyck. C'est un graphe cubique 3-connexe biparti à 32 sommets. C'est le seul graphe cubique à 32 sommets à être symétrique, c'est-à-dire qui est à la fois arête et sommet transitif. Il est aussi torique, c'est-à-dire de genre 1.

pappus (= cage 18 5 7 -7 7 -7 5 .)

Graphe de Pappus. C'est un graphe cubique à 18 sommets, de maille 6 et de diamètre 4.

tutte-coexter (= cage 30 -7 9 13 -13 -9 7 .)

Graphe de Tutte-Coexter appelé aussi 8-cage de Tutte. C'est un graphe cubique à 30 sommets, de maille 8 et de diamètre 4. C'est un graphe de Levi mais surtout un graphe de Moore, c'est-à-dire un graphe d-régulier de diamètre k dont le nombre de sommets est 1+d·S(d,k) (si d impair) ou 2·S(d,k) (si d pair) avec S(d,k)=∑_{i=0}^{k-1} (d-1)^i.

gray (= cage 54 7 -7 25 -25 13 -13 .)

Graphe de Gray. C'est un graphe cubique à 54 sommets qui peut être vu comme le graphe d'incidence entre les sommets d'une grille 3×3×3 et les 27 lignes droites de la grille. Il est Hamiltonien, de diamètre 6, de maille 8, et de genre 7. Il est arête-transitif et régulier sans être sommet-transitif.

chvatal (= cage 12 3 6 3 6 6 3 6 -3 3 -3 3 3 .)

Graphe de Chvátal (1970). C'est le plus petit graphe régulier sans triangle de nombre chromatique 4. Il est 4-régulier, possède 12 sommets, est non-planaire, Hamiltonien et de diamètre 2.

grotzsch (= mycielski 4)

Graphe de Grötzsch. C'est le plus petit graphe sans triangle de nombre chromatique 4 (sans être régulier contrairement au graphe de Chvátal). Il possède 11 sommets et 20 arêtes. Comme le graphe de Chvátal, il est non-planaire de diamètre 2, de maille 4 et Hamiltonien. C'est le graphe de Mycielskian du cycle à 5 sommets.

hajos (= sierpinski 2 3)

Graphe de Hajós. Il est composé de trois triangles deux à deux partageant un sommet distinct. On peut le dessiner comme un triangle dans un triangle plus grand. Il est planaire et possède 6 sommets. C'est un graphe de Sierpinski ou encore le complémentaire d'un "sunlet 3", complémentaire du "netgraph", un "sunflower 3" ou encore "cage 6 2 0 .".

house (= -not grid 5 .)

Graphe planaire à 5 sommets en forme de maison. C'est le complémentaire d'un chemin à 5 sommets.

wagner (= ring 8 1 4 .)

Graphe de Wagner appelé aussi graphe W₈, un cycle à 8 sommets où les sommets antipodaux sont adjacents. C'est un graphe cubique à 8 sommets qui n'est pas planaire mais sans K₅. C'est aussi une échelle de Möbius.

mobius n (= ring n 1 n/2 .)

Échelle de Möbius, graphe cubique à n sommets obtenu à partir d'un cycle à n sommets dont les sommets opposés sont adjacents. Lorsque n est pair, il s'agit d'un ruban de Möbius, c'est-à-dire d'une échelle dont le premier et dernier barreau sont recollés en sens opposé. Pour n≤5, il s'agit d'une clique à n sommets. Il est donc cubique sauf pour n=1,2,3,5. Lorsque n≥5, le graphe n'est plus planaire, et pour n=8, il s'agit du graphe de Wagner.

ladder n (= grid 2 n .)

Graphe échelle à n barreaux, soit une grille à 2 x n sommets.

diamond (= fan 2 2)

Clique à quatre sommets moins une arête. C'est un graphe allumette, c'est-à-dire planaire et distance unitaire.

gosset (= ggosset 8 2 3 6 -1 .)

Graphe de Gosset. Il est 27-régulier avec 56 sommets et 756 arêtes, de diamètre, de rayon et de maille 3. Il est 27-arête-connexe, 27-sommet-connexe et Hamiltonien. C'est localement un graphe de Schläfli, c'est-à-dire que pour tout sommet le sous-graphe induit par ses voisins est isomorphe au graphe de Schläfli, qui est lui-même localement un graphe de Clebsch.

wheel n (=ringarytree 1 0 n 2)

Roue à n rayons. Graphe planaire à n+1 sommets composé d'un cycle à n sommets et d'un sommet universel, donc connecté à tous les autres.

web n r (=ringarytree r 1 n 2)

Graphe planaire à 1+n·r sommets composé d'une étoile à n branches de longueur r, les sommets de même niveau étant connectés par un cycle. Il généralise "wheel n" (r=1).

binary h (= ringarytree h 2 2 0)

Arbre binaire complet de hauteur h. Il possède 2^(h+1)-1 sommets et la racine est de degré deux.

arytree h k r (= ringarytree h k r 0)

Arbre complet de hauteur h où chaque noeud interne à exactement k fils, la racine étant de degré r.

rbinary n (= rarytree n 2 0)
rbinaryz n (= rarytree n 2 1)

Arbre binaire plan aléatoire uniforme à n noeuds internes. Il possède 2n-1 sommets (2n pour la variante rbinaryz) numérotés selon un parcours en profondeur modifié: tous les fils du sommet courant sont numérotés avant l'étape de récursivité. La racine est de degré 2 (=rbinary) ou 1 (=rbinaryz). Le dessin avec dot (-visu) ne respecte pas le plongement de l'arbre. L'option -directed permet d'obtenir une 1-orientation.

tw n k (= ktree n k -dele .5)

Graphe de largeur arborescente au plus k aléatoire à n sommets. Il s'agit d'un k-arbre partiel aléatoire dont la probabilité d'avoir une arête est 1/2. L'option -dele étant déjà présente, il n'est pas conseillé de la réutiliser pour ce graphe. L'option -directed permet d'obtenir une k-orientation.

pw n k (= kpath n k -dele .5)

Graphe de pathwidth au plus k, aléatoire et avec n sommets.

tadpole n p (= barbell -n 1 p)
dragon n p (= barbell -n 1 p)

Graphe à n+p sommets composé d'un cycle à n sommets relié à un chemin à p sommets.

lollipop n p (= barbell n p 0)

Graphe "tapette à mouches" (Lollipop Graph) composé d'une clique à n sommets reliée à un chemin de longueur p. Il a n+p sommets.

pan n (= barbell -n 1 1)

Graphe à n+1 sommets composé d'un cycle à n sommets et d'un seul sommet pendant.

banner (= barbell -4 1 1)

Graphe à 5 sommets composé d'un carré et d'un sommet pendant.

paw (= barbell -3 1 1)

Graphe à 4 sommets composé d'un triangle et d'un sommet pendant.

theta0 (=barbell -5 -5 -2)

Graphe Theta_0. C'est un graphe à 7 sommets série-parallèle obtenu à partir d'un cycle de longueur 6 et en connectant deux sommets antipodaux par un chemin de longueur 2. C'est un graphe allumette, c'est-à-dire planaire et distance unitaire.

nng n (= knng n 1)

Graphe du plus proche voisin (Nearest Neighbor Graph). Graphe géométrique défini à partir d'un ensemble de n points du carré [0,1[² (distribution par défaut). Le point i est connecté au plus proche autre point (par défaut selon la norme L2, voir -norm). Ce graphe est une forêt couvrante du graphe rng de degré au plus 6 (si la norme est L2).

td-delaunay n (= thetagone n 3 3 1)

Triangulation de Delaunay utilisant la distance triangulaire (TD=Triangular Distance). Ce n'est malheureusement pas toujours une triangulation, les sommets du bord pouvant être de degré un. Il s'agit d'un graphe planaire défini à partir d'un ensemble de n points aléatoires du carré [0,1[² (distribution par défaut). Ce graphe a un étirement de 2 par rapport à la distance euclidienne entre deux sommets du graphe. Ce graphe, introduit par Chew en 1986, est le même que le graphe "demi-theta_6", qui est un "theta-graph" utilisant 3 des 6 cônes. La dissymétrie qui peut apparaître entre le bord droit et gauche du dessin est lié au fait que chaque sommet n'a qu'une seule bissectrice de cône dirigée vers la droite, alors qu'il y en a deux obliques vers la gauche.

theta n k (= thetagone n 3 k 6/k)

Theta-graphe à k>0 secteurs réguliers défini à partir d'un ensemble de n points du carré [0,1[². Les sommets u et v sont adjacents si le projeté de v sur la bissectrice de son secteur est le sommet le plus proche de u. Ce graphe n'est pas planaire en général (sauf pour k<3), mais c'est un spanner du graphe complet euclidien si k≥6.

dtheta n k (= thetagone n 3 ⎣ k/2⎦ 6/k)

Demi-Theta-graphe à k≥2 secteurs réguliers défini à partir d'un ensemble de n points du carré [0,1[² (distribution par défaut). La définition est similaire au Theta-graphe excepté que seul 1 secteur sur 2 est considéré. Il faut k pair. Pour k=2, il s'agit d'un arbre, pour k=4, le graphe est de faible tree-width pas toujours connexe. Pour k=6, ce graphe coïncide avec le graphe td-delaunay.

       Ex: gengraph dtheta 500 6 -visu
           gengraph dtheta 500 4 -pos 0 -visu
           gengraph dtheta 500 2 -pos 0 -visu

yao n k (= thetagone n 0 k 2/k)

Graphe de Yao à k>0 secteurs réguliers défini à partir d'un ensemble de n points du carré [0,1[² (distribution par défaut). Les sommets u et v sont adjacents si v est le sommet le plus proche de u (selon la distance euclidienne) de son secteur. Ce graphe n'est pas planaire en général, mais c'est un spanner du graphe complet euclidien. Le résultat est valide seulement si k≥2. En fait, ce n'est pas tout à fait le graphe de Yao (voir thetagone).

percolation a b p (= udg a·b 1 -norm L1 -xy mesh a b -dele 1-p)

Grille de percolation à coordonnées entières (i,j) de [0,a[ × [0,b[ où p représente la probabilité d'existence de chaque arête. La différence avec le graphe "mesh a b -dele 1-p" est qu'ici le graphe est géométrique, donc dessiné selon une grille si l'option -visu est ajoutée.

hudg n r (= udg n r -norm hyper -xy hyper r)

Graphe géométrique aléatoire hyperbolique sur n points du disque unité. Deux sommets sont adjacents si leurs points sont à distance hyperbolique ≤ r. [A FINIR]

point n (= ring n . -pos 1)

Graphe géométrique composé de n points du plan mais sans aucune arête (voir "stable"). Ce graphe permet de visualiser la distribution des points, par défaut uniforme sur [0,1[², mais qui peut être modifiée avec l'option -xy.

       Ex: gengraph point 500 -xy seed 3 2.1 -visu
           gengraph point 1000 -xy seed 3 -0.1 -visu
           gengraph point 1000 -xy disk -visu

star-polygon n (= ring n 1 . -xy disk)

Polygone "star-shaped" aléatoire à n cotés contenu dans le disque unité (voir -xy ratio).

convex-polygon n (= ring n 1 . -xy convex)

Polygone convexe aléatoire à n cotés contenu dans le disque unité (voir -xy ratio). Voir aussi le graphe polygon n.

regular n d (= fdrg n d .)

Graphe d-régulier aléatoire à n sommets asymptotiquement uniforme. Il faut que nd soit pair. L'algorithme est de complexité O(nd²) et pour être asymptotiquement uniforme, il faut d=o(√n). On obtient nécessairement un matching si d=1, un stable si d=0, un cycle si d=2 et n<6.

cubic n (= fdrg n 3 .)

Graphe cubique aléatoire à n sommets asymptotiquement uniforme. Il faut que n soit pair.

plrg n t (= bdrg n_1 d_1 … n_k d_k .)

Power-Law Random Graph (ou scale-free graph). Graphe aléatoire à n sommets dont la distribution des degrés suit une loi en puissance d'exposant t>0 (typiquement un réel t∈]2,3[), la probabilité qu'un sommet soit de degré i>0 étant proportionnelle à 1/i^t. Plus précisément, la distribution est la suivante:

où a est un réel minimisant |n-s(𝛼)| avec p(𝛼)=⎣ exp(𝛼/t)⎦ et s(𝛼)=∑_{i=1}^{p(𝛼)} ⎣ exp(𝛼)/i^t⎦. Ce sont les mêmes graphes que ceux générés par Brady-Cowen'06 ou ceux étudiés par Lu'01.

syracuse n (= collatz n 1 0 3 1 .)

Graphe orienté issu du problème "3x+1" de Collatz. D'après la conjecture, il s'agit d'un graphe connexe. Les arcs sont définis par la relation x↦x/2 si x est pair, et x↦(3x+1)/2 sinon. La boule de volume n est générée depuis 1 si n>0 en itérant la relation inverse, et dans ce cas le graphe a précisément n sommets. Si n<0, la relation est itérée pour tous les entiers de [1,|n|] dans la limite de n² sommets.

       Ex: gengraph syracuse 18 -label 1 -visu 
           gengraph syracuse -18 -label 1 -visu 
Le rayon de la boule de volume n (excluant les valeurs multiples de 3 qui n'ont toujours qu'un seul prédécesseur) est expérimentalement < ln(n)/ln(1.36) pour tout n<10^18 et conjecturée en ln(n)/ln(4/3). La hauteur maximum atteinte à partir d'un entier de [1,n] est expérimentalement < n², avec seulement 7 exceptions pour n<10^18 (et dans ces cas là, la hauteur est < 9n²). Pour n=27, on obtient une hauteur record de 4,616 ≃ 7n², le second record pour n<10^18. Selon les conjectures, les trajectoires de hauteur maximum pour n ont une forme générale qui consiste à une montée ≃ 8·ln(n) étapes pour atteindre le maximum, puis une descente ≃ 24·ln(n) étapes, et les trajectoires extrêmes ont ≃ 42·ln(n) étapes.

kakutami_3x+1 n (= collatz n 1 0 6 2 .)

Variante de syracuse "non-compressée" qui est définie par la relation x↦x/2 si x est pair et et x↦3x+1 sinon. Comme le graphe de Collatz, il est possible d'avoir n<0.

kakutami_5x+1 n (= collatz n 3 0 30 6 3 0 2 0 3 0 30 6 .)

Graphe orienté issu du problème "5x+1" de Kakutami (cf. syracuse) défini par la relation x↦x/2 si x est pair, x↦x/3 si x est divisible par 3 mais pas par 2, et x↦5x+1 sinon. D'après la conjecture de Kakutami, il s'agit d'un graphe connexe. On peut se ramener à un graphe de Collatz en considérant 2×3=6 paires de coefficients. Comme le graphe de Collatz, il est possible d'avoir n<0.

       Ex: gengraph kakutami_5x+1 91 -undirected -visu

kakutami_7x+1 n (= collatz n 15 0 210 30 15 0 10 0 … 210 30 .)

Graphe orienté issu du problème "7x+1" de Kakutami (cf. syracuse) défini par la relation x↦x/2 si x est pair, x↦x/3 si x est divisible par 3 mais pas par 2, x↦x/5 si x est divisible par 5 mais ni par 2 ni par 3, et x↦7x+1 sinon. D'après la conjecture de Kakutami, il s'agit d'un graphe connexe. On peut se ramener à un graphe de Collatz en considérant 2×3×5=30 paires de coefficients. Comme le graphe de Collatz, il est possible d'avoir n<0.

farkas n (= collatz n 6 0 6 6 6 0 4 0 6 0 … 18 6 .)

Graphe orienté issu de la relation introduite par Farkas en 2005 qui a prouvé qu'elle définissait un arbre de racine 1. Proche du problème "3x+1" elle est définie par x↦x/2 si x est pair, x↦x/3 si x est divisible par 3 mais pas par 2, (3x+1)/2 si x≡3 (mod 4) et (3x+1)/2 si x≡1 (mod 4). On peut se ramener à un graphe de Collatz en considérant 12 paires de coefficients. Comme le graphe de Collatz, il est possible d'avoir n<0.

       Ex: gengraph farkas -34 -label 1 -visu

HISTORIQUE


v1.2 octobre 2007:

            - première version

v1.3 octobre 2008:

            - options: -shift, -width
            - correction d'un bug pour les graphes de permutation
	    - accélération du test d'ajacence pour les arbres, de O(n) à O(1),
              grâce à la représentation implicite
	    - nouveau graphes: outerplanar, sat

v1.4 novembre 2008:

            - format de sortie: matrix, smatrix, list
            - nouveau graphe: kout
            - correction d'un bug dans l'option -width
	    - correction d'un bug dans la combinaison -format/shift/delv

v1.5 décembre 2008:

            - correction d'un bug dans tree lorsque n=1

v1.6 décembre 2009:

            - nouveaux graphes: rpartite, bipartite

v1.7 janvier 2010:

            - nouveaux graphes: icosa, dodeca, rdodeca, cubocta, geo,
	      wheel, cage, headwood, pappus, mcgee, levi, butterfly,
	      hexagon, whexagone, arytree, binary, ktree, tw, kpath,
	      pw, arboricity, wagner, mobius, tutte-coexter, paley
            - nouveau format de sortie: -format dot
	    - nouvelles options: -header, -h, -redirect, -dotpdf
            - correction d'un bug dans kout, et dans tree lorsque n=0
	    - tree devient un cas particulier d'arboricity.
	    - aide en ligne pour les paramètres des graphes.

v1.8 juillet 2010:

            - nouveaux graphes: chvatal, grotzsch, debruijn, kautz
	      gpstar, pstar, pancake, nauru, star, udg, gpetersen,
              mobius-kantor, desargues, durer, prism, franklin,
	      gabriel, thetagone, td-delaunay, yao, theta, dtheta
            - suppression du graphe geo (remplacé par udg)
            - nouvelles options: -pos, -norm, -label, -dotfilter
	    - nouvelle famille d'options: -xy file/noise/scale/seed
	    - définition plus compacte dodeca (non explicite)
	    - utilisation du générateur random() plutôt que rand().
	    - correction d'un bug dans "-format standard" qui provoquait une erreur.
	    - correction d'un bug dans kneser pour k=0, n=0 ou k>n/2.
	    - nouveaux formats: -format dot<type>, -format xy
	    - suppression de -dotpdf (qui est maintenant: -format dotpdf)
	    - labeling pour: gpetersen, gpstar, pstar, pancake, interval,
	      permutation

v1.9 août 2010:

            - renome -h en -list
	    - renome -xy file en -xy load
	    - centrage des positions sur le barycentre des graines (-xy seed)
	    - nouvelles options: -star, -visu, -xy round
	    - les graphes peuvent être stockés en mémoire, sous la forme d'une liste
	      d'adjacence grâce à l'option -check.
	    - généralisation de -delv p avec p<0
	    - nouveaux graphes: caterpillar, hajos, hanoi, sierpinski, sunlet, load
	    - labeling pour: hanoi, sierpinski
	    - aide sur toutes les options (nécessitant au moins un paramètre)
              et non plus seulement pour les graphes
	    - nouvelle famille d'options: -vcolor deg/degr/pal
	    - correction d'un bug pour l'aide dans le cas de commande
	      préfixe (ex: pal & paley)

v2.0 septembre 2010:

	    - nouvelles options: -vcolor degm/list/randg, -xy unique/permutation,
	      -check bfs, -algo iso/sub
	    - l'option -xy round p admet des valeurs négatives pour p.
	    - les options "load file" et "-xy load file" permettent la
              lecture à partir de l'entrée standard en mettant
              file="-", la lecture de famille de graphes, et supporte les commentaires.
	    - les formats list/matrix/smatrix utilisent un espace
	      linéaire O(n+m) contre O(n²) auparavant.
	    - les sommets sur le bord (graphes géométriques) ne sont plus coupés
	      (bounding-box (bb) plus grandes).
	    - nouveaux graphes: kpage, outerplanar n (=kpage n 1), rng, nng
	      fritsch, soifer, gray, hajos (qui avait été définit mais non
	      implémenté !), crown, moser, tietze, flower_snark, markstrom,
	      clebsch, robertson, kittell, rarytree, rbinary, poussin, errera
	    - les graphes de gabriel (et rng,nng) dépendent maintenant de -norm.
	    - "wheel n" a maintenant n+1 sommets, et non plus n.
	    - aide en ligne améliorée avec "?". Ex: gengraph tutte ? / -visu ?
	    - les options -help et ? permettent la recherche d'un mot clef.
	      Ex: gengraph -help planaire / ? arbre
	    - description plus compacte de tutte (et des graphes à partir d'un tableau)
	    - correction d'un bug pour rpartite (qui ne marchait pas)

v2.1 octobre 2010:

	    - nouvelles options:
	      -check degenerate/gcolor/edge/dfs/ps1/paths/paths2/iso/sub/minor/isub
	      -filter minor/sub/iso/vertex/edge/degenerate/ps1
	      -filter degmax/degmin/deg/gcolor/component/radius/girth/diameter
	      -filter cut-vertex/biconnected/isub/all/minor-inv/isub-inv/sub-inv
            - suppression de -algo iso/sub: l'option -algo est réservée à la mis
	      au point de -check
	    - extension de -label b à b=2 qui force l'affiche des noms
              sous forme d'entiers même avec -permute.
	    - correction d'un bug pour house (qui ne marchait pas)
	    - nouveau graphe: windmill

v2.2 novembre 2010:

            - gestion des graphes orientés: lecture d'un fichier de
              graphe (ou d'une famille avec arcs et arêtes)
	    - nouvelles options: -(un)directed, -(no)loop, -check twdeg/tw,
	      -filter tw/id/hyperbol/rename
	    - permet l'affichage de la "value" (p) dans l'option -filter
	    - nouveau graphe: aqua
	    - correction du graphe tutte-coexter et suppression du
              graphe levi (qui en fait était le graphe de tutte-coexter).
	    - généralisation de l'option "load" à load:id family

v2.3 décembre 2010:

            - nouvelles options: -check ps1bis/edge, -filter ps1bis/tw2
	      -filter minus/minus-id/unique/connected/bipartite/forest
	      -check ps1ter
	    - remplacement de atof()/atoi() par strtod()/strtol() qui
	      sont plus standards.
	    - remplacement de LONG_MAX par RAND_MAX (=2^31-1) dans les
              expressions faisant intervenir random() qui est de type
              long mais qui est toujours dans [0,2^31[, même si
              sizeof(long)>4. Il y avait un bug pour les architectures
              avec sizeof(long)=8.
	    - nouveau graphe: cylinder
	    - suppression de la variante "load:id" au profit de la
              forme plus générale "file:range" valable pour load, -filter, etc.

v2.4 janvier 2011:

            - correction d'un bug dans -filter minus-id
	    - correction d'un bug dans rpartite (incorrect à partir de r>5 parts)
	    - correction d'un bug dans whexagon (nb de sommets incorrects)
	    - nouvelles options: -check ps1x/girth, -filter ps1c/ps1x
	    - renomage: ps1bis -> ps1b, ps1ter -> ps1c
	    - nouveau graphe: mycielski
	    - la graphe grotzsch est maintenant défini à partir du graphe
	      mycielski (la définition précédante était fausse)
	    - bug détecté: td-delaunay 500 -check gcolor -format no -seed
              7 | grep '>6' qui donne jusqu'à 7 couleurs; le nb de
              couleurs affichées dans -check gcolor est erroné

v2.5 mars 2011:

	    - nouveaux graphes: line-graph, claw

v2.6 juin 2011:

	    - amélioration du test -filter ps1: détection de cliques et d'arbres

v2.7 octobre 2011:

	    - nouvelle option: -check bellman (pour les géométriques seulement)
	    - ajout des champs xpos,ypos à la structure "graph".
	    - nouveaux graphes: linial, linialc, cube, diamond, theta0,

v2.8 novembre 2011:

	    - nouveaux graphes: ggosset, gosset, rplg, wiener-araya, headwood4
	    - correction d'un bug pour "-xy seed k n" lorsque k=1.
	    - nouvelles options: -check maincc, -maincc (non documentée)

v2.9 février 2013:

	    - nouveau graphe: frucht, halin
	    - correction d'un bug pour "-check gcolor" qui ne
	      renvoyait pas le nombre correct de couleurs, et qui de
	      plus n'utilisait pas l'heuristique du degré minimum.
	    - correction d'un bug pour "permutation -label 1"

v3.0 octobre 2013:

	    - nouveaux graphes: rig, barbell, lollipop
	    - généralisation de l'option -filter forest
	    - nouvelles options: -apex, -filter isforest, -filter istree, -filter cycle
	    - correction d'un bug dans -filter vertex
	    - amélioration de l'aide lors d'erreurs de paramètre comme:
              "-filter F vertex" au lieu de "-filter F vertex n"
	    - amélioration de l'option -header

v3.1 décembre 2013:

	    - nouveaux graphes: bpancake
	    - légère modification des labels des sommets des graphes pancake, 
	      gpstar et pstar
	    - nouvelles options: -xy grid, -xy vsize
	    - modification de la taille des sommets pour dot permettant de tenir
	      compte de -xy scale.

v3.2 mai 2014:

            - amélioration du test ps1b (ajoût de règle et réduction
	      du nombre d'indéterminées dans graphes des conflits)

v3.3 juillet 2014:

            - modification importante du code pour -check ps1
            - modification des graphes linial et linialc
	    - nouvelles options: -check kcolor, -vcolor kcolor, -len, -check kcolorsat

v3.4 février 2015:

            - documentation et mise au point de l'option -maincc
	    - correction d'un bug lors de la combinaison de "load file" et de "-vcolor pal grad"
	    - correction d'un bug dans la fonction SortInt() qui affectait "-vcolor deg"
	    - correction d'un bug avec l'option -label 1 pour certains graphes (outerplanar ...)
            - création du script dot2gen.awk pour convertir le format dot en format standard
	    - nouvelles options: -fast, -caption
	    - introduction du groupement d'arêtes/arcs i-(j k ...) dans le format standard
	      (il reste un bug si ce format est lu depuis l'entrée standard)

v3.5 mars 2015:

	    - correction d'un bug pour le dégradé de couleurs avec "-vcolor pal grad"
	    - nouvelles options: -check ncc/connected, -check routing scenario [...] cluster
	    - nouvelle variante de graphe: loadc file
	    - nouveaux graphes: octahedron, turan, hexahedron, tetrahedron, deltohedron,
	      trapezohedron, antiprism, flip, associahedron, shuffle
	    - changement de nom (ajoût du suffixe "hedron") pour: isoca, dodeca, cubocta,
	      rdodeca

v3.6 juin 2015:

            - nouvelles options: -version, -variant, -check info, -xy mesh,
	      -check routing tzrplg, -check routing dcr
	    - nouveaux graphes: percolation, hgraph, cricket, moth, bull, expander
	    - correction de bug dans "-help ?", dans "-check girth" qui donnait -1 pour
	      un cycle de taille n, dans butterfly (mauvais nombre de paramètres)
	    - vérification que le nombre de sommets n'est pas négatif
	      pour plusieurs graphes dont tree, kout, etc. ce qui
	      pouvait provoquer des erreurs
	    - vérification du format d'entrée pour load/loadc
	    - l'option -check maincc n'affiche plus le graphe initial
	    - description du format des familles de graphes dans l'aide
	    - affiche plus de messages d'erreurs: lecture d'un graphe au mauvais
	      format, mauvaise combinaison de d'options, ...

v3.7 juillet 2015:

            - nouvelle implémentation des mots de Dyck, qui sont
              maintenant uniformes. En conséquence les graphes
              aléatoires tree, arboricity, rarytree, rbinary, outerplanar,
              kpage … sont générés de manière uniformes.
	    - nouveaux graphes: treep (et simplification de halin),
	      ygraph, ringarytree (et simplification de arytree,
	      binary, wheel), netgraph, egraph, rgraph (=fish),
	      généralisation de barbell, tadpole (=dragon), pan,
	      banner, paw, theta0 (redéfinition), fan, gem, chess,
	      knight, antelope, camel, giraffe, zebra, utility,
	      zamfirescu, hatzel, web, bdrg, fdrg, regular, cubic, plrg
	    - nouvelles options: -check radius, -check diameter
	    - correction d'un bug si combinaison d'options -check ncc -format list
	      (mauvaise gestion de la variable CHECK)
	    - introduction de caractères UTF8 mathématiques dans l'aide

v3.8 novembre 2015:

            - nouveaux graphes: ladder, matching, d-octahedron, johnson
	    - correction d'un bug pour le graphe kpage (introduit à v3.7)

v3.9 février 2016:

	    - renomage de l'option "-xy scale" en "-xy box"
	    - correction d'un bug dans rbinary (mauvais alias/définition)
	    - correction d'un bug (introduit à v3.6) dans la fonction
              max(double,double) au lieu de fmax() qui affectait certains
              graphes et options géométriques (rng, -xy grid, percolation, ...)
            - correction d'un bug concernant rarytree lorsque b>2
	    - correction d'un bug dans les statistiques pour -check routing
	    - généralisation du graphe rarytree (augmentation du degré de la racine)
	    - nouveaux graphes: herschel, goldner-harary, rbinaryz,
	      point, empty, apollonian, dyck, cross, tgraph, bidiakis, gear,
	      centipede, harborth, sunflower, planar, squaregraph, polygon
	    - modification de certains graphes (cage, ring, gabriel,
              nng, rng) afin que le test d'adjacence ne dépende plus de N
              mais de PARAM[0] par exemple
	    - introduction du format %SEED pour l'option -caption

v4.0 mars 2016:

	    - nouveaux graphes: pat, star-polygon, convex-polygon
	    - nouvelles options: -check kindepsat, -xy circle, -xy polar,
	      -xy unif, -xy convex, -xy ratio, -xy zero
	    - aide permettant les préfixes comme dans -check routing cluster

v4.1 avril 2016:

	    - nouvelles options: -xy convex2, -check routing hdlbr/bc
	    - nouveaux graphes: kstar, split, cactus, squashed
	    - suppression de -check paths2 qui donnait toujours comme -check paths
	    - option -check bellman apparaît dans l'aide

v4.2 mai 2016:

	    - nouvelles options: -check routing agmnt, -format vertex,
	      -check routing hash mix, -xy unif, -xy polygon
	    - amélioration de l'option -check info
	    - prise en compte de -xy ratio dans -xy unif et -xy seed
	    - affichage de l'écart type dans les stats affiché par -check routing
	    - affichage des erreurs sur stderr plutôt que stdout
	    - nouveau graphe: suzuki

v4.3 juin 2016:

	    - nouveaux graphes: triplex, jaws, starfish
	    - suppression d'un bug (Abort trap: 6) pour -format dot<type>
	    - modification de l'initialisation du générateur aléatoire qui pouvait
              faire comme -seed 0 sur certains systèmes où clock() est toujours nulle
	    - ajoût de variantes pour -check routing cluster
	    - nouvelles options: -xy cycle, -xy disk, -check stretch, -xy surface
	    - modification de l'option -norm (-norm 2 -> -norm L2, etc.)
	    - renomage de -xy polar en -xy disk

v4.4 juillet 2016:

	    - nouvelle option: -check simplify
	    - nouveaux graphes: schlafli, doily, fork (=tgraph)
	    - suppression d'un bug pour gosset (mauvais paramétrage)

v4.5 août 2016:

	    - modification du terminateur de séquence pour bdrg et fdrg: -1 devient '.'
	    - refonte du prototype des fonctions d'adjacence: adj(i,j) -> adj(Q)
	    - désactivation des options -apex, -star (et donc de caterpillar)
	    - finalisation de l'implémentation de fdrg (et donc de regular et cubic)
	    - redéfinition des graphes: netgraph, egraph, sunlet, cross, tgraph, ygraph
	    - nouveaux graphes: comb, alkane (et ses nombreuses variantes), banana
	      rlt, circle
	    - l'option -fast est effective pour fdrg et bdrg
	    - suppression d'un bug pour -xy mesh
	    - correction du graphe "interval" qui renvoyait en fait un "circle"
	    - génération d'une aide html à partir du source: gengraph.html
	    - nouvelle option: -norm poly p

v4.6 septembre 2016:

	    - nouvelle option: -check routing scenario until s
	    - nouveaux graphes: uno, unok, behrend

v4.7 janvier 2017:

	    - dans -check dfs/bfs, détection d'une source invalide
	    - dans -check dfs, calcule et affichage la hauteur des sommets
	    - ajoût d'un paramètre pour unok

v4.8 mars 2017:

	    - calcul dans -check stretch du stretch max. minimum
	    - correction d'un bug dans -xy convex qui pouvait produire des ensembles
	      non convexes et des points en dehors du cercle de rayon 1
	    - nouveaux graphes: ngon

v4.9 juin 2017:

	    - correction d'un bug pour l'option -xy box et amélioration
	      du dessin de la grille pour -xy grid
	    - généralisation de -check bellman aux graphes non valués
            - renomage des options: -dotfilter -> -dot filter,
	      -len -> -dot len, -filter hyperbol -> -filter hyper
	    - nouvelles options: -norm hyper, -xy hyper, -dot scale,
	      -label b pour b=3 et b<0, -check volm
	    - nouveaux graphes: hudg, hyperbolic

v5.0 août 2017:

	    - nouveaux graphes: helm, haar
	    - nouveau format html

v5.1 août 2018:

            - redéfinition (plus simple) du graphe de Turán
	    - redéfinition de bidiakis comme graphe cage
	    - redéfinition de centipede comme graphe comb (et sans -star)
	    - simplification de bellman avec optimisation pour
              utilisation multiples comme dans -check stretch
	    - amélioration de détails dans l'aide html (blocs "!!!" et "Ex:")
	    - changement des paramètres (maintenant avec un . final)
	      pour: grid, aqua, rpartite, cage, ring, ggosset
	    - orientation corrigée avec -directed pour les graphes (et
              leurs composés) utilisant une représentation implicite:
              kout, ktree, kpath, kpage, hyperbolic, cactus, planar,
              rarytree, apollonian, expander, polygon
            - orientation supportée pour cage et ring (possibilité de cordes<0)
            - nouveaux graphes: margulis, collatz, syracuse, mst, farkas,
	      kakutami_[3|5|7]x+1 (3 graphes), [w|u][psl|dis][d] (8 graphes)
            - redéfinition de l'option -loop avec suppression de -noloop
	    - inversion des lignes/colonnes dans uno et unok
	    - redéfinition du cuboctahedron à partir de linial
	    - aide sur le graphe chvatal qui était abscente
	    - format xy: affichage coordonnées entières si elles le sont
	    - bug corrigé pour -label b avec b<0: affiche exclusif centré ou pas
	    - bug corrigé pour -xy zero et -xy bord apparu à la v49
	    - définitions des graphes oubliés mobius-kantor et dragon
	    - utilisation d'une version uniforme pour remplacer random()%k
	    - nouvelle option: -dot scale auto

v5.2 juin 2019:

            - nouveaux graphes: dart, kite, domino, hourglass, antenna,
	      parachute, parapluie, klein
	    - nouvelles abréviations pour les graphes alkane et option
	      -label 1 activée par défaut, correction d'un bug pour le
	      graphe methane
	    - chargement conditionnel des scripts js dans le format html
	    - nouvelle option: -visuh, -check subdiv
	    - correction d'un bug pour unok, introduit à la version v5.1
	    - correction d'un bug pour -check stretch (Bellman-Ford
              avec appels multiples)
	    - correction d'un bug pour nb_edges() introduit à la
	      version v5.1 et qui affectait par exemple -check edges
	    - correction bug dans la détection de séquence graphique
	      qui pouvait affecter fdrg, regular et cubic

v5.3 janvier 2021:

            - nouveaux graphes: knng, rectree, odd, biggs, biggs-smith
	    - redéfinition de nng à partir de knng
	    - renommage de headwood et headwood4 en heawood et heawood
	    - nouvelle option: -check prune, -dot dir

v5.4 février 2023:

            - nouveaux graphes: tree_fibo, tree_part, tree_binom
	    - nouvelles options: -dot attr, -check ball
	    - génération rapide (-fast) pour tous les graphes basés
	      sur une k-orientation et unification pour ceux basés sur
	      load (soit au total +15 graphes)
	    - correction d'un bug pour arboricity n k, introduit à la
	      version v5.1, qui fixait k=1
	    - ajoût du synonyme -check span pour -check sub
	    - ajoût de l'aide pour -check isub