Re: Обработка деревьев

From
Dmitriy Krylov ()
To
Eduard Vatutin
Date
2002-11-01T01:22:50Z
Area
RU.ALGORITHMS
From: "Dmitriy Krylov" <krylov@mail.primorye.ru>

Привет, Eduard!
Вы писали to Serge Nozhenko on Wed, 30 Oct 2002 12:12:58 +0300:

 EV> Такой вариант у меня был. Только я до конца не решил, когда
 EV> сортировать: то ли при построении дерева, то ли перед поиском
 EV> поддерева. Что одно, что другое достаточно труднореализуемо (в
 EV> смысле ресурсоемко ;), а операций таких надо будет проводить
 EV> достаточно много (к примеру, среди 50 деревьев найти такую пару, в
 EV> которой одно дерево является поддеревом другого, модифицировать
 EV> набор деревьев (их станет на одно меньше) и опять то же самое, пока
 EV> будут находиться поддеревья).
 EV> Может есть еще какие задумки?

Имхо, стоит строить дерево, _расположенное_ в строке.

Т.е., "ссылочная" структура будет такая:

           [1]
           / \
         [2] [3]
         / \ / \

Где узлы расположены в памяти произвольно. А можно располагать их
не произольно, а последовательно, в одном массиве, который и будет строкой:


[1^2^3][2^n^k][3^l^m]   (здесь [] - узел, он же элемент массива, ^n - ссылка
на n-ый узел)

Правда, возникнут следующие проблемы:

1) Ссылку придется сделать относительной (текущего узла), т.е. первый узел в
примере будет выглядеть так: [1(1)(2)][2()()][3()()].

2) Непонятно еще как размещать деревья. Можно попробовать размещать их в
виде пирамиды (если дерево бинарное) - кстати, тогда ссылки (n) не
понадобятся, они сразу вычисляются; да и дерево будет заранее упорядочено.

Зато появляется куча бонусов:

1) Компактное размещение в памяти (=> меньшая фрагментация, легко из/в файла
читать и т.п.),
2) Быстрое копирование/построение деревьев/поддеревьев
3) Быстрое сравнение
4) Ну и прочие ништяки

Удачи!
__________________________________________________
--{ Dmitriy Krylov aka "Abulafia"   }-------------
--{ mailto: krylov@mail.primorye.ru }-------------


--- ifmail v.2.15dev5
 * Origin: Demos online service (2:5020/400)