Я хочу использовать структуру данных для сортировки пространственно-временных данных (x, y, z, time).
В настоящее время алгоритм обработки ищет набор четырехмерных (x, y, z, время) точек с учетом сферического (3d) пространственного радиуса и линейного (1d) временного радиуса, отмечая для каждой точки, какие другие точки находятся в пределах этих радиусов. Причина в том, что после обработки я могу запросить у любой 4D-точки всех ее соседей за время O(1).
Однако в некоторых распространенных конфигурациях пространственного и временного радиусов первый запуск алгоритма занимает около 12 часов. Хотите верьте, хотите нет, но это на самом деле быстро по сравнению с тем, что существует в нашей отрасли. Тем не менее, я хочу помочь ускорить начальные прогоны, поэтому я хочу знать: Является ли kd- дерево подходит для 4D пространственно-временных данных?
Обратите внимание, что я не ищу реализации поиска ближайших соседей или поиска k ближайших соседей.
Дополнительная информация:
Примерный набор данных содержит 450 000 4D-точек.
Некоторые наборы данных являются плотными по времени, поэтому упорядочение по времени, безусловно, экономит обработку, но все же приводит к большому количеству проверок расстояния.
Время представлено датами в стиле Excel с типичным диапазоном от 30 000 до 39 000 (приблизительно). Пространственные диапазоны иногда представляют собой более высокие значения, иногда более низкие значения, но диапазон между каждой пространственной координатой подобен времени (например, maxX-minX ~ maxT-minT).
Еще больше информации:
Я подумал, что добавлю еще немного нерелевантных данных на случай, если кто-то имел дело с подобным набором данных.
В основном я работаю с данными, представляющими пространственно-временные события, которые записываются и подтверждаются несколькими датчиками. Присутствует ошибка, поэтому включаются только события, соответствующие порогу ошибки.
Временной интервал этих наборов данных колеблется от 5 до 20 лет данных.
Для действительно старых данных (старше 8 лет) события часто были очень плотными в пространстве по двум причинам: 1) в то время было относительно мало доступных датчиков, и 2) датчики располагались близко друг к другу, чтобы близлежащие события могли быть правильно зафиксированы. подтверждается с низкой ошибкой. Дальнейшие события можно было записать, но они имели слишком большую погрешность
Для более новых данных (‹8 лет) события часто очень плотные по времени по обратным причинам: 1) обычно доступно много датчиков и 2) датчики размещаются через равные промежутки времени на большем расстоянии.
В результате наборы данных обычно нельзя назвать плотными только во времени или только в пространстве (за исключением случаев, когда наборы данных содержат только новые данные).
Заключение
Я явно должен задавать больше вопросов на этом сайте.
В ближайшее время я буду тестировать несколько решений, которые будут включать в себя 4d-kd-дерево, 3d-kd-дерево с последующей проверкой временного расстояния (предложено Дрю Холлом) и текущий алгоритм, который у меня есть. Кроме того, мне предложили другую структуру данных, называемую деревом TSP (временное разделение пространства), которое использует октодерево для пространства и bsp на каждом узле для времени, поэтому я также могу протестировать это.
Предполагая, что я помню, я обязательно опубликую несколько тестов профилирования для разных конфигураций временного/пространственного радиуса.
Спасибо всем