2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки


Правила форума


В этом разделе нельзя создавать новые темы.

Если Вы хотите задать новый вопрос, то не дописывайте его в существующую тему, а создайте новую в корневом разделе "Помогите решить/разобраться (М)".

Если Вы зададите новый вопрос в существующей теме, то в случае нарушения оформления или других правил форума Ваше сообщение и все ответы на него могут быть удалены без предупреждения.

Не ищите на этом форуме халяву, правила запрещают участникам публиковать готовые решения стандартных учебных задач. Автор вопроса обязан привести свои попытки решения и указать конкретные затруднения.

Обязательно просмотрите тему Правила данного раздела, иначе Ваша тема может быть удалена или перемещена в Карантин, а Вы так и не узнаете, почему.



Начать новую тему Ответить на тему
 
 Задача на деревья и думаю DP
Сообщение31.05.2014, 09:37 


10/05/13
251
Задача звучит так:
Фермер Джон хочет купить стадо коров. В новом стаде каждая корова
родит ровно 2х коровят ). Родственные связи между коровами могут
быть легко продемонстрированы бинарным деревом с N вершинами. Эти
деревья обладают таким свойством:
1. Степень каждой вершины 0 или 2. Степень - это количество непосредственных потомков.
2. Высока дерева ровно K. Высота это максимальное количество узлов из корня до листьев.
Листья это вершины у которых нет детей.

Сколько сущесвует разных деревьев у которых N вершин, и высота которых равна K. Деревья
различаются по структуре.
Например:
При N=5 и K=3, ответ равен 2.
Изображение


Не знаю как подобраться к задаче.
Пробовал решать перебором, строил по очереди деревья, но получилось
очень очень медленно.

 Профиль  
                  
 
 Re: Задача на деревья и думаю DP
Сообщение31.05.2014, 20:06 
Аватара пользователя


14/12/13
119
Да, это динамика. Вспомните, как решается задача о количестве правильных скобочных последовательностей динамически. Сначала мы ищем кол-во правильных скобочных последовательностей длины до $(2n - 2)$ включительно, а затем перебираем положения первой открывающей и соответствующей ей закрывающей скобке и подсчитываем ответ для $2n$.

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

 Профиль  
                  
 
 Re: Задача на деревья и думаю DP
Сообщение01.06.2014, 07:36 


10/05/13
251
Да, точно ведь дерево можно представить как скобочную последовательность.
Тогда, кажется, деревья из примера будут в виде:

$( ( ( ) ( ) ) ( ) )$

$( ( ) ( ( ) ( ) ) )$

Значит надо посчитать точное количество разных скобочных последовательностей
c 2N скобками, где максимальная вложенность равна K?

 Профиль  
                  
 
 Re: Задача на деревья и думаю DP
Сообщение01.06.2014, 10:49 
Аватара пользователя


14/12/13
119
Не совсем так, ибо, хотя бы насколько я понял, коров всегда нечетное число, а скобок всегда четное. Во-вторых, если уж так рассуждать, то первой открывающей должна соответствовать последняя скобка, иначе будут коровы, не являющиеся потомками первой.
Не пытайтесь в программировании мыслить как математик. Не нужно сводить задачу к уже решенной, как в математике. Так вы не постигните дзена DP. Есть общие приемы, которые стоит усвоить, а далее идет индивидуальная специфика каждой задачи.

Я подсказал вам, что нужно думать аналогично. Насчет отслеживания глубины деревьев - тут как вы организуете динамику. Мне представляется, что ответ будет лежать в $k$-ой ячейке таблицы динамики, т.е. нужно считать не просто "сколько правильных деревьев я могу построить", а "сколько правильных деревьев глубины $m$ я могу построить". Да, работать это будет медленней, но что-то вы с ограничениями задачи промолчали.

 Профиль  
                  
 
 Re: Задача на деревья и думаю DP
Сообщение01.06.2014, 13:39 


10/05/13
251
Ограничения на входные данные
$2 < N < 200$

$1 < K <100$

 Профиль  
                  
 
 Re: Задача на деревья и думаю DP
Сообщение01.06.2014, 17:41 
Аватара пользователя


14/12/13
119
Нормально, у меня получается оценка $O(N^2K)$, что обычные компьютеры считают в пределах одной секунды.

 Профиль  
                  
 
 Re: Задача на деревья и думаю DP
Сообщение07.12.2014, 15:29 


10/05/13
251
Foxer в сообщении #870589 писал(а):
Нормально, у меня получается оценка $O(N^2K)$, что обычные компьютеры считают в пределах одной секунды.

Спасибо, у меня тоже получилось )

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 7 ] 

Модераторы: Модераторы Математики, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group