Aller au contenu principal

Aide-mémoire Graphes

Les définitions, les théorèmes de base et les algorithmes du parcours Graphes, rangés pour être retrouvés vite. Les démonstrations et les figures qui se déroulent sont dans les chapitres ; ici, seulement ce qu'il faut avoir en tête.

Les mots

TermeDéfinition
Graphe G=(V,E)G = (V, E)nn sommets VV et mm arêtes EE, des paires de sommets. Simple : ni boucle, ni arête multiple.
OrientéLes arêtes ont un sens : ce sont des arcs u→vu \to v.
PondéréChaque arête porte un poids : distance, coût, durée, capacité.
VoisinsDeux sommets reliés par une arête (adjacents).
Degré deg⁡(v)\deg(v)Nombre d'arêtes qui touchent vv. En orienté : deg⁡+(v)\deg^+(v) arcs sortants, deg⁡−(v)\deg^-(v) entrants.
CheminSommets reliés deux à deux par des arêtes (des arcs dans le bon sens, en orienté). Longueur : nombre d'arêtes ; poids : somme de leurs poids.
Cycle, circuitChemin fermé qui ne repasse par aucune arête ; on dit circuit en orienté.
Distance dist(u,v)\mathrm{dist}(u, v)Longueur, ou poids, d'un plus court chemin de uu à vv.
ConnexeUn chemin relie toute paire de sommets ; les morceaux sont les composantes connexes.
Fortement connexeEn orienté : un chemin de uu à vv et de vv à uu, pour toute paire.
Sous-graphe induitDes sommets choisis, et toutes les arêtes qui les relient.
CliqueSommets deux à deux voisins ; ω(G)\omega(G) est la taille de la plus grande.

Les familles à reconnaître

FamilleDéfinition, et ce qu'il faut savoir
Complet KnK_nToutes les paires reliées ; m=n(n−1)/2m = n(n-1)/2.
Cycle CnC_nn≥3n \geq 3 sommets en boucle ; biparti si nn est pair ; χ(C5)=3\chi(C_5) = 3 sans aucun triangle.
BipartiDeux camps, arêtes entre camps seulement. Biparti   ⟺  \iff aucun cycle de longueur impaire   ⟺  \iff χ≤2\chi \leq 2.
ArbreConnexe et sans cycle ; m=n−1m = n - 1 ; un seul chemin entre deux sommets. Forêt : sans cycle.
DAGOrienté sans circuit ; admet un tri topologique, a une source et un puits.
PlanaireSe dessine sans croisement. m≤3n−6m \leq 3n - 6 ; K5K_5 et K3,3K_{3,3} ne le sont pas.
EulérienUn cycle passe une fois par chaque arête : voir le théorème d'Euler.
HamiltonienUn cycle passe une fois par chaque sommet : aucun critère simple, problème difficile (NP-complet).
D'intervallesUn sommet par intervalle, une arête s'ils se chevauchent ; le glouton par début croissant est optimal, χ=ω\chi = \omega.

Les théorèmes de base

ThéorèmeÉnoncé, et ce qu'il permet
Poignées de main∑vdeg⁡(v)=2m\sum_v \deg(v) = 2m : on en tire mm, et le nombre de sommets de degré impair est pair. En orienté, ∑deg⁡+=∑deg⁡−=m\sum \deg^+ = \sum \deg^- = m.
ArbresPour nn sommets, deux propriétés parmi « connexe », « sans cycle » et « m=n−1m = n - 1 » entraînent la troisième. Ajouter une arête à un arbre crée exactement un cycle.
BipartisBiparti   ⟺  \iff aucun cycle impair : un cycle impair prouve qu'un graphe n'est pas biparti.
Euler (tournées)Arêtes d'un seul tenant : cycle eulérien   ⟺  \iff degrés tous pairs ; chemin eulérien   ⟺  \iff 0 ou 2 degrés impairs. Königsberg : quatre impairs, aucune promenade.
Euler (faces)Planaire connexe : n−m+f=2n - m + f = 2, d'où m≤3n−6m \leq 3n - 6.
Tri topologiqueIl existe   ⟺  \iff le graphe n'a pas de circuit. Un circuit est une contradiction dans les contraintes.
Encadrement de χ\chiω(G)≤χ(G)≤Δ(G)+1\omega(G) \leq \chi(G) \leq \Delta(G) + 1, où Δ\Delta est le degré maximal. Une coloration à kk couleurs prouve χ≤k\chi \leq k, jamais χ=k\chi = k.
Quatre couleursTout graphe planaire vérifie χ≤4\chi \leq 4.
Propriété de coupeL'arête la plus légère qui traverse une coupe appartient à un arbre couvrant minimal ; arbre unique si les poids sont distincts. Elle justifie Kruskal et Prim.
Flot max, coupe minLa valeur d'un flot maximal égale la capacité d'une coupe minimale : une coupe de même valeur certifie le flot.
Chemin augmentantUn flot, ou un couplage, est maximum   ⟺  \iff il n'admet aucun chemin augmentant : c'est le critère d'arrêt.
HallUn biparti (X,Y)(X, Y) a un couplage qui sature XX   ⟺  \iff ∣N(W)∣≥∣W∣\lvert N(W) \rvert \geq \lvert W \rvert pour tout W⊆XW \subseteq X : deux candidats pour un seul poste suffisent à prouver l'impossibilité.

Représenter en machine

