Научная статья на тему 'Обобщенные kd-деревья и локальные преобразования'

Обобщенные kd-деревья и локальные преобразования Текст научной статьи по специальности «Математика»

CC BY
157
72
i Надоели баннеры? Вы всегда можете отключить рекламу.
Ключевые слова
МНОГОМЕРНЫЕ ДАННЫЕ / KD-ДЕРЕВЬЯ / ЛОКАЛЬНЫЕ ПРЕОБРАЗОВАНИЯ / MULTIDIMENSIONAL DATA / KD-TREE / LOCAL TRANSFORMATIONS

Аннотация научной статьи по математике, автор научной работы — Лебединская Н. А., Лебединский Д. М.

В статье рассматривается вопрос об организации структуры данных для реализации многомерного словаря; вводится некоторое обобщение kd-деревьев, в отличие от классического варианта допускающее локальные преобразования. Также, дополнительно к аналогу поворотов в многомерном случае, вводится новый тип локальных преобразований. К сожалению, в отличие от классического одномерного случая, преобразования такого типа не всегда применимы к конкретному узлу, и в статье приводятся необходимые и достаточные условия применимости всех обсуждаемых типов локальных преобразований к выбранному узлу дерева. Доказывается (при помощи элементарных средств) теорема, аналогичная хорошо известному результату о двоичных деревьях поиска, а именно, что любое такое дерево может быть преобразовано в любое другое с тем же набором ключей при помощи последовательности локальных преобразований, затрагивающих лишь некоторый узел и его сыновей. Такого рода деревья могут использоваться для организации хранения многомерных данных; хотя полная аналогия с одномерным случаем вряд ли достижима, поскольку применение указанных преобразований к конкретному узлу требует специальной подготовки обоих его сыновей, однако в системах, в которых используется отдельный процесс для оптимизации структуры дерева параллельно с его использованием, возможность произвольного преобразования структуры дерева при помощи последовательности только локальных преобразований представляется большим преимуществом.

i Надоели баннеры? Вы всегда можете отключить рекламу.
iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

Текст научной работы на тему «Обобщенные kd-деревья и локальные преобразования»

УДК 004.623

Вестник СПбГУ. Сер. 1. 2012. Вып. 3

ОБОБЩЕННЫЕ ка-ДЕРЕВЬЯ И ЛОКАЛЬНЫЕ ПРЕОБРАЗОВАНИЯ*

H. А. Лебединская1, Д. М. Лебединский

I. С.-Петербургский государственный университет, канд. физ.-мат. наук, доцент, nlebedin@math.spbu.ru

2. С.-Петербургский государственный университет, канд. физ.-мат. наук, доцент, dlebedinski@gmail.com

Введение. Задача об организации словаря — одна из классических задач дискретной математики. Известно несколько ее решений — например, АВЛ-деревья [1] или красно-черные деревья [2]. Однако в многомерном случае задача резко усложняется. Имеется несколько попыток приблизиться к ее решению, одна из наиболее удачных — так называемые к^-деревья [3].

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

Чтобы обойти эту трудность, был предложен подход к(й-деревьев [4]. Суть его в том, что мы перебалансируем не все дерево, а лишь поддеревья небольшой высоты (так называемая бахрома).

Далее, этот подход был обобщен до так называемых gkd-деревьев [5]. Они сочетают в себе возможности kdt-деревьев с хранением нескольких ключей в одной вершине.

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

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

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

Первый случай имеет место, если в отце и сыне разделяющие плоскости параллельны. В этом случае преобразование — это просто самый обычный поворот, унаследованный от одномерных деревьев двоичного поиска. После такого преобразования новая разделяющая плоскость в отце берется из его сына, а старая уходит в другого из его сыновей.

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

* Работа выполнена при частичной финансовой поддержке РФФИ (гранты №10-01-00-245 и 1001-00-297).

© Н. А. Лебединская, Д. М. Лебединский, 2012

Тогда обе плоскости в отце и сыновьях разделяют все пространство на 4 части, которые перекомпоновываются таким образом, чтобы новая плоскость в отце бралась из сыновей, а старая опускалась в оба сына.

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

Основная теорема

Теорема 1. Любое дерево рассматриваемого в статье типа может быть преобразовано в любое другое с тем же набором ключей при помощи локальных преобразований описанного в предыдущем разделе вида.

Доказательство. Очевидно, структура интересующего нас дерева (при фиксированном наборе ключей) полностью определяется заданием разделяющих плоскостей в его вершинах. Поэтому для доказательства теоремы нам достаточно доказать следующее утверждение: каковы бы ни были дерево и плоскость, при помощи локальных преобразований указанного вида можно добиться того, чтобы данная плоскость была разделяющей в корне нового дерева.

Доказательство последнего утверждения будем вести индукцией по высоте дерева. База индукции совершенно очевидна (см. третий случай в описании локальных преобразований).

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

Пусть также у нас имеется дерево высоты n +1 и плоскость P, которую мы хотим видеть в качестве разделяющей в его корне. Покажем, как этого добиться.

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

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

Литература

1. Адельсон-Вельский Г. М., Ландис Е. М. Один алгоритм организации информации Ц Доклады Академии Наук. 1962. T. 146. Вып. 2. С. 263-266.

2. Bayer R. Symmetric Binary B-Trees: Data Structure and Maintenance Algorithms ll Acta Inf. 1972. Т. 1. С. 290-306.

3. Bentley J. L. Multidimensional Binary Search Trees Used for Associative Searching ll Comm. ACM. 1975. Т. 1S. С. 509-517.

4. Cunto W., Lau G., Flajolet P. Analysis of KDT-trees: KD-trees improved by local reorganisations ll Lecture Notes in Computer Science. 19S9. Т. 3S2. С. 24-3S.

5. Cunto W., Yriarte V. G KD-trees: Binary Trees that Combine Multi-dimensional Data Handling, Node Size and Fringe Reorganization ll Lecture Notes in Computer Science. 1992. Т. 621. С. 192-211.

Статья поступила в редакцию 26 апреля 2012 г.

i Надоели баннеры? Вы всегда можете отключить рекламу.