Classes de Graphes

Les Graphes Cordaux expliqués

Les graphes cordaux sont l'une des classes de graphes les plus utiles dont vous n'avez peut-être jamais entendu parler. Leur propriété caractéristique est petite, mais elle a une remarquable contrepartie : des problèmes sans espoir sur les graphes généraux deviennent faciles en temps linéaire. Voici ce qu'ils sont, comment en repérer un et pourquoi ils comptent.

11 Min de lecture Mis à jour : Juillet 2026 Niveau Intermédiaire
Mohammed Islam Hadjoudj
Mohammed Islam Hadjoudj
Expert Operations Research Engineer

Qu'est-ce qu'un Graphe Cordal ?

Un graphe cordal, aussi appelé graphe triangulé, est un graphe dans lequel tout cycle de quatre sommets ou plus possède une corde. Une corde est une arête qui relie deux sommets du cycle non voisins le long de celui-ci. Autrement dit, un graphe cordal ne contient aucun cycle induit de longueur quatre ou plus : tout long cycle est découpé en triangles par des arêtes plus courtes.

La définition paraît étroite, mais beaucoup de graphes que vous connaissez déjà sont cordaux : les arbres, les graphes complets et les graphes d'intervalles sont tous cordaux. La figure ci-dessous montre le plus petit cas intéressant, un cycle à quatre sommets, sous ses formes non cordale et cordale.

Not chordal Chordal A B C D A B C D corde A-C
À gauche : le cycle à quatre A-B-C-D n'a pas de corde, il n'est donc pas cordal. À droite : ajouter la corde A-C le partage en deux triangles, le rendant cordal.

Cordes et Cycles Induits

Le mot qui fait tout le travail est induit. Un cycle est induit lorsque les seules arêtes entre ses sommets sont les arêtes du cycle elles-mêmes. Dès qu'une corde apparaît, le long cycle n'est plus induit : il a été triangulé.

Les deux définitions sont donc le même énoncé vu sous deux angles :

Les triangles, étant des cycles de longueur 3, sont toujours autorisés et n'ont jamais besoin de corde. C'est pourquoi les graphes cordaux donnent l'impression d'être "faits de triangles".

Sommets Simpliciaux et Ordres d'Élimination

La vraie puissance des graphes cordaux vient d'un théorème structurel. D'abord, deux définitions.

Le théorème de Fulkerson-Gross relie le tout :

Un graphe est cordal si et seulement s'il possède un ordre d'élimination parfait. De plus, tout graphe cordal a au moins un sommet simplicial, si bien que vous pouvez toujours commencer par en détacher un.

C'est le moteur derrière tout algorithme efficace sur les graphes cordaux. Une fois que vous avez un PEO, vous pouvez traiter les sommets dans cet ordre et résoudre les problèmes de façon gloutonne, car à chaque étape les voisins restants du sommet forment une clique sans surprise.

Reconnaître un Graphe Cordal

Étant donné un graphe, comment savoir s'il est cordal ? On pourrait chasser les cycles induits, mais c'est lent. La voie élégante utilise la caractérisation par PEO et s'exécute en temps linéaire, O(V + E).

  1. Exécutez un parcours en largeur lexicographique (Lex-BFS) ou une recherche de cardinalité maximale. Les deux produisent un ordre des sommets en visitant toujours ensuite le sommet ayant le plus de voisins déjà visités.
  2. Inversez cet ordre. Si le graphe est cordal, l'inverse est garanti d'être un ordre d'élimination parfait.
  3. Vérifiez que le candidat est bien un PEO. Si c'est le cas, le graphe est cordal ; si la vérification échoue, il ne l'est pas.

La recherche repose sur le parcours en largeur, adapté pour que les égalités soient départagées par des étiquettes lexicographiques. L'étape de vérification est la partie qui mérite d'être vue en code.

Vérifier un Ordre en Python

Voici la vérification centrale : étant donné un graphe sous forme d'ensemble d'adjacence et un ordre candidat, décidez s'il s'agit d'un ordre d'élimination parfait. Pour chaque sommet, tous ses voisins postérieurs doivent être adjacents au premier d'entre eux.

