Поиск:

Ответ в темуСоздание новой темы Создание опроса
> вывод элементов бинарного дерева не по ключу 
V
    Опции темы
Экскалупатор
Дата 10.11.2010, 17:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1746
Регистрация: 1.4.2009
Где: г. Минск

Репутация: нет
Всего: 24



Всем привет. Есть такая проблема.
у меня есть бинарное дерево, каждый узел содержит имя, фамилию, отчество и дату рождения, ключем является дата рождения. вопрос: как оптимально вывести данные из дерева в алфавитном порядке не позднее определенной даты.
если выводить в определенном порядке по дате рождения то все просто, читай по ключу и все. но тут надо именно в алфавитном порядке(к примеру по фамилии). у меня созрело решение собрать второе дерево используя как ключ фамилию(или массив, отсортированный по фамилии). но мне кажется это как то коряво. как решить эту проблему не прибегая к помощи массивов/деревьев с временными данными.
заранее спасибо.
PM MAIL ICQ   Вверх
Pavia
Дата 10.11.2010, 21:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 418
Регистрация: 6.12.2008

Репутация: 11
Всего: 12



Экскалупатор, 
Берешь дерево отсекаешь дату по ключу. Потом Сортируешь.
Второе предложение. 
Цитата(Экскалупатор @  10.11.2010,  17:10 Найти цитируемый пост)
. у меня созрело решение собрать второе дерево используя как ключ фамилию(или массив, отсортированный по фамилии). но мне кажется это как то коряво.

Хорошее решение. Составить второй ключ. Только это ключ должен быть постоянным иначе в нем смысла нет.


PM MAIL   Вверх
Экскалупатор
Дата 10.11.2010, 21:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1746
Регистрация: 1.4.2009
Где: г. Минск

Репутация: нет
Всего: 24



Цитата(Pavia @  10.11.2010,  20:04 Найти цитируемый пост)
Берешь дерево отсекаешь дату по ключу. Потом Сортируешь.

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

и это тоже не совсем понял.
Цитата(Pavia @  10.11.2010,  20:04 Найти цитируемый пост)
Составить второй ключ. Только это ключ должен быть постоянным иначе в нем смысла нет.



объясни по подробнее плиз.

Добавлено через 3 минуты и 39 секунд
подумал тут. можно же добавить дополнительные поля, для того что бы можно было создать из одних и тех же узлов два дерева, одно будет отсортировано по дате а второе по фамилии в алфавитном порядке.(или это и имелось ввиду под вторым ключем в предыдущем посте?).
PM MAIL ICQ   Вверх
Pavia
Дата 10.11.2010, 21:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 418
Регистрация: 6.12.2008

Репутация: 11
Всего: 12



Цитата(Экскалупатор @  10.11.2010,  21:17 Найти цитируемый пост)
по дате а второе по фамилии в алфавитном порядке.(или это и имелось ввиду под вторым ключем в предыдущем посте?

Именно так. Правда выбор структуры я оставил за вами: хочешь дерево или список - это уже как вам угодно. 

Это сообщение отредактировал(а) Pavia - 10.11.2010, 21:38
PM MAIL   Вверх
Экскалупатор
Дата 10.11.2010, 22:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1746
Регистрация: 1.4.2009
Где: г. Минск

Репутация: нет
Всего: 24



Pavia, спасибо. неплохая идея. лови +. 
но может есть просто алгоритм с помощью которого можно сделать такой вывод? просто мне не хотелось бы усложнять структуру узлов дерева и создавать лишних массивов.
PM MAIL ICQ   Вверх
Pavia
Дата 11.11.2010, 23:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 418
Регистрация: 6.12.2008

Репутация: 11
Всего: 12



Экскалупатор, Вам шашечки или ехать?
Есть золотое правило. Проигрываешь в памяти выигрываешь в скорости. Проигрываешь в скорости выигрываешь в памяти.
Можно ходить по дереву вначале искать Фамилии на А потом по Б и тд. Но тогда дерево вам придется перебирать очень много раз.

Выводить вам куда надо? Я так думаю в список вот его представить массивом и отсортировать. Можно к примеру вывести в файл и отсортировать в файле. Но это делать лучше когда данных очень много.
PM MAIL   Вверх
baldina
Дата 12.11.2010, 09:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 4
Всего: 101



Цитата

но может есть просто алгоритм с помощью которого можно сделать такой вывод

Цитата

собрать второе дерево

Двоичное дерево поиска хранит значения упорядоченными по ключу
Составление такого дерева имеет трудоемкость O(nlogn), как и сортировка, но требует больше памяти и в абсолютных значениях более трудоемко.
Поэтому составлять второе дерево имеет смысл, если оно будет использоваться многократно, в т.ч. перестраиваться в случае вставки/удаления данных. Это то, что Pavia назвал постоянным ключом.
С точки зрения современных БД оба дерева - индексы, причем первый - кластеризованный.

А для однократного решения быстрее и проще выбрать необходимые данные (например, поместить в массив), а затем отсортировать:
Цитата(Pavia @  10.11.2010,  21:04 Найти цитируемый пост)
Берешь дерево отсекаешь дату по ключу. Потом Сортируешь.


"алгоритм с помощью которого можно сделать такой вывод" конечно можно разработать, но он не будет эффективным. нужна соответствующая задаче структура данных, поддерживающая множественные индексы.
PM MAIL   Вверх
Экскалупатор
Дата 12.11.2010, 14:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1746
Регистрация: 1.4.2009
Где: г. Минск

Репутация: нет
Всего: 24



ясно. спс.
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Алгоритмы"

maxim1000

Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Алгоритмы | Следующая тема »


 




[ Время генерации скрипта: 0.0456 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.