Изменения

Перейти к: навигация, поиск

Построение компонент вершинной двусвязности

103 байта убрано, 22:15, 10 ноября 2015
Двупроходный алгоритм
Найти [[Отношение вершинной двусвязности|компоненты вершинной двусвязности]] неориентированного графа можно с помощью [[Обход_в_глубину,_цвета_вершин |обхода в глубину]].
'''Первый проход:
Используем первый проход, чтобы [[Использование обхода в глубину для поиска точек сочленения|найти точки сочленения.]] <br>
'''Второй проход:
[[Точка сочленения, эквивалентные определения|Точка сочленения]] принадлежит как минимум двум компонентам вершинной двусвязности.
Вершина <tex> v \ne root </tex> является точкой сочленения, если у нее есть сын <tex> u : returnup[u] \geqslant entertin[v] </tex>. <br> Это также значит, что ребро <tex> vu </tex> содержится в другой компоненте вершинной двусвязности, нежели ребро по которому мы пришли в вершину <tex> v </tex> , используя поиск в глубину. Получается, что перейдя по этому ребру, мы окажемся в другой компоненте вершинной двусвязности. <br>
Используем это свойство, чтобы окрасить компоненты вершинной двусвязности в различные цвета.<br>
=== Псевдокод второго прохода ===
|-
|
'''function''' <tex>dfs</tex>(<tex>v</tex>, color, parent): '''for''' <tex> u \in V : (v, u) \in E</tex>: '''if''' <tex>u</tex> == parent '''continue''' '''if''' '''not''' visited[<tex>u</tex>] '''if''' returnup[<tex>u</tex>] <tex>\geqslant</tex> entertin[<tex>v</tex>] newColor <tex>\leftarrow</tex> = maxColor++ col[<tex>vu</tex>] <tex>\leftarrow</tex> = newColor <tex> dfs</tex>(<tex>u</tex>, newColor, <tex>v</tex>) '''else''' col[<tex>vu</tex>] <tex>\leftarrow</tex> = color <tex> dfs</tex>(<tex>u</tex>, color, <tex>v</tex>) '''else''' '''if''' enterup[<tex>u</tex>] <tex>\leqslant</tex> entertin[<tex>v</tex>] col[<tex>vu</tex>] <tex>\leftarrow</tex> = color ... '''for''' <tex> v \in V</tex>: '''if''' '''not''' visited[<tex>v</tex>] <tex> dfs</tex>(<tex>v</tex>, -1, -1)
|width = "310px" |[[Файл:Vertex_doubleconnection_1.png‎‎|thumb|center|400px|Компоненты обозначены разным цветом]]
|}
Ребра каждой из компонент вершинной двусвязности окажутся окрашенными в свой цвет.
<br>
В алгоритме выполняется два прохода <tex>dfs</tex>, каждый из которых работает <tex>O(|V | + |E|)</tex>. Значит время работы алгоритма <tex>O(|V | + |E|)</tex>.
== Однопроходный алгоритм ==
212
правок

Навигация