Adloun

Dérouler Kosaraju

Exercice · niveau 2 · informatique (MP2I/MPI), chapitre 24 — Composantes fortement connexes et couplages

Énoncé

Sur le graphe de l'exercice « Décomposer à la main », dérouler l'algorithme du chapitre : donner l'ordre de fin de traitement du premier parcours, la pile, et l'ordre dans lequel les composantes sont numérotées. Que remarque-t-on sur cette numérotation ?

Corrigé

Premier parcours, en partant de et en suivant les listes dans l'ordre donné. La descente est ; n'a que comme successeur, déjà vu, donc termine le premier. En remontant :


ordre de FIN de traitement : f  g  h  d  c  e  b  a
pile (le dernier fini en tete) : a  b  e  c  d  h  g  f

Second parcours, sur , en suivant la pile :

DépartAtteint dans ComposanteNuméro
, puis déjà vu
(premier non marqué)

On retrouve les trois composantes de l'exercice « Décomposer à la main ».

Ce qu'on remarque, et c'est un résultat. La numérotation est un tri topologique du quotient : les arcs , , vont tous d'un numéro petit vers un numéro grand. Ce n'est pas un hasard de l'exemple. Une vérification sur graphes orientés tirés au hasard ne trouve aucun arc du quotient allant d'un grand numéro vers un petit.

Pourquoi : le second parcours démarre toujours sur une composante source du reste du quotient de (c'est l'argument du chapitre), et l'épuise avant de passer à la suivante. Il traite donc les composantes dans un ordre où toute composante vient après celles qui pointent vers elle.

Conséquence pratique : Kosaraju rend, gratuitement, un tri topologique du quotient. On n'a pas à le recalculer — et le problème « 2-sat : du critère au modèle » s'en sert pour construire un modèle de 2-sat.

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.