Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.67/9: Рейтинг темы: голосов - 9, средняя оценка - 4.67
13 / 13 / 1
Регистрация: 19.10.2019
Сообщений: 607

std::map для k-d дерева

28.04.2021, 20:06. Показов 2060. Ответов 28
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день.
Хочу найти SOTA для реализации K-D деревьев.
Базовые варианты как я понимаю - либо самому делать структуру, либо использовать что то из стандартной библиотеки.
Самый логичный вариант попробовать сочинить что то с использованием std::map, но компаратор у std::map всего один и этот компаратор как должен знать по какой оси ему проводить сравнение. В общем, если не лезть в недра либы, а обойтись стандартным апи пока непонятно как это делать.
Сделать свою структурку не проблема, но в стандартной библиотеки уже все оптимизировано и навешено всяких пряников, а тут надо или обойтись скромными возможностями или писать самому.
Есть конечно вариант со сторонними библиотека, например CGAL, но хочется обойтись стандартной библиотекой.

Добавлено через 5 минут
Вот если было понимание как находить корневой узел, то это облегчило бы дело.
Никто ведь не запрещает использовать компаратор как статический оператор.

Добавлено через 13 минут
Пока склоняюсь к мысли создать класс наследник от std::map и переопределить все методы, которые приводят к поиску т.е. это оператор [], find, at
В переопределенных методах сбрасывать циклический счетчик осей и вызывать основной метод.
Но насколько это решение корректное ?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
28.04.2021, 20:06
Ответы с готовыми решениями:

Возможно ли создать контейнер std::map, в котором в качестве значения была бы ссылка на std::map?
Здравствуйте. Возможно ли создать контейнер std::map, в котором в качестве значения была бы ссылка на std map? Например: std::map...

Emplace в std::map. Как добавить элемент в std::map без копирования?
здравствуйте... есть ли способ не писать так: std::map<int, char> ksa; ksa.emplace(std::piecewise_construct, ...

Очистка map и перевернутого std::map c std::greater
Написала я программу, которая заполняет два контейнера map. a,b. вывод программы такой 11 a: 0.00000000 - 0.00000000 a: 0.10000000...

28
13 / 13 / 1
Регистрация: 19.10.2019
Сообщений: 607
28.04.2021, 22:42  [ТС]
Студворк — интернет-сервис помощи студентам
Я правда вынес за скобки вопрос инициализации мапы.

Добавлено через 2 минуты
Алексей1153, Можно поподробнее.
Взяли получили хеш от чего то там и как они помогу в поиске ближайшей точки ?
Есть геохеши, но это не имеет никакого отношения к обычным хешам.
0
фрилансер
 Аватар для Алексей1153
6486 / 5714 / 1133
Регистрация: 11.10.2019
Сообщений: 15,234
28.04.2021, 22:54
Цитата Сообщение от squareroot Посмотреть сообщение
получили хеш от чего то там
да просто уникальный uint64_t id точки. Основная мапа - это просто свалка точек. Всё интересное - в индексах. А каждый индекс представляет собой связь id-> координата

Понятно, что нет возможности узнать, в каком первом из трёх индексов (x,y,z) нужно будет начинать искать.

Берётся любой, там ищем ближайшие точки.
Берём второй, там ищем ближайшие точки.
Потом третий

пересечение трёх поисков - результат

основная затрата времени тут будет на поиск пересечения результатов
0
13 / 13 / 1
Регистрация: 19.10.2019
Сообщений: 607
28.04.2021, 22:59  [ТС]
Алексей1153, Есть k-d дерево.
Вы придумали что-то лучшее ? Тогда Вам надо срочно начинать диссер писать.
Но тут тема про k-d.
0
фрилансер
 Аватар для Алексей1153
6486 / 5714 / 1133
Регистрация: 11.10.2019
Сообщений: 15,234
28.04.2021, 23:21
Цитата Сообщение от squareroot Посмотреть сообщение
диссер писать
лень

Добавлено через 1 минуту
squareroot, мой вариант не будет, конечно, самый супер-пупер быстрым и оптимальным, но он рабочий на 100%. И его даже можно использовать при проверке супер-пуперского быстрого алгоритма
0
13 / 13 / 1
Регистрация: 19.10.2019
Сообщений: 607
28.04.2021, 23:24  [ТС]
Алексей1153, Спасибо за желание помочь, но я в название темы заглавном посте не просто так указал слово SOTA
0
фрилансер
 Аватар для Алексей1153
6486 / 5714 / 1133
Регистрация: 11.10.2019
Сообщений: 15,234
28.04.2021, 23:34
squareroot, кстати, интернет не подсказал мне, что сие обозначает.

Не по теме:

Там есть варианты:

1)S.O.T.A – Stalker Online Time Anomaly
2)компания по втюхиванию женщинам краски
3)магазин электроники в Киеве
4)некое СМИ



