imho.ws
IMHO.WS  

Вернуться   IMHO.WS > Компьютеры > Программирование
Опции темы
Старый 17.08.2003, 02:54     # 1
Pengu1n
Junior Member
 
Регистрация: 15.12.2002
Адрес: Литва, Вильнюс
Сообщения: 98

Pengu1n Путь к славе только начался
Question бинарное дерево

Хай пипл! Может кто-нибудь сталкивался с этим зверем? а то дали задание написать на паскале базу данных используя эту хрень, ничего не объяснили а литературы 2 отсвеченых листочка подкинули , препод у нас урод уродом...
Где бы раздобыть нормальное объяснение этой структуры, в инете исходники нашел, а толку с них
__________________
Hасколько проще была бы жизнь, если бы она была в исходниках
Pengu1n вне форума  
Старый 17.08.2003, 03:11     # 2
dr-evil
::VIP::
 
Аватар для dr-evil
 
Регистрация: 17.02.2002
Адрес: /home/dr-evil
Пол: Male
Сообщения: 2 212

dr-evil Сэнсэйdr-evil Сэнсэйdr-evil Сэнсэйdr-evil Сэнсэйdr-evil Сэнсэйdr-evil Сэнсэйdr-evil Сэнсэйdr-evil Сэнсэйdr-evil Сэнсэйdr-evil Сэнсэйdr-evil Сэнсэйdr-evil Сэнсэйdr-evil Сэнсэй
дык все просто....
от листа =) идет 2 листа...
и т.д. наподобие дерева катологов... где в каждом каталоге 2 подкаталога....
увы мои исходники на паскале умерли... а др. нету
__________________
Сеть - это диагноз... а сисадмин - состояние души.
Питер! Все на сходку!!! | Обзоры порталов. Добавь свою любимую систему!
dr-evil вне форума  
Старый 17.08.2003, 10:07     # 3
Makc
::VIP::
 
Аватар для Makc
 
Регистрация: 13.08.2003
Адрес: Москва
Сообщения: 1 137

Makc ГуруMakc ГуруMakc ГуруMakc ГуруMakc ГуруMakc ГуруMakc ГуруMakc ГуруMakc ГуруMakc ГуруMakc ГуруMakc ГуруMakc ГуруMakc ГуруMakc Гуру
Pengu1n
У меня на сайте есть этот компонент - Tree
http://msp.bip.ru/programming/delphi_components/036.zip
P>S> если скаже что ссылка мертвая, то зайди на сайт и попробуй скчать оттуда.
__________________
Makc aka Maximus (on other boards)
Makc вне форума  
Старый 18.08.2003, 12:57     # 4
aleh
Junior Member
 
Регистрация: 27.12.2002
Адрес: Belarus
Сообщения: 129

aleh Путь к славе только начался
Двоичное дерево строится на принципах:
1) дерево строится из элементов-узлов
2) у каждого элемента-узла может быть два под-узла (но не больше, поэтому дерево и называется двоичным
3) что меньше -- налево, что больше -- направо
*) Как следствие, в одном дереве не могут существовать два элемента с одинаковым значением (PRIMARY KEY)

Двоичное (иначе бинарное) дерево применяется для быстрого поиска. Если в дереве содержится N элементов, то в худшем случае поиск занимает N итераций, а в лучшем -- log2(N). Чтобы всегда иметь только лучшие показатели, дерево должно быть сбалансировано. Тут тебе нужно уяснить что такое красно-чёрные деревья.

Решение в лоб:
1) создаётся массив записей R[]
2) у записи выбирается ключевое поле (или набор полей) R.key
3) создатся массив индексов/номеров записей I[], только при движении по этому массиву от начального элемента до конечного должно соблюдатся правило R[I[i]].key < R[I[i+1]].key (можно использовать и не строгое неравенство, если допускается нексолько ключей с одинаковым значением)
4) При поиске, вставке, изменениии нужно быстро пробегать по массиву I[] методом половинного деления (поиск по двоичному дереву) и дальше по смыслу...
-- главный недостаток -- необходимо очень сильно двигать элементы массива I[] при изменении, добавлении, удалении ключа, это очень ресурсоёмкая операция.

В любом случае, без сбалансированного дерева нормальную БД построить нереально. (Хотя мир клином не сошёлся на бинароном дереве, есть ещё и троичные и под фибоначи и хэш и ...)
aleh вне форума  
Старый 24.08.2003, 00:57     # 5
melk
Junior Member
 
Аватар для melk
 
Регистрация: 01.04.2003
Адрес: Новосибирск
Сообщения: 50

melk Известность не заставит себя ждатьmelk Известность не заставит себя ждать
(пишу на С++, поэтому сори за неточности)
1) Создается структура, либо класс, описывающая один узел.
2) Пишутся функции для работы с деревом. При этом каждый узел есть поддерево и может ничем не отличаться(кроме содержимого) от главного дерева. Для варианта без класса придется использовать глобальную переменную указатель на вершину дерева, либо всюду передавать локальную.

Отступление:
У каждого узла есть не >2 потомков, а он соответственно является их родителем.
Также иногда встречается название "дядя". Конечные узлы без потомков называют "внешними" или "листами" их антиподы - "внутренние" узлы.