def is_perfect_elimination_order(graph, order):
    pos = {v: i for i, v in enumerate(order)}

    for v in order:
        # Voisins de v qui viennent plus tard dans l'ordre.
        later = [u for u in graph[v] if pos[u] > pos[v]]
        if len(later) <= 1:
            continue

        # v est simplicial ici si et seulement si ces voisins postérieurs forment une clique.
        # Il suffit de vérifier qu'ils sont tous adjacents au premier, w.
        w = min(later, key=lambda u: pos[u])
        for u in later:
            if u != w and u not in graph[w]:
                return False   # w et u suivent v mais ne sont pas adjacents

    return True

Si cela renvoie True pour l'ordre Lex-BFS inversé, le graphe est cordal. Ce même PEO est ensuite réutilisé pour résoudre les problèmes difficiles ci-dessous.

Pourquoi les Graphes Cordaux Comptent

Les graphes cordaux sont des graphes parfaits, une classe où le nombre chromatique est toujours égal à la taille de la plus grande clique. Cette structure ramène plusieurs problèmes réputés difficiles à des problèmes faciles. Étant donné un ordre d'élimination parfait, chacun d'eux s'exécute en temps linéaire.

ProblèmeGraphes générauxGraphes cordaux
Clique maximaleNP-difficileO(V + E)
Coloration optimaleNP-difficileO(V + E)
Ensemble indépendant maximalNP-difficileO(V + E)
ReconnaissanceO(V + E)

Il y a un dernier joyau. Un graphe est cordal exactement lorsqu'il possède un arbre de cliques, une décomposition arborescente dont les sacs sont les cliques maximales. Cela relie les graphes cordaux à la largeur arborescente : la largeur arborescente d'un graphe est la plus petite taille maximale de clique possible, moins un, sur toutes ses complétions cordales. Pour situer cette classe dans le paysage plus large, voir les applications de la théorie des graphes et la feuille de route.

Applications Concrètes

Construisez votre intuition sur de vrais graphes

Les cordes, les cycles et les cliques se ressentent bien plus facilement quand vous pouvez déplacer les sommets vous-même. Explorez la structure des graphes dans le visualiseur interactif.

Ouvrir le visualiseur d'algorithmes

Foire Aux Questions

Qu'est-ce qu'un graphe cordal ?

Un graphe cordal, aussi appelé graphe triangulé, est un graphe dans lequel tout cycle de quatre sommets ou plus possède une corde, une arête reliant deux sommets du cycle non adjacents le long de celui-ci. De façon équivalente, il n'a aucun cycle induit de longueur quatre ou plus.

Comment vérifier qu'un graphe est cordal ?

Exécutez un parcours en largeur lexicographique (Lex-BFS) ou une recherche de cardinalité maximale pour produire un ordre des sommets, puis vérifiez que son inverse est un ordre d'élimination parfait. Toute la vérification s'exécute en temps linéaire O(V + E).

Qu'est-ce qu'un ordre d'élimination parfait ?

Un ordre d'élimination parfait est un ordre des sommets dans lequel chaque sommet est simplicial au moment où il est retiré, c'est-à-dire que ses voisins restants forment une clique. Un graphe est cordal si et seulement s'il possède un tel ordre.

Pourquoi les graphes cordaux sont-ils importants ?

Les graphes cordaux sont des graphes parfaits, et plusieurs problèmes NP-difficiles sur les graphes généraux, dont la clique maximale, la coloration optimale et l'ensemble indépendant maximal, se résolvent en temps linéaire sur les graphes cordaux à l'aide d'un ordre d'élimination parfait.

Ressources d'Apprentissage Supplémentaires

Voyez-le, ne vous contentez pas de lire

La structure d'un graphe est bien plus intuitive en mouvement. Construisez un graphe, ajoutez une corde et regardez un long cycle se briser en triangles.

Entraînez-vous avec le visualiseur d'algorithmes