🎁 Inscrivez-vous et profitez gratuitement de 30 minutes maximum d’IA en ligne. Aucune carte bancaire requise.

Algorithme de Kosaraju : Guide des composants fortement connectés

August 22, 2026
Apprenez l'algorithme de Kosaraju pour les composants fortement connectés avec l'intuition, les étapes, la complexité, le pseudocode, les exemples, les erreurs courantes et la pratique des entretiens.
Graphe dirigé décomposé en composants fortement connectés
Algorithme de Kosaraju
composants fortement connectés
algorithme de graphe
préparation d'entretien de codage

TL;DR: L'algorithme de Kosaraju trouve des composants fortement connectĂ©s dans un graphe orientĂ© en utilisant deux recherches en profondeur d'abord passe. Enregistrez d'abord les sommets en diminuant le temps d'arrivĂ©e, transposez chaque arĂȘte, puis explorez le graphique transposĂ© dans cet ordre. Le temps d'exĂ©cution est O(V + E) et le stockage auxiliaire est O(V + E) lorsque la transposition est stockĂ©e.

Algorithme de Kosaraju : Guide des composants fortement connectés

Apprenez l'algorithme de Kosaraju pour les composants fortement connectés avec l'intuition, les étapes, la complexité, le pseudocode, les exemples, les erreurs courantes et la pratique des entretiens.

Essayez YesToTheOffer

Quel est l'algorithme de Kosaraju ? L'algorithme

Graphe dirigé décomposé en composants fortement connectés

Kosaraju divise un graphe orientĂ© en composants fortement connectĂ©s, ou SCC. À l’intĂ©rieur d’un SCC, chaque sommet peut atteindre tous les autres sommets. La contraction de chaque SCC en un seul nƓud produit un graphe acyclique dirigĂ©, ce qui rend les composants utiles pour l'analyse des dĂ©pendances, les graphiques de programme, l'accessibilitĂ© et la condensation des graphiques.

L'algorithme utilise une propriĂ©tĂ© structurelle de recherche en profondeur d'abord. Les temps d'arrivĂ©e du graphique d'origine identifient un ordre sĂ»r pour explorer le graphique transposĂ©. L'inversion de chaque arĂȘte permute les relations source et rĂ©cepteur entre les composants, de sorte qu'une recherche ne peut pas s'infiltrer dans un composant non attribuĂ© lorsque les sommets sont traitĂ©s dans le bon ordre.

Comment fonctionne l'algorithme en deux passes ?

  1. Créez un ensemble visité et une liste d'ordres de fin vide.
  2. Exécutez une recherche en profondeur d'abord à partir de chaque sommet non visité du graphique d'origine.
  3. Ajoutez chaque sommet une fois que tous ses voisins sortants ont terminé.
  4. Construisez la transposition en inversant chaque bord dirigé.
  5. Effacez l'ensemble visité.
  6. Traitez les sommets dans l'ordre de fin inverse.
  7. Chaque arbre DFS dans le graphique transposé est un composant fortement connecté.

Vous pouvez stocker des sommets sur une pile lors du retour de leur premier appel DFS. Faire Ă©clater la pile donne naturellement un temps de fin dĂ©croissant. Le graphique peut ĂȘtre dĂ©connectĂ©, donc les deux boucles externes doivent prendre en compte chaque sommet plutĂŽt que de partir uniquement du sommet zĂ©ro.

Pourquoi l'inversion de l'ordre d'arrivée détecte-t-elle les SCC ?

Imaginez compresser chaque SCC en un seul nƓud. Le graphique de condensation rĂ©sultant n’a pas de cycle dirigĂ©. Dans le premier DFS, le composant ayant la derniĂšre heure de fin pertinente se comporte comme une source dans cette structure condensĂ©e. AprĂšs transposition du graphique, ce composant se comporte comme un puits, donc un DFS commencĂ© lĂ -bas reste Ă  l'intĂ©rieur.