Чтобы запихать дерево в массив его вершины нумеруются начиная с верха.
Номера потомков - 2*N и 2*N+1, где N - ноиер текущего узла. Вроде этого:
1
/ \
2 3
/ \ / \
4 5 6 7
Для бинарного дерева проще всего написать рекурсивные функции. Как правило такая функция обрабатывает значение в текущем узле и вызвает себя для 2 потомков от очередности этих трех действий зависит тип обхода дерева.

Если в силу некоторых причин рекурсивные функции писать нельзя/неоптимально пишутся итеративные, но тогда придется самому в цикле бегать по всему дереву и сохранять пройденный путь(либо завести указатель на родителя).
melk вне форума  
Старый 29.08.2003, 13:05     # 6
TiamaT
Junior Member
 
Аватар для TiamaT
 
Регистрация: 13.11.2002
Адрес: Russia
Сообщения: 132

TiamaT Нуль без палочки
Когда дерево очень большое, то как раз луше использовать стек постоянного размера без рекурсии, так как в один прекрасный момент с рекурсией у тебя все накроется Представь себе у тебя стек растет с каждым вызовом рекурсивное функции....
TiamaT вне форума  
Старый 30.08.2003, 05:26     # 7
melk
Junior Member
 
Аватар для melk
 
Регистрация: 01.04.2003
Адрес: Новосибирск
Сообщения: 50

melk Известность не заставит себя ждатьmelk Известность не заставит себя ждать
представь себе сколько на до рекурсий для того, чтоб стэк заплющило в сбалансированном дереве? У меня такое только в графе случалось, да и то при количестве вершин > 10000
melk вне форума  
Старый 31.08.2003, 22:51     # 8
ArchiMage
::VIP::
Старик Похабыч
 
Аватар для ArchiMage
 
Регистрация: 21.07.2002
Адрес: Колодец
Сообщения: 718

ArchiMage Имеются все основания чтобы гордиться собойArchiMage Имеются все основания чтобы гордиться собойArchiMage Имеются все основания чтобы гордиться собойArchiMage Имеются все основания чтобы гордиться собойArchiMage Имеются все основания чтобы гордиться собойArchiMage Имеются все основания чтобы гордиться собойArchiMage Имеются все основания чтобы гордиться собойArchiMage Имеются все основания чтобы гордиться собойArchiMage Имеются все основания чтобы гордиться собойArchiMage Имеются все основания чтобы гордиться собойArchiMage Имеются все основания чтобы гордиться собой
melk
a prichem tut stack k derevu?
stack eto LIFO a derevo eto derevo
__________________
поручик Ржевский
ArchiMage вне форума  
Старый 01.09.2003, 01:19     # 9
joker99
Full Member
 
Аватар для joker99
 
Регистрация: 19.07.2003
Адрес: Israel
Сообщения: 924

joker99 Популярный человек на этом форумеjoker99 Популярный человек на этом форумеjoker99 Популярный человек на этом форумеjoker99 Популярный человек на этом форумеjoker99 Популярный человек на этом форумеjoker99 Популярный человек на этом форумеjoker99 Популярный человек на этом форуме
Имеется ввиду stack программы.
Каждый вызов функции заносит в стек программе аддрес возвращения и параметры вызова функции. Так как стек программы ограничен, то слишком глубокая рекурсия приведё к stack overflow
__________________
Столько дел, что и работой занятся некогда...
joker99 вне форума  
Старый 01.09.2003, 11:17     # 10
ArchiMage
::VIP::
Старик Похабыч
 
Аватар для ArchiMage
 
Регистрация: 21.07.2002
Адрес: Колодец
Сообщения: 718

ArchiMage Имеются все основания чтобы гордиться собойArchiMage Имеются все основания чтобы гордиться собойArchiMage Имеются все основания чтобы гордиться собойArchiMage Имеются все основания чтобы гордиться собойArchiMage Имеются все основания чтобы гордиться собойArchiMage Имеются все основания чтобы гордиться собойArchiMage Имеются все основания чтобы гордиться собойArchiMage Имеются все основания чтобы гордиться собойArchiMage Имеются все основания чтобы гордиться собойArchiMage Имеются все основания чтобы гордиться собойArchiMage Имеются все основания чтобы гордиться собой
joker99
а... не вьехал вчера, уставший был


так зачем по упрямому гулять от начала дерева вниз?
можно после каждой определённой глубины ставить поинтеры, делать внутри обьектов поинтеры на предидуший и идти наверх и т.д. (каждый решает ето как ему удобно)...
__________________
поручик Ржевский
ArchiMage вне форума  
Старый 01.09.2003, 12:54     # 11
TiamaT
Junior Member
 
Аватар для TiamaT
 
Регистрация: 13.11.2002
Адрес: Russia
Сообщения: 132

TiamaT Нуль без палочки
Цитата:
представь себе сколько на до рекурсий для того, чтоб стэк заплющило в сбалансированном дереве? У меня такое только в графе случалось, да и то при количестве вершин > 10000
Когда я писал в свое время BSP buider для игрушки у меня и больше вершин бывало :-)
TiamaT вне форума  


Ваши права в разделе
Вы НЕ можете создавать новые темы
Вы не можете отвечать в темах.
Вы НЕ можете прикреплять вложения
Вы НЕ можете редактировать свои сообщения

BB код Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.

Быстрый переход


Часовой пояс GMT +4, время: 16:28.




Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.