Apprentissage interactif de la théorie des graphes
Apprentissage interactif de la théorie des graphes
Guest User
Using app without sign in
Vérificateur de graphe cordal
Vérifie si le graphe est chordal en utilisant l'Ordre d'Élimination Parfait
Sélectionnez un algorithme et générez les étapes pour commencer la visualisation
Un graphe est cordal quand tout cycle de quatre sommets ou plus possède une corde, une arête reliant deux sommets non consécutifs du cycle. Les graphes cordaux forment une classe bien élevée où de nombreux problèmes NP-difficiles, dont la coloration et la clique maximale, deviennent résolubles en temps polynomial.
La cordalité se teste avec le BFS lexicographique (Lex-BFS), qui ordonne les sommets en O(V + E). Un graphe est cordal exactement quand l'inverse de cet ordre est un ordre d'élimination parfait, c'est-à-dire que chaque sommet avec ses voisins postérieurs forme une clique, condition vérifiable en temps linéaire. Le même ordre donne ensuite de façon gloutonne la coloration optimale et les cliques maximales.
Les graphes cordaux permettent une élimination de Gauss efficace à remplissage minimal pour les matrices creuses, l'inférence exacte dans les modèles graphiques probabilistes via les arbres de jonction, la phylogénie parfaite en biologie computationnelle et l'allocation de registres pour les programmes structurés. Ils sont une porte d'entrée vers la théorie des graphes parfaits.
Tester la cordalité directement, en traquant un long cycle sans corde, coûte cher. La voie standard est indirecte: trouver un ordre d'élimination parfaite candidat, puis le vérifier.
// Etape 1: recherche de cardinalite maximale
poids[v] = 0 pour tout v; ordre = []
repeter V fois:
choisir le v non numerote de plus grand poids
ordre.prefixer(v)
pour chaque voisin n de v non numerote: poids[n]++
// Etape 2: verifier que c est un ordre d elimination parfaite
pour chaque v dans ordre, a la position i:
posterieurs = voisins de v apparaissant apres i
si posterieurs est vide: continuer
w = le sommet le plus precoce de posterieurs
si un u de posterieurs n est pas adjacent a w:
renvoyer NON cordal
renvoyer cordalUn ordre d'élimination parfaite est un ordre dans lequel chaque sommet, pris avec ses voisins postérieurs, forme une clique. Un graphe est cordal exactement lorsqu'un tel ordre existe. La recherche de cardinalité maximale en produit toujours un si le graphe est cordal, l'étape de vérification est donc ce qui transforme un ordre heuristique en preuve, et c'est aussi elle qui détecte l'échec lorsqu'aucun tel ordre n'existe.
Teste la cordalité d'un cycle de quatre sommets, puis ajoute une corde et teste à nouveau.
Graphe d'exemple: D'abord le cycle de 4 A-B, B-C, C-D, D-A. Ensuite le même graphe avec la corde A-C ajoutée.
Le cycle de 4 pur n'est pas cordal; l'ajout de la seule corde A-C le rend cordal. C'est la définition rendue concrète: un graphe est cordal lorsque tout cycle de quatre sommets ou plus possède une arête reliant deux sommets non consécutifs de ce cycle. Le cycle de 4 est le plus petit contre-exemple possible, ce qui en fait le cas de test standard.
Temps: O(V + E) · Espace: O(V + E)
La recherche de cardinalité maximale s'exécute en O(V + E) lorsqu'on la met en œuvre avec des seaux de sommets par poids, de sorte que sélectionner le maximum et incrémenter les voisins soient tous deux en temps amorti constant. La passe de vérification examine chaque sommet une fois et chacun de ses voisins postérieurs une fois, ce qui totalise O(V + E) à condition que les requêtes d'adjacence soient en temps constant via un ensemble de hachage. Le test complet est donc linéaire, ce qui constitue un résultat réellement surprenant: l'approche naïve consistant à énumérer les cycles et à vérifier la présence d'une corde dans chacun est exponentielle, et même une méthode plus fine fondée sur les cycles serait bien pire. Le BFS lexicographique est une alternative à MCS avec la même borne.
La cordalité sert généralement de porte d'entrée: dès qu'un graphe est reconnu cordal, plusieurs problèmes NP-difficiles y deviennent linéaires.
| Alternative | À préférer quand | Coût |
|---|---|---|
| Clique maximum sur graphe cordal | Le graphe est cordal. NP-difficile en général, mais linéaire ici via l'ordre d'élimination. | O(V + E) |
| Coloration sur graphe cordal | Les graphes cordaux sont parfaits, colorier gloutonnement en ordre d'élimination inverse est donc exactement optimal. | O(V + E) |
| Décomposition arborescente | Tu veux exploiter une faible largeur arborescente. Les graphes cordaux sont exactement ceux de largeur égale à la clique maximum moins 1. | O(V + E) si cordal |
| BFS lexicographique | Une alternative à MCS pour produire l'ordre candidat. Même complexité, constantes différentes. | O(V + E) |
Lire l'article complet: Graph Algorithms and Their Complexity
Algorithmes associés: Coloration de Graphe, Clique Maximale, Recherche en Largeur (BFS)