IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> Теория графов.Оргдеревья., Разбиение оргдеревьев.
Fanat
сообщение 4.11.2006 11:48
Сообщение #1


Fanat
***

Группа: Пользователи
Сообщений: 261
Пол: Мужской
Реальное имя: Сергей

Репутация: -  5  +


Как разбить ориентированное дерево на все неизоморфные поддеревья?..Входные данные-например,FO представление.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
Маня
сообщение 15.11.2006 23:41
Сообщение #2





Группа: Пользователи
Сообщений: 9
Пол: Женский

Репутация: -  1  +


Послушайте! А если я сделаю так?
Как всё это на паскаде организовать??? blink.gif


Задача: требуется определить изоморфны ли два ориентированных дерева или нет

Входные данные : FO-представление графа

Выходные данные:
либо ориентированные деревья изоморфны/не изоморфны
либо граф не является ориентированным (неправильно заданы входные данные)

Алгоритм:

Будем обозначать направленное ребро через единичку, находящуюся на пересечении двух вершин в матрице смежности. Причём если стрелка ребра направлена только в одну сторону, то ставим единичку на пересечении вершины, откуда она отходит, с вершиной, куда она входит.

Т.к. по определению дерево, это, грубо сказать, связный граф без циклов, то будем воспринимать двунаправленное ребро, за простое ребро.


Пример.







Матрица смежности:
0100000
1001000
0001000
0010100
0001010
0000101
0000000



1. С помощью матрицы смежности делаем проверку на правильность ввода, т.е. проверяем:
 является ли граф связным
 не имеет ли он циклов.
3. Очевидно, что деревья с разным количеством вершин не могут быть изоморфны, следовательно, делаем проверку (создаём процедуру) на одинаковое количество вершин в двух входных ориентированных графах.
4.Фактически, графы будут изоморфны тогда и только тогда, когда из матрицы смежности одного графа можно получить матрицу смежности другого графа перестановкой (перенумерацией) вершин.
Т.е. для нашего примера:
1234567
1 0100000
2 1001000
3 0001000
4 0010100
5 0001010
6 0000101
7 0000000
Получим
1435672
1 0000001
4 0011000
3 0100000
5 0100100
6 0001010
7 0000000
2 1100000
Т.е. два ориентированных дерева G1 и G2 изоморфны

G1 G2
Причём G2 получен путём перестановок вершин в матрице смежности.

Таким образом, если мы имеем два графа (с одинаковым количеством вершин), заданных матрицами инцидентности. Достаточно перебрать все возможные перестановки вершин второго графа (разумеется, при каждой перестановке соответствующим способом меняя матрицу) - если ни в одном случае матрицы не совпадут - значит графы неизоморфны.


Оптимизация:
Поскольку сравнивать придётся матрицы n*n, (где n-количество вершин), а всего перестановок n!, то разумно будет сократить количество тех перестановок, которые имеют смысл.

Возьмём граф и разобьем его вершины на группы по парам (In,Out), где In - количество входящих рёбер,т.е. количество единиц в соответствующем столбце, а Out – количество исходящих рёбер, т.е. количество единиц в соответствующей строке.

Для указанного примера, имеем:
1 (1,1)
2 (1,2)
3 (1,1)
4 (3,2)
5 (2,2)
6 (1,2)
7 (1,1)

Получаем 4 группы вершин: {1,3,7}{2,6}{4}{5}
Так вот, вместо 7! = 1*2*3*4*5*6*7 = 5040 перестановок достаточно просто отсортировать вершины в обоих графах по соответствующим парам (например, сначала по In, потом по Out) и разумных перестановок будет только 3!*2!*1!*1!=1*1*1*2*3*1*2=12(т.е. произведение факториалов мощностей групп вершин)


--------------------
Потому что, потому что
Всех нужнее и дороже,
Всех доверчивей и строже
В этом мире доброта
В этом мире ДОБРОТА
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Michael_Rybak
сообщение 16.11.2006 0:49
Сообщение #3


Michael_Rybak
*****

Группа: Модераторы
Сообщений: 1 046
Пол: Мужской
Реальное имя: Michael_Rybak

Репутация: -  32  +


Эвристики тут ни к чему. Сравнить два графа можно *всегда* очень быстро, за полиномиальное время. Никаких n!. Читай мой пост и задавай вопросы.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме
Fanat   Теория графов.Оргдеревья.   4.11.2006 11:48
Michael_Rybak   Идем от листов вверх к корню, и индексируем по ход...   4.11.2006 12:45
Fanat   Требуеться разбить на ВСЕ неизоморфные поддеревья....   6.11.2006 13:13
Michael_Rybak   Требуеться разбить на ВСЕ неизоморфные поддеревья...   6.11.2006 13:55
Fanat   Например,рассмотрим такое огрдерево. Дерево имее...   6.11.2006 21:00
Michael_Rybak   Приведи, пожалуйста, определения "FO представ...   6.11.2006 22:01
Fanat   Ориентированное дерево — это ориентированный граф ...   7.11.2006 1:17
Michael_Rybak   Я сейчас выхожу, подумаю над задачей в дороге. А т...   7.11.2006 9:40
Michael_Rybak   И еще: "без циклов" = без ориентированны...   7.11.2006 14:47
Fanat   И еще: "без циклов" = без ориентированн...   7.11.2006 18:48
Michael_Rybak   Алгоритм: как представляю себе я, подвесим граф з...   7.11.2006 20:36
Fanat   Можешь на примере показать что мы храним в массива...   7.11.2006 21:40
Michael_Rybak   Можешь на примере показать что мы храним в массив...   7.11.2006 22:05
Fanat   Сколько думал, а сделать ничё не могу..... :blink:   14.11.2006 17:49
Michael_Rybak   Давай шаг за шагом. 1. Напиши программу, которая ...   14.11.2006 18:58
Маня   Такая вот задача: требуется определить изоморфны л...   8.11.2006 0:15
Michael_Rybak   Прочти мой первый пост здесь. Алгоритм, который я...   8.11.2006 2:18
Маня   Послушайте! А если я сделаю так? Как всё это н...   15.11.2006 23:41
Michael_Rybak   Эвристики тут ни к чему. Сравнить два графа можно ...   16.11.2006 0:49
Маня   Там все связано с разбиением деревьев на поддеревь...   16.11.2006 22:40
Michael_Rybak   Там *не все* связано с разибиением на поддеревья. ...   16.11.2006 23:25
Маня   понимаешь,я уже несколько раз все твои сообщения п...   18.11.2006 19:30
Michael_Rybak   Давай разберемся с тем, что я называю индексацией....   19.11.2006 2:01
Маня   Ой !!! Спасибо огромное! Знаешь,а...   19.11.2006 23:48
Michael_Rybak   Молодец, Маня, порадовала! :) Да, очень прав...   20.11.2006 2:17
Маня   :good: :good: :good: Просто СУПЕР!!...   22.11.2006 22:26
Маня   О!!! У меня родилась идея,точнее мысль...   22.11.2006 23:26
Michael_Rybak   Молодец что придумала пример :) Видишь? Не зано...   23.11.2006 4:33
Маня   Значится так, вот как я поняла этот алгоритм: :...   28.11.2006 11:26
Michael_Rybak   Схему ты описала правильно, но вот правильно ли ты...   28.11.2006 14:46


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 18.07.2025 17:21
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"