ReprésentationMémoire, et coût des deux questions « voisins de uu ? » et « uu et vv voisins ? »
Matrice d'adjacenceO(n2)O(n^2) ; voisins en O(n)O(n) ; test en O(1)O(1). À réserver aux petits graphes denses.
Liste d'adjacenceO(n+m)O(n + m) ; voisins en O(deg⁡u)O(\deg u) ; test en O(deg⁡u)O(\deg u). En Python {u: [voisins]}, pondéré {u: {v: poids}}.
Liste d'arêtesO(m)O(m) ; tout se fait en O(m)O(m). Le format d'entrée de Kruskal.
Puissances AkA^kLe coefficient (i,j)(i, j) compte les chemins de longueur kk de ii à jj, arêtes répétées permises ; la diagonale de A2A^2 donne les degrés.
Graphe creuxm≪n2m \ll n^2 : liste d'adjacence. Une matrice de 200 000 carrefours a 4×10104 \times 10^{10} cases, presque toutes vides.

Les algorithmes

AlgorithmeCe qu'il calcule, sa condition, son coût, son idée
Parcours en largeurSommets atteignables et distances en nombre d'arêtes ; O(n+m)O(n + m). Une file ; marquer à l'entrée dans la file.
Parcours en profondeurComposantes, cycles, ordre de fin ; O(n+m)O(n + m). Une pile ou la récursion ; marquer à la sortie de la pile.
DijkstraPlus courts chemins depuis une source, poids ≥0\geq 0 ; O((n+m)log⁡n)O((n + m) \log n). Glouton : figer le sommet le plus proche, relâcher ses arcs.
Bellman-FordPlus courts chemins avec poids négatifs, sans circuit négatif ; O(nm)O(nm). n−1n - 1 passes de relâchement, puis une passe de contrôle.
KruskalArbre couvrant minimal ; O(mlog⁡m)O(m \log m). Arêtes par poids croissant, rejeter celles qui ferment un cycle (union-trouve).
PrimArbre couvrant minimal ; O(mlog⁡n)O(m \log n). Faire grossir un seul arbre par l'arête la plus légère qui en sort.
KahnTri topologique d'un DAG ; O(n+m)O(n + m). Retirer les sommets sans prédécesseur ; s'il en reste, il y a un circuit.
Kosaraju, TarjanComposantes fortement connexes ; O(n+m)O(n + m). Un ou deux parcours en profondeur, guidés par l'ordre de fin.
Coloration gloutonneChaque sommet prend la plus petite couleur libre ; au plus Δ+1\Delta + 1 couleurs, et l'ordre décide du résultat.
Edmonds-KarpFlot maximal ; O(nm2)O(nm^2). Chemins augmentants les plus courts dans le graphe résiduel, arcs inverses compris.

Modéliser un problème

Problème réelLe graphe, puis l'outil
Itinéraire le plus rapideCarrefours et tronçons pondérés par le temps : Dijkstra.
Relier des sites au moindre coûtSites et liaisons possibles avec leur coût : arbre couvrant minimal.
Planifier des tâchesDAG des précédences et durées : tri topologique, chemin critique.
Créneaux sans conflitUn sommet par activité, une arête par conflit : coloration (salles, fréquences, horaires).
Affecter des personnesBiparti candidats et postes : couplage maximum.
Débit d'un réseauRéseau orienté avec capacités : flot maximal, et la coupe minimale désigne le goulot.
Chaque rue une foisLes rues sont les arêtes : graphe eulérien.
Chaque ville une foisLes villes sont les sommets : hamiltonien, difficile, on se contente d'heuristiques.
Date au plus tôtto^t(v)=max⁡u→v(to^t(u)+dureˊe(u))\mathrm{tôt}(v) = \max_{u \to v} \big(\mathrm{tôt}(u) + \mathrm{durée}(u)\big) ; durée du projet = plus long chemin.
Date au plus tardtard(v)=min⁡v→wtard(w)−dureˊe(v)\mathrm{tard}(v) = \min_{v \to w} \mathrm{tard}(w) - \mathrm{durée}(v).
Marge totaletard(v)−to^t(v)\mathrm{tard}(v) - \mathrm{tôt}(v) ; la tâche est critique si elle est nulle.

Les pièges

PiègeCe qui est vrai
Poids négatifDijkstra peut rendre un résultat faux : Bellman-Ford.
« kk couleurs, donc χ=k\chi = k »Seulement χ≤k\chi \leq k. Minorer demande une clique, un cycle impair ou un raisonnement.
« Pas de triangle, donc 2 couleurs »C5C_5 n'a aucun triangle et demande 3 couleurs.
Glouton de colorationIl dépend de l'ordre ; optimal dans quelques cas seulement (intervalles par début croissant).
Preuve de non-bipartismeSeul un cycle impair prouve ; une arête entre deux sommets de même couleur peut venir d'un mauvais choix.
ProfondeurCe n'est pas la largeur avec une pile : la marque change de place.
Durée d'un projetPas la somme des durées : le plus long chemin du DAG.
Deux arbresL'arbre couvrant minimal n'est pas l'arbre des plus courts chemins : deux questions différentes.
Flot bloquéPlus de chemin de ss à tt dans le réseau ne prouve rien : chercher dans le graphe résiduel.
Grand graphe creuxPas de matrice : la mémoire croît en n2n^2.

Pour aller plus loin

Chaque ligne de cette page est démontrée et manipulée dans le parcours : le vocabulaire, les représentations, les parcours, les arbres couvrants, les plus courts chemins, les graphes orientés et l'ordonnancement, la coloration, les familles remarquables et les flots et couplages.

Version imprimable : les tables de syntaxe seules, sur une feuille.

Les autres aide-mémoire sont sur cette page, et les exercices dans Pratiquer.