![]() |
|
Модераторы: Poseidon |
![]()
|
|
| Relkin |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 21.12.2006 Репутация: нет Всего: 2 |
Нужно написать процедуру балансировки двоичного поискового дерева (дерева сравнений). На вход подаётся несбалансированое дерево.
Ключ - фамилия студента. Данные - его оценка. Я думаю нужно определить количество элементов в дереве.
Создать динамический массив (по кол-ву эл-тов).
Записать в него данные по возрастанию, уничтожить это дерево, и создать новое таким образом: 1. Корень дерева - элемент массива с номером (k div 2); 2. Левый сын - ((k div 2) div 2); 3. Правый сын - ((k div 2) div 2) + (k div 2); 4. Далее с каждым сыном поступаем так же, как с корнем. У меня не получается реализовать этот алгоритм. Если кто знает как сбалансировать дерево (этим алгоритмом или другим) то прошу помочь. Если же найдены ошибки в коде или алгоритме прошу исправить. |
||||
|
|||||
| Kuvaldis |
|
|||
![]() механик-вредитель ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1189 Регистрация: 16.6.2006 Где: Минск Репутация: 32 Всего: 61 |
Relkin,
построение идеально сбалансированного дерева - задача ОЧЕНЬ неблагодарная и долгая. Еще в 60-е годы придумали алгоритмы балансировки, строящие так называемые почти сбалансированные деревья. Самые известные из них: красно-черные деревья и АВЛ-деревья. Более рациональным и эфффективным способом являются красно-черные деревья. О них можно поискать в Сети. Лучшее из того, что я в свое время нашел, это сайт Алголист. Правда, там на С, но зато очень хорошо описана сама идея. Вот ссылка Кстати, на этом же сайте есть и про АВЛ деревья.... -------------------- Помни - когда ты спишь, враг не дремлет Спи чаще и дольше, изматывай врага бессоницей |
|||
|
||||
| Relkin |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 21.12.2006 Репутация: нет Всего: 2 |
Спасибо, конечно, но это всё- таки не моя задача. Единственное что я нашёл это:Balancing-a-BST
Destruction by Rotation From Vine to Balanced Tree |
|||
|
||||
![]()
|
| Правила форума "Центр помощи" | |
|
|
ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Более подробно с правилами данного раздела Вы можете ознакомится в этой теме. Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Центр помощи | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |