![]() |
Кто-нибудь может мне поведать, что такое компоненты двусвязности, как их выделять, и как выделять компоненты рёберной двусвязности? В моей книжке это прокомментировано слишком коротко. "Описанное разбиение графа может быть осуществлено с помощью обхода вглубину, аналогично поиску обычных компонент двусвязности графа [Липский 88, п. 2.6]."
|
Цитирую свою любимую книжку по алгоритмам( "Алгоритмы: построение и анализ" ) :
Цитата:
Точки раздела и мосты изображены тёмно серым. Двусвязные компоненты -- наборы рёбер в пределах одной серой области ( внутри которой указан номер двусвязной компоненты ). |
ivank
Допустим с определениями ясно, а как насчёт алгоритмов? Как же именно обходом в глубину ищутся такие компоненты двусвязности? |
noname00.pas
Честно говоря, не знаю -- в книге нет, сам никогда этим не интересовался. Поэксперементирую на досуге. О результатах доложу. (Отредактировал(а) ivank - 21:43 - 9 Дек., 2001) |
ivank
А-а-а... Ну-ну -:) У тебя Липский есть? |
noname00.pas
Цитата:
Зато я кажись нашёл как можно находить двусвязные компоненты: Псевдокод на C++( паскаля не знаю ), надеюсь поймёшь что там написано. Код:
Код, который здесь был не верен. (Отредактировал(а) ivank - 0:37 - 11 Дек., 2001) |
Забыл сказать: вызывать надо find_biconnected_components.
|
ivank
Спасибо, разберусь когда время будет... |
noname00.pas
Не. Там есть ошибка. Сейчас работаю над её устранением... |
ivank
Так... А вот теперь я зашёл в тупик. Чем отличается двусвязность от рёберной двусвязности? Компонента двусвязности - максимальный набор рёбер, такой, что любые два входят в простой цикл. Компонента рёберной двусвязности - максимальный набор вершин и рёбер, причем не содержащий ни одного моста. Если есть какой-то набор рёбер, удовлетворяющий первому определению, то понятно, что мостов в нём быть не может. С другой стороны понятно, что если в каком-то наборе нет мостов, то между любыми двумя вершинами есть по крайней мере два пути, а значит по двум рёбрам одной компоненты ребёрной двусвязности можно провести простой цикл. А в чём тогда разница между двусвязностью и рёберной двусвязностью? Или дело всё в том, что компоненты рёберной двусвязности вотличии от компоненты двусвязности содержат ещё и вершины? Но ведь любому ребру из компоненты двусвязности можно взаимооднозначно сопоставить набор рёбер... А зачем тогда два различных понятия? Или я что-то напутал? |
noname00.pas
По моему, ты прав, т.е. это одно и тоже. Кстати, откуда эти определения? Из одной книги, или из разных? |
ivank
Ну вот... Значит всё не так плохо, как я думал, т.к. у меня в принципе есть решение этой задачи (в которой компоненты рёберной двусвязности надо искать). :) Спасибо |
noname00.pas
Не за что :D А ты мог бы то свое решение сюда запостить? Интересно... |
ivank
Только это не моё решение, это решение авторов книги... И оно уже есть в и-нете. http://www.informatics.ru/variousdoc...rchiv/z3_2.zip Я вот склоняюсь к мысли, что при данных ограничениях пройдёт простая проверка для каждого ребра, не приводит ли его удаление к увеличению компонент связности. Сложность - O(N*M). Или может это и имелось ввиду под обходом в глубину? |
noname00.pas
Каких ограничениях? |
ivank
Не более 100 вершин. |
Время: 10:17. |
Время: 10:17.
© OSzone.net 2001-