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 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
Michael_Rybak
сообщение 4.11.2006 12:45
Сообщение #2


Michael_Rybak
*****

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

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


Идем от листов вверх к корню, и индексируем по ходу.

Лучше сразу на примере:

Изображение

Берем листья: F, G, H, I, K, L, M, N. Присваиваем каждому из них индекс 0. Между собой соответствующие поддеревья изоморфны, и других таких нет.

Теперь рассматриваем узел, у которого все сыновья проиндексированы, а он - нет. Например E. Записываем индексы его сыновей: G(0), H(0); сортируем индексы: (0; 0). Смотрим, есть ли у нас такое поддерево среди рассмотренных? Нету. Значит, это - новое, даем ему индекс 1. Ведем такую табличку:

0: ()
1: (0; 0)

Берем следующий узел с проиндексированными сыновьями, например B. Записываем его детей: E(1), F(0); сортируем индексы: (0; 1). Такого еще не было, даем индекс 2:

0: ()
1: (0; 0)
2: (0; 1)

Дальше. Узел C. Дети: M(0), N(0). Сортируем индексы: (0; 0). Это у нас уже было. Это - индекс 1.

Узел J. Дети: K(0), L(0). Сортируем индексы: (0; 0). Это у нас уже было. Это - индекс 1.

Узел D. Дети: I(0), J(1). Сортируем индексы: (0; 1). Это у нас уже было. Это - индекс 2.

Узел А. Дети: B(2), C(1), D(2). Сортируем индексы: (1; 2; 2). Такого еще не было, это будет индекс 3:

0: ()
1: (0; 0)
2: (0; 1)
3: (1; 2; 2)

Таким образом, в дереве есть 4 вида неизоморфных поддеревьев, и корням изоморных поддеревьев поставлены в соответствие одинаковые индексы.

Чтобы делать это за n log n, можно строить префиксное дерево для списка полученных индексов (в котором, например, путь 1-2-2 оканчивается значением 3)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Fanat
сообщение 6.11.2006 13:13
Сообщение #3


Fanat
***

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

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


Требуеться разбить на ВСЕ неизоморфные поддеревья.
Алгоритм:
Нахождение и удаление висячих вершин.
Проверка на изоморфность оргдеревьев.

Только вот с реализациеё чето у меня не особо. Даже списковое представление сделать не получаеться.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Michael_Rybak
сообщение 6.11.2006 13:55
Сообщение #4


Michael_Rybak
*****

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

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


Цитата(Fanat @ 6.11.2006 12:13) *

Требуеться разбить на ВСЕ неизоморфные поддеревья.


А я и написал тебе, как разбить на ВСЕ неизоморфные поддеревья.

А если нет - тогда потрудись объяснить, что значит "разбить", и приведи пример входа и выхода для требуемого алгоритма. И лучше - несколько примеров.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Fanat
сообщение 6.11.2006 21:00
Сообщение #5


Fanat
***

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

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


Например,рассмотрим такое огрдерево.
Прикрепленное изображение

Дерево имеет 4 неизоморфных поддерева.
Приведено их FO представление.

Код

program 1;
uses crt;
type ptr=^elem;
     elem=record
     num:integer;
     next:ptr;
     end;
  vector=array[1..100] of ptr;
var an,k,ak:ptr;
      ch:integer;
      num,kol,nom:integer;
      f:text;
      s:char;
      i,n,j:integer;
      zap,zap1:vector;

  procedure del_list(var an:ptr);
      begin
     an:=nil;
      end;

  procedure add_begin(var an:ptr;num:integer);
      var k:ptr;
      begin
    new(k);
    k^.next:=an;
    k^.num:=num;
    an:=k;
      end;

     procedure add_end(var an:ptr;num:integer);
       var k:ptr;
    begin
    new(k);
    k^.next:=nil;
    k^.num:=num;
    an^.next:=k;
     end;

   procedure beg_list(var an:ptr;var k:ptr);
     begin
       k:=an;
     end;
   procedure end_list(var an:ptr;var k:ptr);
     begin
       k:=nil;
     end;


    procedure next(var k:ptr;var ch:integer);
       begin
     ch:=k^.next^.num;
       end;

   procedure take_beg(an:ptr;var ch:integer);
    begin
    ch:=an^.num;
       end;


begin
repeat
clrscr;
assign(f,'1.txt');
i:=1;

    reset(f);
    read(f,kol);
    for i:=1 to kol
    do
    begin
    del_list(zap[i]);
    add_begin(zap[i],i);
    beg_list(zap[i],an)
    end;
    i:=1;
    while not eof(f) do
          begin
         read(f,num);
         write(' ',num);
         if num=0 then i:=i+1
            else
         add_end(zap[i],num);
          end;
writeln;

write(zap[1]^.num,'  ');
write(zap[1]^.next^.num,'   ');
writeln(zap[1]^.next^.next^.num);
writeln;
  writeln('Xotite povtoprit? Y/N');
  until readkey='n';
end.


В этом коде создаем списковое представление дерева.Просьба подправить, так как оно создаётся неверно.
Что-то со ссылками.Напиример в рассмотреном нами дереве результат будет 1 4 268 вместо должного 1 2 4.

Сообщение отредактировано: Fanat - 6.11.2006 21:00
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Michael_Rybak
сообщение 6.11.2006 22:01
Сообщение #6


Michael_Rybak
*****

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

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


Приведи, пожалуйста, определения "FO представление" и "ориентированное дерево"
 Оффлайн  Профиль  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:19
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"