La suppression de ce composant rĂ©vĂšle le mĂȘme argument pour le prochain composant non attribuĂ©. C'est l'idĂ©e de preuve que les enquĂȘteurs souhaitent gĂ©nĂ©ralement : l'ordre de finition sĂ©lectionne les composants en toute sĂ©curitĂ© et la transposition empĂȘche le deuxiĂšme passage de franchir la mauvaise limite de sortie. Vous n’avez pas besoin de reproduire une longue preuve formelle, mais vous devez expliquer les deux rĂŽles.

Quelles sont les complexités temporelles et spatiales ?

Chaque passe de recherche en profondeur visite chaque sommet et examine chaque arĂȘte une fois, et la construction de la transposition prend Ă©galement un temps linĂ©aire. Le temps total est donc O(V + E). Avec des listes de contiguĂŻtĂ© pour le graphique et la transposition, le stockage est O(V + E), plus O(V) pour l'Ă©tat visitĂ©, l'ordre de fin et la rĂ©cursivitĂ© ou une pile explicite.

PhasesTempsObjectif supplémentaire
Premier DFSO(V+E)Ordre d'arrivée record
TransposerO(V+E)Sens du bord inversé
DeuxiĂšme DFSO(V+E)Collecter les composants
TotalO(V+E)Linéaire dans la représentation graphique

Pour les graphiques trÚs profonds, le DFS récursif peut dépasser la limite de pile d'appels d'un langage. Mentionner une pile itérative montre une conscience de la production sans modifier la limite asymptotique.

Workflow de recherche en profondeur d'abord en deux passes pour l'algorithme de Kosaraju

Quel pseudocode connaĂźtre pour un entretien ?

finish_order = []
visité = set()

pour le sommet du graphique :
    si le sommet n'est pas visité :
        dfs_finish(sommet, graphique, visité, finish_order)

transpose = reverse_all_edges (graphique)
visité.clear()
composants = []

pour le sommet en sens inverse (finish_order):
    si le sommet n'est pas visité :
        composant = []
        dfs_collect (sommet, transposition, visité, composant)
        composants.append (composant)

Dans dfs_finish, ajoutez le sommet aprÚs avoir visité les voisins. Dans dfs_collect, ajoutez le sommet lorsqu'il est découvert. Gardez ces deux responsabilités séparées ; l'utilisation de la précommande lors du premier passage est une erreur courante.

Quelles erreurs interrompent généralement une implémentation de Kosaraju ?

Les erreurs les plus courantes sont l'enregistrement de l'ordre de dĂ©couverte au lieu de l'ordre de fin, l'oubli d'inverser l'ordre pour la deuxiĂšme passe, l'inversion de seulement certaines arĂȘtes, la rĂ©utilisation de l'Ă©tat visitĂ© sans l'effacer et l'omission des sommets isolĂ©s ou dĂ©connectĂ©s. Une autre erreur consiste Ă  traiter un graphe non orientĂ© comme si les SCC avaient le mĂȘme sens ; les composants connectĂ©s sont le concept le plus simple.

Testez un seul sommet, un sommet isolĂ©, un cycle dirigĂ©, une chaĂźne unidirectionnelle, deux cycles reliĂ©s par une arĂȘte, des boucles automatiques et un graphe dĂ©connectĂ©. VĂ©rifiez la partition plutĂŽt que de vous fier Ă  l'ordre de sortie des composants, car diffĂ©rents ordres de parcours DFS valides peuvent rĂ©pertorier les composants ou les sommets diffĂ©remment.

Comment Kosaraju se compare-t-il à l'algorithme de Tarjan ?

Les deux algorithmes trouvent les SCC dans O(V + E). Kosaraju utilise deux passes DFS et stocke gĂ©nĂ©ralement un graphique transposĂ©, ce qui peut simplifier le raisonnement et la mise en Ɠuvre. Tarjan utilise un DFS avec des indices de dĂ©couverte, des valeurs de liens faibles et une pile ; il Ă©vite une transposition explicite mais a plus d'Ă©tat Ă  maintenir correctement.

