Le piège de l'ordre
Exercice · niveau 2 · informatique (MP2I/MPI), chapitre 24 — Composantes fortement connexes et couplages
Énoncé
Un étudiant remplace, dans Kosaraju, l'ordre de fin de traitement par l'ordre de découverte : il empile chaque sommet en entrant, et non en sortant. Trouver le plus petit graphe qui met sa version en défaut.
Corrigé
Trois sommets suffisent : et , c'est-à-dire les arcs , , . Les composantes réelles sont et .
La version correcte : le premier parcours part de , descend en , revient ; termine, puis , puis . Ordre de fin : ; pile : . On part de dans : les prédécesseurs de dans sont vides, donc n'a aucun arc sortant de , et l'on ramasse seul. Puis : dans , (déjà marqué) et , d'où . Résultat mesuré : c:0 a:1 b:1. Correct.
La version fautive : l'ordre de découverte est . On part donc de dans , où a pour successeurs et — puisque et dans . Le parcours ramasse les trois. Résultat mesuré : a:0 b:0 c:0, une seule composante . Faux.
La cause, en une phrase. L'ordre de découverte ne dit rien sur la place d'un sommet dans le quotient : a été découvert en premier simplement parce qu'il porte le numéro . L'ordre de fin, lui, porte une information : le dernier sommet à terminer appartient nécessairement à une composante source, car s'il existait un arc entrant venant d'une autre composante, le sommet source de cet arc aurait terminé après lui. C'est ce théorème-là que l'algorithme exploite, et il ne vaut que pour l'ordre de fin.
Et remarquer que le contre-exemple est minuscule. Un jeu de tests contenant un seul graphe à trois sommets et trois arcs aurait suffi à révéler la faute. C'est la partition en classes d'équivalence du chapitre chap:discipline : le cas « une composante contient le sommet de départ, une autre pointe vers elle » est une classe à part entière.
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.