Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
Разработка программного обеспечения

Introduction

Boost , Chapter 1. Geometry , Spatial Indexes

Boost C++ Libraries

...one of the most highly regarded and expertly designed C++ library projects in the world. Herb Sutter and Andrei Alexandrescu, C++ Coding Standards

PrevUpHomeNext

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

В настоящее время реализован только один пространственный индекс - R-tree.

R-tree

R-дерево - это структура данных деревьев, используемая для пространственного поиска. Он был предложен Антонином Гуттманом в 1984 году [1] как расширение B-дерева для многомерных данных. Он может использоваться для хранения точек или объемных данных для выполнения пространственного запроса. Этот запрос может, например, вернуть объекты, которые находятся внутри какой-либо области или близки к какой-то точке в пространстве [2]. Можно вставить новые объекты или удалить уже сохраненные.

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

rstar

R-tree - это самобалансированная структура данных. Ключевой частью алгоритма балансирования является алгоритм разделения узлов [3] [4]. Каждый алгоритм производит различные разделения, поэтому внутренняя структура дерева может быть различной для каждого из них. В целом, более сложные алгоритмы лучше анализируют элементы и производят меньше перекрывающихся узлов. В процессе поиска меньше узлов должно быть пройдено, чтобы найти нужные объекты. С другой стороны, более сложный анализ занимает больше времени. В целом более быстрая вставка приведет к более медленному поиску и наоборот. Эффективность R-дерева зависит от алгоритма балансировки, параметров и данных, вставленных в контейнер.

Кроме того, существуют алгоритмы создания R-дерева, содержащего некоторые, количество объектов. Этот метод называется массовой загрузкой и выполняется с использованием алгоритма упаковки [5] [6]. Этот метод быстрее и приводит к появлению R-деревьев с лучшей внутренней структурой. Это означает, что производительность запроса увеличивается.

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

Линейный алгоритм

Квадратный алгоритм

R*tree

Алгоритм упаковки

Примерная структура

linear

quadratic

rstar

bulk

1M Ценности вставки

1.76s

2.47s

6.19s

0.64s

100k пространственные запросы

2.21s

0.51s

0.12s

0.07s

100k knn запросы

6.37s

2.09s

0.64s

0.52s

Конфигурация машины, используемой для тестирования, была: Intel(R) Core(TM) i7 870 @ 2.93GHz, 8GB RAM, MS Windows 7 x64. Код был составлен с оптимизацией скорости (O2).

Производительность R-дерева для различных значений параметра Max и Min=0,5*Max представлена в таблице ниже. В двух верхних фигурах вы можете увидеть производительность R-дерева, хранящего случайные, относительно небольшие, не перекрывающиеся, 2d коробки. В нижних производительность R-дерева также хранит случайные, 2d-боксы, но на этот раз довольно большие и, возможно, перекрывающиеся. Как вы можете видеть, производительность R-дерево отличается в обоих случаях.

строительство

запрос

не перекрываясь

build_non_ovl

query_non_ovl

перекрытие

build_ovl

query_ovl

Implementation details

Ключевые особенности этой реализации R-дерево:

  • способный хранить произвольно Тип значения,
  • три разных алгоритма балансирования - линейные, четырехмерные или rstar,
  • создание с использованием алгоритма упаковки,
  • параметры (включая максимальное и минимальное количество элементов) могут передаваться в качестве параметров компиляционного или бегового времени, в то время как элементы узлов компиляций хранятся в контейнерах статического размера,
  • продвинутые запросы, например, поиск 5 ближайших Ценности в какой-то момент и пересекая некоторую геометрию, но не в другой,
  • итеративные запросы с использованием итераторов,
  • Конформант C++11 - семантика перемещения, государственные аллокаторы,
  • способен хранить Тип значения без конструктора по умолчанию,
  • in-memory storage by use of the default std::allocator<>,
  • другие варианты хранения - общая память и картированный файл с помощью Boost. Interprocess allocators.
Dependencies

R-дерево зависит от Boost. Контейнер, Boost.Core, Boost.Move, Boost.MPL, Boost. Ранж, буст.

Contributors

Пространственный индекс был первоначально запущен Federico J. Fernandez во время программы Google Summer of Code 2008, наученной Хартмутом Кайзером.

Spatial thanks

Я хотел бы поблагодарить Баренда Герельса, Бруно Лаланде, Матеуш и #321;oskot, Lucanus J. Simonson за их поддержку и идеи.



[1] Gutttman, A. (1984). R-Trees: Динамическая структура индекса для пространственного поиска

[2] Cheung, K.; Fu, A. (1998). Ближайшие соседи Поиск на R-деревье

[3] Грин, D. (1989). Реализация и анализ производительности методов доступа к пространственным данным

[4] Beckmann, N.; Kriegel, H. P.; Schneider, R.; Seeger, B. (1990). Р*-дерево: эффективный и надежный метод доступа для точек и прямоугольников

[5] Leutenegger, Scott T.; Edgington, Jeffrey M.; Lopez, Mario A. (1997). STR: простой и эффективный алгоритм для упаковки R-Tree

[6] Garcia, Yvan J.; Lopez, Mario A.; Leutenegger, Scott T. (1997). Приветственный Алгоритм для навалочных R-деревьев


PrevUpHomeNext

Статья Introduction раздела Chapter 1. Geometry Spatial Indexes может быть полезна для разработчиков на c++ и boost.




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



:: Главная :: Spatial Indexes ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-30 11:47:00
2025-05-19 20:32:36/0.0080890655517578/0