Lors d'un entretien, choisissez l'algorithme que vous pouvez expliquer et mettre en Ɠuvre de maniĂšre fiable, Ă  moins que les contraintes ne le favorisent. Si l'intervieweur demande une seule passe ou aucune transposition, Tarjan pourrait mieux s'adapter. Si la clartĂ© et une preuve directe sont des prioritĂ©s, Kosaraju est souvent un excellent choix.

Comment l’IA peut-elle soutenir la pratique responsable des algorithmes graphiques ?

AI peut générer de petits contre-exemples, tracer l'état DFS, comparer les implémentations et remettre en question une explication complexe. L'assistance au codage peut aider à localiser un bug de classement ou d'état visité, tandis que l'examen de la transcription peut montrer si vous avez expliqué clairement l'idée de la preuve.

Dessinez et tracez toujours vous-mĂȘme au moins un graphique, exĂ©cutez des tests et vĂ©rifiez les rĂ©clamations gĂ©nĂ©rĂ©es. Suivez les rĂšgles d’évaluation et n’utilisez pas d’assistance interdite. YesToTheOffer prend en charge la prĂ©paration au codage, le raisonnement en temps rĂ©el autorisĂ©, les notes privĂ©es et la rĂ©vision post-entretien.

Foire aux questions

FAQ

À quoi sert l'algorithme de Kosaraju ?

L'algorithme de Kosaraju trouve des composantes fortement connectĂ©es dans un graphe orientĂ©. Les SCC contribuent Ă  simplifier les structures d'accessibilitĂ© et de dĂ©pendance, car chaque composant peut ĂȘtre rĂ©duit en un seul nƓud, produisant ainsi un graphe de condensation acyclique dirigĂ©.

Pourquoi l'algorithme de Kosaraju a-t-il besoin de deux passes DFS ?

La premiĂšre passe calcule un ordre d'heure de fin qui identifie le composant pouvant ĂȘtre explorĂ© ensuite en toute sĂ©curitĂ©. La deuxiĂšme passe s'exĂ©cute sur le graphique transposĂ©, oĂč les bords inversĂ©s empĂȘchent cette recherche de s'Ă©chapper vers un autre composant non attribuĂ©.

Quelle est la complexitĂ© de l’algorithme de Kosaraju ?

La complexité temporelle est O(V + E) : deux passes DFS et une inversion de bord sont chacune linéaires dans un graphe de liste de contiguïté. Les listes de contiguïté stockées pour les graphiques d'origine et transposés utilisent l'espace O(V + E), avec un état de parcours O(V) supplémentaire.

L’ordre de sortie des composants est-il important ?

GĂ©nĂ©ralement non. DiffĂ©rents ordres de contiguĂŻtĂ© peuvent modifier le parcours DFS et l'ordre des sommets ou des composants tout en produisant la mĂȘme partition valide. Les tests doivent comparer l'appartenance aux composants sous forme d'ensembles, sauf si un problĂšme nĂ©cessite explicitement un ordre particulier.

L'algorithme de Tarjan est-il meilleur que celui de Kosaraju ?

Ni l’un ni l’autre n’est universellement meilleur. Les deux fonctionnent en O(V + E). Tarjan utilise un DFS et aucune transposition explicite mais maintient un Ă©tat de liaison faible ; Kosaraju utilise deux passes conceptuellement simples et stocke gĂ©nĂ©ralement le graphique inversĂ©. Choisissez en fonction des contraintes et de la fiabilitĂ© de la mise en Ɠuvre.

Transformez la pratique en un systĂšme reproductible

Élaborez un plan de pratique fondĂ© sur des donnĂ©es probantes, utilisez un soutien responsable lorsque cela est autorisĂ© et rĂ©visez la conversation pendant qu'elle est fraĂźche.

Transformez la pratique en un systĂšme reproductible

Préparez-vous avec vos propres preuves et examinez chaque réponse avec un contexte plus clair.

Essayez YesToTheOffer
Algorithme de Kosaraju : Guide d'entretien SCC | yestotheoffer