описание дерева в вики нашлось, но как я там увидел структуру описания узла, я сильно засомневался в его эффективности при реализации на C++
0
13 / 13 / 1
Регистрация: 19.10.2019
Сообщений: 607
28.04.2021, 23:39  [ТС]
Алексей1153, https://en.wikipedia.org/wiki/State_of_the_art

Добавлено через 3 минуты
Наверно куча даёт больше гибкости чем мапа. Наверно стоит подумать в эту сторону.
0
фрилансер
 Аватар для Алексей1153
6486 / 5714 / 1133
Регистрация: 11.10.2019
Сообщений: 15,234
28.04.2021, 23:46
выражение State-of-the-art - означает нечто новейшее, современнейшее, насколько я понял

ну, ок, что на эту тему нам говорит интернет

даже статья на всеми любимом хабре имеется
0
13 / 13 / 1
Регистрация: 19.10.2019
Сообщений: 607
28.04.2021, 23:59  [ТС]
Алексей1153, Я ее видел, но хотелось проверить можно ли брать за основу std::map
Рукотворные деревья штука симпатичная, но бес всякой полезной обвязки, которая есть у контейнеров стандартной библиотеки узко применимая. А писать полноценный класс как то долго.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
28.04.2021, 23:59
Помогаю со студенческими работами здесь

Составной ключ для std::map
Есть класс. Нужно его сделать ключем для карты. class Vertex{ public: double X,Y,Z; Vertex(double x=0,double y=0, double...

Стоит ли очищать в деструкторе std::map , std::vecotor?
У меня ещё один нубский вопрос :) Вот если в классе объявлены мапы и вектора, которые по ходу программы как то заполняются, нужно ли мне...

std::map, std::vector и порядок обхода коллекции
Здравствуйте, уважаемые! Вопрос следующий - если я сохраняю какие-то значения в map или вектор, то всегда ли я буду получать тот-же...

Std::unordered_multimap<std::string, int> map
Приветствую. Как можно получить только &quot;уникальный&quot; ключ в контейнере? std::unordered_multimap&lt;std::string, int&gt; map; ...

Заголовочный файл для std::map<string,int>
Добрый вечер. Назрел такой вопрос. Про написании программы телефонная книга не понимаю, какие методы нужно писать в хэдер файл, если у нас...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
29
Ответ Создать тему
Новые блоги и статьи
Транскрипция 55-минутного видео через Whisper: WhisperDesktop облажался, спас Google Colab[
anaschu 01.06.2026
Понадобилось получить текст из свежезагруженного видео на YouTube. Казалось бы, задача на пять минут. Заняла полтора часа. Делюсь опытом — может кому пригодится последовательность решений. . . .
21 мат мед. Планы на развитие модели здравоСохранения
anaschu 01.06.2026
AnyLogic: план развития симуляционной модели рабочего коллектива — динамический абсентеизм, реальные данные, три сценария сравнения Продолжаю серию постов о дискретно-событийной модели рабочего. . .
20. Мат мед. Абсентеизм как отдельный тип простоя
anaschu 29.05.2026
Апдейт модели: исправленные баги, абсентеизм и новые механизмы Продолжаю развивать ранее описанную модель рабочего коллектива на AnyLogic. За последние несколько дней был проведён серьёзный. . .
19. здоровье, усталость и психотип работника влияют на производительность предприятия, и наоборот, производительность на здоровье, усталось и психотип
anaschu 28.05.2026
Дискретно-событийная модель рабочего коллектива на AnyLogic: здоровье, выгорание, психотипы и микростимуляция Привет, коллеги. Хочу поделиться итогами нескольких недель работы над симуляционной. . .
"Прокси" для последовательного порта
Eddy_Em 28.05.2026
Эту штуку написал я достаточно давно. Но сейчас вот понадобилось настроить датчик грозы, но при этом не отключать его от "метеодемона". Соответственно, надо запустить этот "прокси": метеодемон будет. . .
Рефакторинг программы уравнивания.
Massaraksh7 26.05.2026
Пример по предыдущей записи в блоге. Но, надо заметить, что, во-первых, там оптимизация не только математики, но и работы с базой данных, и с графами, а во-вторых, это ещё не всё.
Использование TThread в Lazarus для математических вычислений.
Massaraksh7 25.05.2026
Производя рефакторинг своих программ на предмет ускорения их работы, обратил внимание на такой аспект, как сокращение времени матвычислений. Дело в том, что приходится работать с большими матрицами. . .
Модель здравосохранения 18. Чем здоровее работник, тем быстрее выгорает
anaschu 24.05.2026
Имитационная модель корпоративного здравоохранения: что показывает математика Сегодня в модели рабочего коллектива на AnyLogic появились три новые механики — выгорание через накопленную усталость,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru