4551
правка
Irina (обсуждение | вклад) |
Irina (обсуждение | вклад) |
||
Строка 27: | Строка 27: | ||
== Основные результаты == | == Основные результаты == | ||
Хотя структура R-дерева ограничена, группировка гиперкубов в листья и группировка поддеревьев в поддеревья большей величины допускает немалую долю свободы. Различные стратегии группировки приводят к созданию различных вариантов R-деревьев. Большинство существующих R-деревьев используют различные эвристики для группировки гиперкубов, «близких» друг к другу в пространственном отношении, так что оконному запросу не придется посещать слишком много «лишних» вершин. В общем случае имеются два способа построения R-дерева: повторная вставка и массовая загрузка. К первому типу алгоритмов относятся исходное R-дерево [9], R+-дерево [15], R*-дерево [6] и т.п. Эти алгоритмы используют O( | Хотя структура R-дерева ограничена, группировка гиперкубов в листья и группировка поддеревьев в поддеревья большей величины допускает немалую долю свободы. Различные стратегии группировки приводят к созданию различных вариантов R-деревьев. Большинство существующих R-деревьев используют различные эвристики для группировки гиперкубов, «близких» друг к другу в пространственном отношении, так что оконному запросу не придется посещать слишком много «лишних» вершин. В общем случае имеются два способа построения R-дерева: повторная вставка и массовая загрузка. К первому типу алгоритмов относятся исходное R-дерево [9], R+-дерево [15], R*-дерево [6] и т.п. Эти алгоритмы используют <math>O(log_B \; N)</math> операций ввода-вывода для вставки объекта и, следовательно, <math>O(N log \; B \; N)</math> операций ввода-вывода для построения R-дерева на множестве S, что плохо масштабируется для больших значений N. Если множество S известно заранее, намного эффективнее оказывается организовать массовую загрузку всего R-дерева за один проход. Существует множество алгоритмов массовой загрузки – с ними можно ознакомиться, например, в [7, 8, 10, 11, 13]. Большинство этих алгоритмов строит R-дерево за <math>O(N/B \; log_{M/B} \; N/B)</math> операций ввода-вывода (именно столько их требуется для сортировки N элементов); полученные в результате R-деревья обычно оказываются лучше созданных при помощи повторной вставки. За прошедшие десятилетия специалистами по работе с базами данных было опубликовано много работ, посвященных R-деревьям, полный список которых был бы слишком обширным. Манопулос и др. [14] приводят великолепный обзор литературы по данному вопросу. Однако ни один из вышеупомянутых вариантов R-деревьев не гарантирует нужной сложности выполнения запроса; Ардж и др. [3] построили пример, демонстрирующий, что в случае некоторых из наиболее популярных R-деревьев приходится посещать все вершины, не дав ни одного ответа. | ||
Строка 33: | Строка 33: | ||
Теорема 1 ([1, 12]). Имеется множество из N точек в пространстве <math>\mathbb{R}_d \;</math>, такое, что для любого R-дерева <math>\mathcal{T} \;</math>, построенного на этих точках, существует пустой оконный запрос, для выполнения которого алгоритм запроса должен посетить | '''Теорема 1 ([1, 12]). Имеется множество из N точек в пространстве <math>\mathbb{R}_d \;</math>, такое, что для любого R-дерева <math>\mathcal{T} \;</math>, построенного на этих точках, существует пустой оконный запрос, для выполнения которого алгоритм запроса должен посетить <math>\Omega((N/B)^{1 - 1/d}) \;</math> вершин <math>\mathcal{T} \;</math>.''' | ||
Строка 39: | Строка 39: | ||
Теорема 2 ([3]). Для любого множества S, содержащего N параллельных осям гиперкубов в пространстве <math>\mathbb{R}_d \;</math>, R-дерево с приоритетами отвечает на оконный запрос при помощи O{ | Теорема 2 ([3]). Для любого множества S, содержащего N параллельных осям гиперкубов в пространстве <math>\mathbb{R}_d \;</math>, R-дерево с приоритетами отвечает на оконный запрос при помощи <math>O((N/B)^{1 - 1/d} + T/B) \;</math> операций ввода-вывода и может быть построено при помощи <math>O(N/B \; log_{M/B} \; N/B)</math> операций ввода-вывода. | ||
правка