Проект предоставляет инструменты для эффективного поиска точек в
- KD-Tree (по книге М. де Берга «Вычислительная геометрия»)
- Range Tree (по книге М. де Берга «Вычислительная геометрия»)
- Boost R* Tree (интеграция из
boost::geometryдля сравнения производительности)
- Система сборки: CMake (>= 3.15), Ninja
- Компилятор: C++23
- Зависимости C++: Boost, Qt5
- Тестирование и бенчмарки: Google Test (gtest), Google Benchmark (gbench)
- Анализ данных: Python3 (с пакетами
numpy,matplotlib,scipy)
# Конфигурация проекта
cmake -S . -B build -G Ninja -DCMAKE_EXPORT_COMPILE_COMMANDS=ON -DCMAKE_COLOR_DIAGNOSTICS=ON
# Компиляция
cmake --build build -jN
Запуск модульных тестов для проверки корректности работы KD-Tree и Range Tree:
./build/tests/run_testsКорректность алгоритмов валидируется методом Brute-Force на случайных наборах данных размерностью вплоть до 12 измерений.
Запуск стандартного замера производительности для трех алгоритмов:
./build/benchmarks/run_benchmarksИзмеряется время построения деревьев и время выполнения поисковых запросов. Поиск тестируется на диапазонах, включающих в себя фиксированный процент точек от общего пространства пространства (1%, 5%, 10%, 25%, 50%, 75%, 100%).
Для исследования зависимостей (время поиска от размера диапазона и от количества точек в структуре для 3D пространства) используйте расширенный флаг --findvary:
# 1. Запуск расширенных бенчмарков с экспортом в JSON
./build/benchmarks/run_benchmarks --benchmark_format=json --benchmark_out=benchmark_results.json --findvary
# 2. Настройка Python окружения
python3 -m venv .venv
source .venv/bin/activate
pip install numpy matplotlib scipy
# 3. Генерация графиков по результатам замеров
python analysis/analyze.py
После выполнения скрипта в папке analysis/plots/ будут сохранены два графика:
-
search_vs_n.png— зависимость времени поиска от$N$ точек в дереве. -
search_vs_range.png— зависимость времени поиска от объема окна выборки.
Проект содержит интерактивное десктопное приложение, написанное на Qt5:
./build/src/RangeSearchВозможности GUI:
- Загрузка собственного файла с точками из интерфейса.
- Визуальное интерактивное выполнение Range Search запросов.
- Встроенный вывод графиков производительности стандартного бенчмарка.
Результаты для 3D пространства.
CPU Time, затраченное на аллокацию и сборку структуры, а также эмпирически вычисленная асимптотическая сложность.
| Алгоритм | N = 10,000 | N = 100,000 | Асимптотика (Big-O) |
|---|---|---|---|
| Boost R* Tree | 1.02 ms | 15.8 ms | |
| KD-Tree | 1.75 ms | 21.4 ms | |
| Range Tree | 72.8 ms | 1059 ms |
Время поиска целевых точек внутри
| Алгоритм | Малый диапазон (1%) | Средний диапазон (50%) | Полный охват (100%) |
|---|---|---|---|
| Boost R* Tree | 0.048 us | 9.92 us | 93.0 us |
| KD-Tree | 0.368 us | 14.0 us | 82.4 us |
| Range Tree | 0.055 us | 3.23 us | 36.8 us |

