Re: балансировка бинарного дерева

From
Protopopov Michael ()
To
Spiridonov Ed
Date
2003-01-05T10:29:24Z
Area
RU.ALGORITHMS
From: "Protopopov Michael" <mkp@ist.ru>


"Spiridonov Ed" <Spiridonov.Ed@p55.f9.n5059.z2.fidonet.org> wrote in message
news:1041690263@p55.f9.n5059.z2.ftn...
> Здравствуй All!
>
> какие алгоритмы существуют?
>
> поясню задачу - есть небольшой движок бд, используемый на слабеньких по
> сегодняшним меркам машинах (палм - 33mhz процессор motorola 68k, 8b ram).
в нем
> для индексов используются бинарные деревья (сами индексы используются для
> сортировки, поиска, фильтрации).
> хочется в фоне производить балансировку этого дерева. самый простой
вариант
> (перестроить дерево заново) не подходит - он требует больших затрат
времени и
> памяти.
>
ИМХО для этой задачи хорошо подходят расширяемые деревья (splay trees).
Это, в некотором роде, обобщение LRU цепочек, используемых для организации
кэша (когда элемент, к которому осуществляется доступ переносится в начало
списка)

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

Для этих деревьев доказано, что, при сравнительно небольших затратах, они
обеспечивают достаточно хорошую "взвешенную" балансировку дерева (т.е. с
учетом частоты обращения к узлу).

Подробности лучше искать в и-нете.



-- 
Отправлено через сервер Форумы@mail.ru - http://talk.mail.ru
--- ifmail v.2.15dev5
 * Origin: Talk.Mail.Ru (2:5020/400)