PDA

Показать полную графическую версию : Графы


noname00.pas
09-12-2001, 12:56
Кто-нибудь может мне поведать, что такое компоненты двусвязности, как их выделять, и как выделять компоненты рёберной двусвязности? В моей книжке это прокомментировано слишком коротко. "Описанное разбиение графа может быть осуществлено с помощью обхода вглубину, аналогично поиску обычных компонент двусвязности графа [Липский 88, п. 2.6]."

ivank
09-12-2001, 16:07
Цитирую свою любимую книжку по алгоритмам( "Алгоритмы: построение и анализ" ) :

Пусть G = (V,E) -- связный неориентированный граф. Точка раздела ( articulation point ) графа G -- это вершина, при удалении которой граф G перестаёт быть связанным. Мост ( bridge ) -- это ребро с аналогичным свойством. Двусвязная компонента ( biconnected component ) -- это максимальный набор рёбр, любые два ребра которого принадлежат общему простому циклу( см. картинку ). Точки раздела, мосты и двусвязные компоненты можно найти с помощью поиска в глубину.

Так как у меня нет сканнера я нарисовал картинку в Paint`е -- http://ivank.hut.ru/pictures/biconnected_component.gif.

Точки раздела и мосты изображены тёмно серым. Двусвязные компоненты -- наборы рёбер в пределах одной серой области ( внутри которой указан номер двусвязной компоненты ).

noname00.pas
09-12-2001, 17:19
ivank
Допустим с определениями ясно, а как насчёт алгоритмов? Как же именно обходом в глубину ищутся такие компоненты двусвязности?

ivank
10-12-2001, 00:42
noname00.pas
Честно говоря, не знаю -- в книге нет, сам никогда этим не интересовался. Поэксперементирую на досуге. О результатах доложу.

(Отредактировал(а) ivank - 21:43 - 9 Дек., 2001)

noname00.pas
10-12-2001, 01:16
ivank
А-а-а... Ну-ну -:)

У тебя Липский есть?

ivank
10-12-2001, 01:50
noname00.pas
У тебя Липский есть?
Нет.

Зато я кажись нашёл как можно находить двусвязные компоненты:

Псевдокод на C++( паскаля не знаю ), надеюсь поймёшь что там написано.

Код, который здесь был не верен.
И по сему злобно удолён.


Завтра постараюсь проверить работает или нет


(Отредактировал(а) ivank - 0:37 - 11 Дек., 2001)

ivank
10-12-2001, 01:52
Забыл сказать: вызывать надо find_biconnected_components.

noname00.pas
10-12-2001, 18:27
ivank
Спасибо, разберусь когда время будет...

ivank
10-12-2001, 23:53
noname00.pas
Не. Там есть ошибка. Сейчас работаю над её устранением...

noname00.pas
11-12-2001, 01:40
ivank
Так... А вот теперь я зашёл в тупик. Чем отличается двусвязность от рёберной двусвязности? Компонента двусвязности - максимальный набор рёбер, такой, что любые два входят в простой цикл. Компонента рёберной двусвязности - максимальный набор вершин и рёбер, причем не содержащий ни одного моста. Если есть какой-то набор рёбер, удовлетворяющий первому определению, то понятно, что мостов в нём быть не может. С другой стороны понятно, что если в каком-то наборе нет мостов, то между любыми двумя вершинами есть по крайней мере два пути, а значит по двум рёбрам одной компоненты ребёрной двусвязности можно провести простой цикл. А в чём тогда разница между двусвязностью и рёберной двусвязностью? Или дело всё в том, что компоненты рёберной двусвязности вотличии от компоненты двусвязности содержат ещё и вершины? Но ведь любому ребру из компоненты двусвязности можно взаимооднозначно сопоставить набор рёбер... А зачем тогда два различных понятия?

Или я что-то напутал?

ivank
11-12-2001, 03:43
noname00.pas
По моему, ты прав, т.е. это одно и тоже.

Кстати, откуда эти определения? Из одной книги, или из разных?

noname00.pas
11-12-2001, 10:44
ivank
Ну вот... Значит всё не так плохо, как я думал, т.к. у меня в принципе есть решение этой задачи (в которой компоненты рёберной двусвязности надо искать). :)

Спасибо

ivank
11-12-2001, 14:22
noname00.pas
Не за что :D

А ты мог бы то свое решение сюда запостить? Интересно...

noname00.pas
11-12-2001, 19:29
ivank
Только это не моё решение, это решение авторов книги... И оно уже есть в и-нете.
http://www.informatics.ru/variousdocs/onzi/archiv/z3_2.zip

Я вот склоняюсь к мысли, что при данных ограничениях пройдёт простая проверка для каждого ребра, не приводит ли его удаление к увеличению компонент связности. Сложность - O(N*M). Или может это и имелось ввиду под обходом в глубину?

ivank
11-12-2001, 23:19
noname00.pas
Каких ограничениях?

noname00.pas
12-12-2001, 01:25
ivank
Не более 100 вершин.




© OSzone.net 2001-2012