Информация являлась и является одним из самых ценных ресурсов. С появлением вычислительной техники в XX-м веке стала актуальна проблема хранения, упорядочивания и поиска информации. Человек пишет книги, сочиняет
музыку, делает фотографии, снимает видео — это только самые популярные
виды информации. Каждый год её количество только увеличивается. В следствие чего возрастает нагрузка на вычислительные машины. Требуются все более быстрые и быстрые алгоритмы. Для каждого отдельного типа информации
стараются подобрать как можно более оптимальный алгоритм.
При хранении информации встает проблема её поиска по нескольким, зачастую числовым, параметрам. Одним из ярких и визуальных примеров является
трёхмерное пространство с заданным в нём множеством точек. Необходимо по
различным интерактивным ограничивающим запросам находить соответствующую им информации [1]. Частным случаем данного примера может быть база
данных, содержащая список людей с их датами рождений. Среди которых, например, требуется находить записи с годами от 1990 до 2000, месяцами от 1 до
7, а днями от 15 до 30.
Ещё во второй половине XX-го века были начаты и ведутся до сих пор разработки алгоритмов для хранения, упорядочивания и поиска элементов трёхмерного пространства [2, 3]. Многие из них основаны на мощном фундаменте
из сбалансированных деревьев, частным случаем которых являются двоичные
деревья поиска [4]. Изменение условий, накладываемых на такие структуры
данных, позволяет варьировать алгоритмическую сложность, балансируя между сложностями операций построения, изменения и поиска.5
Такие структуры данных используются в совершенно различных областях:
от военных тренажеров до симуляции и визуализации различных физических
явлений [5], что только увеличивает к ним интерес.
В настоящее время алгоритмы обработки линейных запросов находят своё
применение в различных областях, от военной промышленности до сферы развлечений. Одним из самых мощных фундаментов данных алгоритмов являются сбалансированные деревья. Для которых введение дополнительных условий
позволяет балансировать между производительностью и потреблением памяти, времени работы для определенного типа запросов. Поэтому была предложена модификация дерева, в которой каждая вершина имеет не более восьми
потомков, а разбивается так, чтобы разность между размером минимального
и максимального потомка была минимальна. И есть основания полагать, что
предложенный алгоритм является хорошей альтернативой для уже существующих, так как работает эффективнее на определённых типах данных. И для
проверки данного предположения был разработан программный комплекс для
численных экспериментов и сравнения производительностей алгоритмов.
В результате проверки на различных входных данных было выявлено улучшение производительности на таких типах данных как: равномерное распределение, распределение в виде сетки, разряженное распределение с большими
одиночными скоплениями. Что подтверждается теоретическими расчетами анализа алгоритма.
1. Tropf H., Herzog H. Multidimensional Range Search in Dynamically Balanced Trees. — 1981. — Pp. 71-77.
2. Ungor Alper. Kd-trees and range trees. — 2009. —
https://www.cise.ufl.edu/class/cot5520fa09/CG_RangeKDtrees.pdf.
3. R-Tree Introduction. — http://www.bowdoin.edu/ ltoma/teaching/cs340/spring08/P chap1.pdf.
4. Алгоритмы: построение и анализ / Томас Кормен, Чарльз Лейзерсон, Рональд Ривест, Клиффорд Штайн. — 3 edition. — 2009.
5. Losasso Frank, Gibou Frederic, Fedkiw Ron. Simulating Water and Smoke with an Octree Data Structure. — 2004.
6. Devillard Nicolas. Fast median search: an ANSI C implementation. — 1998. — Jul.
7. Guttman A. R-Trees: A Dynamic Index Structure for Spatial Searching // ACM SIGMOD International Conference on Management of Data. — 1984. — Pp. 47¬57.
8. Brown Russell A. Building a Balanced fc-d Tree in O(kn log n) Time // Journal of Computer Graphics Techniques. — 2015. — Vol. 4, no. 1.
9. Meagher D. Geometric Modeling Using Octree Encoding // Computer Graphics And Image Processing 1. — 1982. — Pp. 129-147.
10. Yianilos Peter N. Data structures and algorithms for nearest neighbor search in general metric spaces. — 1993. — P. 311-321.
11. Laine Samuli, Karras Tero. Efficient Sparse Voxel Octrees - Analysis, Exten¬sions, and Implementation: NVIDIA Technical Report NVR-2010-001: NVIDIA Corporation, 2010. — Feb.
12. Lengyel Eric. Projection Matrix Tricks. — 2007. —
http://www.terathon.com/gdc07_lengyel.pdf.
13. House Donald H. Orthographic and Perspective Projection. — 2014. —
https://people.cs.clemson.edu/ dhouse/courses/405/notes/projections.pdf.
14. Kakde. Hemant M. Range Searching using Kd Tree. — 2005. — Aug.
15. Agarwal Pankaj K., Gao Jie, Guibas Leonidas J. Kinetic Medians and kd-Trees.
16. Crespo Maria Merce Pons. Design, Analysis and Implementation of New Vari¬ants of Kd-trees. — 2010. — Sep.
17. Moore Andrew W. An intoductory tutorial on kd-trees. — 1991.
18. Bentley J. L. Multidimensional Divide and Conquer. — 1980.
19. Preparata F. P., Shamos M. Computational Geometry. — 1985.
20. Revelles J., Urena C., Lastra M. An Efficient Parametric Algorithm for Octree Traversal.
21. Eppstein David, Goodrich Michael T., Sun Jonathan Z. The Skip Quadtree: A Simple Dynamic Data Structure for Multidimensional Data.
22. Aluru S. Quadtrees and octrees. — 2005.
23. Bentley J. L. Multidimensional binary search trees used for associative searching. — 1975. — Sep. — P. 509-517.