Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Региональный поиск метод квадрантного дерева / doc / Региональный поиск. Метод квадрантного дерева.doc
Скачиваний:
27
Добавлен:
01.05.2014
Размер:
168.45 Кб
Скачать

2.2 Описание алгоритма.

При построенном для заданного набора точек S квадрантном дереве запрос по области R, начинающейся с узла n, состоит из следующих шагов:

1. Проверить, пересекается ли область R с областью (n). Если нет, то выполнить возврат.

2. Если n – внешний узел, то каждая точка в его списке проверяется на предмет включения в R. В противном случае (n – внутренний узел) запрос по области рекурсивно применяется к каждому из четырех потомков узла n, объединяя вместе все обнаруженные точки в единый список.

3. Теоретические оценки сложности.

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

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

  • Несоединенные узлы характеризуются соотношением R  (n) = 0.

Здесь (n) лежит полностью вне области R.

  • Окруженные узлы характеризуются соотношением R  (n) = (n).

Здесь (n) лежит полностью внутри области R.

  • Пересекающиеся узлы характеризуются соотношением 0  R  (n)  (n).

Здесь (n) и R частично пересекаются.

Мы можем игнорировать несоединенные и окруженные узлы. Процесс поиска не продолжается после несоединенных узлов: при достижении несоединенного узла нет смысла обрабатывать его последователей. Когда достигается окруженный узел, то это означает, что каждая точка из набора S, принадлежащая последователю окруженного узла по необходимости, должна лежать внутри области R.

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

Решим теперь задачу подсчеты пересекающихся узлов, обрабатываемых в процессе выполнения запроса по области. На рисунке 1 показаны возможные 5 типов пересекающихся узлов. Тип узла n определяется видом взаимного пересечения области R и области (n).

Рисунок 1:

Тип 0 Тип 1 Тип 2 Тип 3 Тип 4

Для пересекающегося узла n каждого типа (0-4) область R может пересекать 4 подквадранта для (n) только небольшим числом способов, показанных на рисунке 2.

Рисунок 2:

Тип 0

0 1,1 2,2,2,2

Тип 1

1 1,3 2,2,4,4 2,2

Тип 2

2 2,4,4

Тип 3

3,3 4,4,4,4

Тип 4

4,4 4,4

Под каждой схемой указан тип узла, получающегося в результате такого пересечения и лежащего на один уровень ниже. Заштрихованные подквадранты охватываются областью, так что они соответствуют окруженным узлам. При каждом посещении узла типа i, обработка переходит на одного или нескольких его потомков. Но во всех случаях, по крайней мере 2 обрабатываемых потомка будут также типа i, а остальные относятся к типу, более высокому, чем i. Если узел имеет тип 4, то возможно только двухвариантное ветвление. Тип узла соответствует возможности для трехвариантного или четырехвариантного ветвления во время выполнения запроса по области. Когда происходит трехвариантное или четырехвариантное ветвление, то возможность для последующего трехвариантного или четырехвариантного ветвления уменьшается для всех, кроме, может быть, двух потомков. Поиск продолжается вниз подобно как бы двоичному дереву, заключенному внутри квадрантного дерева – количество посещаемых узлов пропорционально 2D, если квадрантное дерево имеет глубину D.

Рассчитаем оптимальное значение величины D. D должно быть достаточно большим, чтобы только несколько внешних узлов содержали больше, чем M точек, и достаточно малым, чтобы квадрантное дерево не было слишком глубоким.

При наиболее мелком делении квадрантное дерево с глубиной D содержит 4D внешних узла. Чтобы каждый внешний квадрант содержал в среднем M точек, потребуется квадрантов, то есть .

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

Мы показали, что при выполнении запроса по области посещаются не более узлов. Ранее мы указали, что в худшем случае потребуется обработатьточек.

Соседние файлы в папке doc