Aller au contenu principal

Aide-mémoire Graphes

Les définitions, les théorèmes de base et les algorithmes à connaître, avec leurs conditions et leurs pièges.

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.
Les démonstrations qui s'exécutent, les exemples et les explications sont surpagevive.fr/ressources/graphes