Tout graphe orienté acyclique possède une source
Exercice · niveau 2 · informatique (MP2I/MPI), chapitre 13 — Le modèle des graphes
Énoncé
Une source est un sommet de degré entrant nul.
- Démontrer que tout dag fini non vide possède au moins une source.
- Que devient l'énoncé si l'on retire l'hypothèse d'acyclicité ?
- À quoi ce résultat sert-il ?
Corrigé
1. La démonstration. Soit un dag fini non vide. Considérons un chemin de longueur maximale — il en existe : les chemins d'un dag ne répètent aucun sommet, donc leur longueur est bornée par , et l'ensemble des longueurs est une partie finie non vide de .
Affirmons que est une source. Sinon, il existerait un arc .
- Si n'est pas sur le chemin, alors est un chemin de longueur : contradiction avec la maximalité.
- Si pour un , alors est un cycle : contradiction avec l'acyclicité.
Donc n'a pas de prédécesseur.
Le même argument sur montre que tout dag possède aussi un puits, sommet de degré sortant nul. Vérifié sur des dag tirés au hasard : chacun présente au moins une source et au moins un puits.
2. Sans l'acyclicité, l'énoncé est faux. Mesuré sur : aucune source, aucun puits — chaque sommet a un prédécesseur et un successeur. C'est bien l'acyclicité, et rien d'autre, qui fait le résultat.
Plus précisément : un graphe orienté fini est acyclique si et seulement si tout sous-graphe induit non vide possède une source. Le sens direct découle de ce qui précède, appliqué au sous-graphe ; la réciproque s'obtient en remarquant qu'un cycle est un sous-graphe induit sans source.
3. Ce à quoi il sert, et il sert beaucoup.
- Le tri topologique. Il fournit l'algorithme directement : prendre une source, l'émettre, la retirer avec ses arcs, recommencer. Le résultat précédent garantit qu'à chaque étape le graphe restant — encore un dag — a une source, donc que l'algorithme ne bloque jamais. Le programme fait explicitement « le lien entre accessibilité dans un graphe orienté acyclique et ordre » ; c'est ici (chapitre chap:parcours).
- La bonne fondation. Un dag fini est exactement un ordre partiel strict bien fondé sur ses sommets, et l'induction du chapitre chap:induction s'y applique. Un raisonnement par récurrence sur un dag part des sources ; une définition récursive part des puits.
- La détection de cycle. L'algorithme de tri topologique par degrés entrants — retirer les sommets de degré entrant nul jusqu'à épuisement — s'arrête avec des sommets restants si et seulement si le graphe a un cycle. Il détecte donc les cycles en tout en calculant l'ordre, ce qui est la manière usuelle de vérifier qu'un système de dépendances est cohérent : compilation d'un projet, feuille de calcul, ordonnancement de tâches.
Les autres exercices de ce chapitre Le cours du chapitre
Un blocage sur cet exercice ? Le tuteur d'Adloun guide par questions, sans donner la réponse.