2014 dxdy logo

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

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


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


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

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

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

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

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



Начать новую тему Ответить на тему На страницу Пред.  1, 2
 
 Re: Конечных множеств счётное число(?)
Сообщение07.11.2010, 23:07 
Заслуженный участник
Аватара пользователя


06/10/08
6422
arseniiv в сообщении #372208 писал(а):
Как раз деревьями: запись TSet содержит односвязный список таких же записей; считается пустым множеством, если список пустой.
Хм
Я бы хранил в корне высоту дерева. Сравнивать сначала высоту дерева и длину списка поддеревьев - если больше, то дерево больше. А вот если они равны, то все равно придется в рекурсию уходить

 Профиль  
                  
 
 Re: Конечных множеств счётное число(?)
Сообщение08.11.2010, 18:11 
Заслуженный участник


27/04/09
28128
Просто тут же надо изоморфность проверять, а это легко сделать, если поддеревья упорядочены. А если неупорядочены, придётся сравнивать каждое поддерево одного дерева со всеми поддеревьями другого… Высота и количество поддеревьев, конечно, помогут, но можно найти довольно много деревьев, имеющих равные высоту и кол-во поддеревьев, если они хотя бы несколько больше 1.

 Профиль  
                  
 
 Re: Конечных множеств счётное число(?)
Сообщение08.11.2010, 18:19 
Заслуженный участник
Аватара пользователя


06/10/08
6422
Ну можете хэш какой-нибудь хранить в корне и сравнивать по нему. А если хэши равны, то уже честно.
В принципе высота-ширина - это простейший такой хэш. Можно взять отображение $s$ с учетом того, что int ограничен, и высоту.

 Профиль  
                  
 
 Re: Конечных множеств счётное число(?)
Сообщение08.11.2010, 20:27 
Заслуженный участник


27/04/09
28128
Я ещё думал о том, чтобы все изоморфные деревья, которые соответствуют одному и тому же множеству, хранить в одном экземпляре, и чуть что все ссылки делать на этот единственный экземпляр. Тогда проверка на равенство будет просто замечательная — равны ли указатели. Но вот этот метод не совсем я ещё понял, как реализовать (у меня там есть конструктор пустого множества и метод добавления элемента, потому только в нём одном и надо проверять, не получилось ли что-то, что уже есть). Стоит ли игра свеч?

 Профиль  
                  
 
 Re: Конечных множеств счётное число(?)
Сообщение08.11.2010, 20:37 
Заслуженный участник
Аватара пользователя


06/10/08
6422
По-моему, пора уже применить первое правило оптимизации и написать что-нибудь, но так, чтобы при желании можно было изменить.
Вы, кстати, на C пишете?

 Профиль  
                  
 
 Re: Конечных множеств счётное число(?)
Сообщение08.11.2010, 21:16 
Заслуженный участник


27/04/09
28128
Да.

 Профиль  
                  
 
 Re: Конечных множеств счётное число(?)
Сообщение14.11.2010, 08:50 
Заморожен
Аватара пользователя


18/12/07
8774
Новосибирск
arseniiv в сообщении #371982 писал(а):
Я неправильно выразился. Конечных множеств, все элементы которых конечны и все элементы их элементов, и т. д. конечны тоже.

Это называется "наследственно конечные множества". Доказать, что их счётное число, безусловно, можно.

-- Вс ноя 14, 2010 11:54:49 --

Xaositect опередил с термином :-)

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

-- Вс ноя 14, 2010 12:00:53 --

То есть... Для любого ординала $\alpha$ определим $R_\alpha$ индукцией по индексу:

$R_0 = \varnothing$
$R_{\beta + 1} = R_\beta \cup \mathcal{P}(R_\beta)$
$R_\gamma = \bigcup_{\delta < \gamma} R_\delta$, $\gamma$ предельный.

Аксиому регулярности можно переформулировать следующим образом: для любого множества $S$ найдётся ординал $\alpha$, такой что $S \in R_\alpha$. Наследственно конечные множества --- это, в точности, множества из $R_\omega$.

-- Вс ноя 14, 2010 12:07:49 --

Кодирование наследственно конечных множеств натуральными числами можно найти здесь.

 Профиль  
                  
 
 Re: Конечных множеств счётное число(?)
Сообщение14.11.2010, 14:26 
Заслуженный участник


27/04/09
28128
Xaositect в сообщении #372216 писал(а):
А вот если они равны, то все равно придется в рекурсию уходить
Вот я как уточнил ваш способ для реализации. Он работает для номрализованных деревьев (см. ниже). Сначала сравниваем длину списка поддеревьев, потом сравниваем высоты. Если это не помогло, сравниваем списки поддеревьев как строки, как раз рекурсия тут. Нормализованные деревья — такие, у которых все поддеревья нормализованы и расположены в порядке возрастания по указанному выше отношению (т. е. ещё и без дубликатов). Конечно, дерево для пустого множества нормализовано.
Теперь надо будет придумать алгоритм нормализации поэффективнее.

 Профиль  
                  
 
 Re: Конечных множеств счётное число(?)
Сообщение14.11.2010, 15:30 
Заслуженный участник


27/04/09
28128
(Забыл сказать, что тоже естественно, что множества будут храниться в таком нормализованном виде. Операции будут сохранять нормализацию, а при вводе она будет принудительная.)

 Профиль  
                  
 
 Re: Конечных множеств счётное число(?)
Сообщение14.11.2010, 17:57 
Заслуженный участник


27/04/09
28128
arseniiv в сообщении #374976 писал(а):
Теперь надо будет придумать алгоритм нормализации поэффективнее.
Имею ввиду, что надо как-то эффективно засунуть удаление одинаковых поддеревьев в их сортировку. При том т. к. поддеревья хранятся указателями в односвязном списке, логично при сортировке создавать другой список, в конце заменяя им старый.

Придумал, как можно без хлопот удалять дубликаты: надо проверять, есть ли они в новом списке. Просто удаление дубликатов «переливанием» займёт $O(n^2)$. А вот сортировку не могу вспомнить никакую. Ага, нашёл сортировку слиянием с $O(n \log n)$. Только не придумаю, можно ли в неё как-то засунуть удаление дубликатов, но, наверно, нет. Тогда общая сложность нормализации будет $O(n^2)$ (без учёта сравнения поддеревьев), что вроде не страшно.

 Профиль  
                  
 
 Re: Конечных множеств счётное число(?)
Сообщение15.11.2010, 08:53 
Заслуженный участник
Аватара пользователя


06/10/08
6422
Ну, сортировку слиянием с удалением дублирующихся элементов можно сделать за $O(n\log n)$, это достаточно просто: при слиянии надо сравнивать не только головы сливаемых списков, но и последний на текщий момент элемент результата.

 Профиль  
                  
 
 Re: Конечных множеств счётное число(?)
Сообщение15.11.2010, 21:05 
Заслуженный участник


27/04/09
28128
Кстати, что-то я вчера не подумал. Если просто проходить список поддеревьев после сортировки, можно за $O(n)$ удалить дубликаты. И сортировку "загрязнять" не надо. :-)

 Профиль  
                  
 
 Re: Конечных множеств счётное число(?)
Сообщение17.11.2010, 14:05 
Заслуженный участник


27/04/09
28128
Вообще не нужна специальная процедура нормализации с сортировкой и удалением дубликатов, ведь всё можно устроить так, чтобы список поддеревьев был всегда нормализованным! Только вчера додумался, ни странно.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 28 ]  На страницу Пред.  1, 2

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



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

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


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

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