Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Балансировка бинарных деревьев 
:(
    Опции темы
0lmer
Дата 20.11.2007, 14:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Подскажите пожалуйста алгоритмы для балансировки и подсчета глубины бинарного дерева.
Большая просьба в гугль не посылать т. к. уже неделю ниче найти не могу.
Заранее спасибо.
PM   Вверх
JackYF
Дата 20.11.2007, 14:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

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



Цитата(0lmer @  20.11.2007,  14:47 Найти цитируемый пост)
балансировки и подсчета глубины бинарного дерева.

балансировка чистого бинарного дерева - перестроение его с нуля.

Если тебе нужна динамическая и менее затратная балансировка, то тебе подойдёт "красно-чёрное дерево". Которое автоматически балансируется по мере добавления/удаления элементов. За алгоритмом - гуглить на "красное-чёрное дерово" и т.д. + алгоритм точно описан в Кормен и другие "Алгоритмы: построение и анализ". Эту книгу тоже кто-то находил в электронном виде.


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
archimed7592
Дата 20.11.2007, 15:51 (ссылка) |   (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

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



algolist.manual.ru


--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
0lmer
Дата 30.11.2007, 17:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



еще один вопрос:
как удалить элемент из АВЛ дерева, не нарушив его сбалансированности?

Узел выглядит так:
Код

template <typename TT>
class TNode {
public:
  TT data;
  TNode * left;
  TNode * right;
  short balans;
}


balans - разность между высотами правого и левого поддерева узла.
PM   Вверх
archimed7592
Дата 30.11.2007, 17:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

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



1. Если это лист - удалить его и отбалансировать "в другую сторону".
2. Если у него есть дети, то найти минимальный элемент в правом поддереве(постоянно спускаться влево) и поменять местами этот минимальный с удаляемым. Потом удалить этот элемент, но уже так, будто он находится на том месте, где был минимальный(он уже будет листом - см. п. 1).


--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
sentry
Дата 1.12.2007, 16:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Code Monkey
*


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

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



Цитата(0lmer @  20.11.2007,  16:17 Найти цитируемый пост)
Большая просьба в гугль не посылать т. к. уже неделю ниче найти не могу.

Да на русском вообще мало чего есть. Можешь посмотреть ТУТ.
PM MAIL   Вверх
bilbobagginz
Дата 2.12.2007, 01:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Naughtius Maximus
****


Профиль
Группа: Экс. модератор
Сообщений: 8813
Регистрация: 2.3.2004
Где: Israel

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



Цитата(sentry @  1.12.2007,  16:40 Найти цитируемый пост)
Да на русском вообще мало чего есть.

значит нужно осознать и серьезно заняться иностранным языком. напр. японским или английским. 




--------------------
Я ещё не демон. Я только учусь.
PM WWW   Вверх
Kuvaldis
Дата 2.12.2007, 02:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


механик-вредитель
***


Профиль
Группа: Участник Клуба
Сообщений: 1189
Регистрация: 16.6.2006
Где: Минск

Репутация: 1
Всего: 61



Про AVL деревья достаточно неплохо написано в классической книге Вирта "Алгоритмы  и структуры данных"


--------------------
Помни - когда ты спишь, враг не дремлет
Спи чаще и дольше, изматывай врага бессоницей
PM MAIL ICQ   Вверх
0lmer
Дата 2.12.2007, 18:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



archimed7592, а подробнее можно?

Цитата(archimed7592 @  30.11.2007,  17:49 Найти цитируемый пост)
2. Если у него есть дети, то найти минимальный элемент в правом поддереве(постоянно спускаться влево) и поменять местами этот минимальный с удаляемым. Потом удалить этот элемент, но уже так, будто он находится на том месте, где был минимальный(он уже будет листом - см. п. 1).


Не обязательно, у него может быть правый потомок.

 
PM   Вверх
archimed7592
Дата 2.12.2007, 18:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

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



Цитата(0lmer @  2.12.2007,  18:46 Найти цитируемый пост)
Не обязательно, у него может быть правый потомок.

Ах, ну да, в таком случае:
3. Если у узла есть "поддерево"(в кавычках, потому что длинее одно узла оно быть не может), то этот элемент удаляется, а потомок подвешивается на его место.

Тогда, в случае п.2, вариантов дальнейших действий будет два - либо п.1, либо п.3.

Добавлено через 5 минут и 56 секунд
Если бы ты прошёл по ссылке, которую я дал в 3-м посте, то увидел бы там полное руководство с иллюстрациями: http://algolist.manual.ru/ds/btree.php

Всё что было сказано мной потом - это рассказ по памяти из того же источника, но т.к. читал я это очень давно, то ессно передал с неточностями. Советую прочитать этот материал, а не ждать пока всё разжуют и в рот положат.


--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Алгоритмы"

maxim1000

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


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

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


 




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


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

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