Apprentissage interactif de la théorie des graphes
Apprentissage interactif de la théorie des graphes
Guest User
Using app without sign in
Détecteur de sommets de coupe
Trouve les sommets dont la suppression augmente les composantes
Sélectionnez un algorithme et générez les étapes pour commencer la visualisation
Un point d'articulation (ou sommet de coupe) est un sommet dont le retrait déconnecte le graphe ou augmente son nombre de composantes connexes. Trouver les points d'articulation identifie les points de défaillance uniques d'un réseau.
La méthode fondée sur DFS de Tarjan visite chaque sommet une fois, suivant son temps de découverte et sa valeur low-link, le sommet découvert le plus tôt atteignable depuis son sous-arbre par des arêtes de retour. Un sommet non racine v est un point d'articulation quand un sous-arbre enfant ne peut pas atteindre au-dessus de v, c'est-à-dire low[enfant] >= disc[v]. La racine du DFS est un point d'articulation quand elle a deux enfants DFS ou plus. Toute l'analyse s'exécute en O(V + E).
Les points d'articulation exposent les routeurs critiques des réseaux de communication, les carrefours clés des systèmes routiers, les serveurs vulnérables des infrastructures distribuées et les intermédiaires influents des réseaux sociaux. L'ingénierie de fiabilité les utilise pour prioriser la redondance. Ils apparaissent aussi dans les tours d'entretien plus difficiles avec les ponts.
Un seul parcours en profondeur et deux nombres par sommet. La date de découverte indique quand le sommet a été vu pour la première fois; le low-link indique le sommet le plus ancien que son sous-arbre peut atteindre par une arête arrière.
dfs(u, parent):
dec[u] = low[u] = ++temps
enfants = 0
pour chaque voisin v de u:
si v == parent: continuer
si v deja visite:
low[u] = min(low[u], dec[v]) // arete arriere
sinon:
enfants++
dfs(v, u)
low[u] = min(low[u], low[v])
si parent != AUCUN et low[v] >= dec[u]:
marquer u comme point d articulation
si parent == AUCUN et enfants > 1:
marquer u comme point d articulation // regle racineLa condition low[v] >= dec[u] signifie que le sous-arbre enraciné au fils v ne possède aucune arête arrière remontant au-dessus de u. Toute sortie de ce sous-arbre passe donc par u, et supprimer u l'isole. La racine est un cas à part car elle n'a pas de parent dont elle pourrait être coupée: la racine est un point d'articulation exactement lorsqu'elle a deux fils ou plus dans le DFS, puisque ces sous-arbres ne peuvent s'atteindre entre eux qu'à travers elle.
Exécute le DFS depuis A sur un graphe formé d'un triangle prolongé par une queue de deux sommets, en prenant les voisins par ordre alphabétique.
Graphe d'exemple: Arêtes non orientées A-B, B-C et C-A formant un triangle, plus C-D et D-E en prolongement.
Les points d'articulation sont C et D. Le triangle A-B-C n'en fournit aucun parmi A et B car tout sommet d'un cycle dispose d'une route alternative, tandis que dans la queue C-D-E chaque sommet interne est critique. Ce contraste est l'intuition centrale: les points d'articulation vivent sur les chaînes, pas à l'intérieur des cycles.
Temps: O(V + E) · Espace: O(V)
Il s'agit d'un unique parcours en profondeur avec un travail supplémentaire constant par arête, le coût est donc celui du parcours lui-même. Chaque sommet est visité une fois et chaque arête examinée deux fois, une depuis chaque extrémité. L'état supplémentaire tient en deux entiers par sommet, la date de découverte et le low-link, plus la pile de récursion, le tout en O(V). L'approche naïve, retirer chaque sommet à tour de rôle et tester la connexité, coûte O(V fois (V + E)); la méthode du low-link transforme donc une vérification quadratique en une vérification linéaire en une seule passe. Sur un graphe de 10 000 sommets et 30 000 arêtes, l'écart atteint environ quatre ordres de grandeur.
Points d'articulation, ponts et composantes biconnexes découlent tous du même DFS. Le choix dépend de la nature de l'élément fragile: sommet ou arête.
| Alternative | À préférer quand | Coût |
|---|---|---|
| Recherche de ponts | L'élément critique est un lien plutôt qu'un nœud. Même DFS, avec le test strict low[v] > dec[u]. | O(V + E) |
| Composantes biconnexes | Tu veux les blocs maximaux qui survivent au retrait de n'importe quel sommet, pas seulement les sommets de coupe. | O(V + E) |
| Test de 2-connexité par sommets | Tu veux seulement un oui ou un non sur la possibilité qu'une défaillance unique déconnecte le graphe. | O(V + E) |
| CFC de Tarjan | Le graphe est orienté. Les points d'articulation ne sont définis que pour les graphes non orientés. | O(V + E) |
Algorithmes associés: Recherche de Ponts, Recherche en Profondeur (DFS), CFC de Tarjan