использовать KD-дерево
К сожалению, в больших размерах этой структуры данных сильно страдает от curse of dimensionality, что заставляет его время поиска быть сопоставимым с грубой силой se архипелаг
уменьшить количество измерений
Dimensionality reduction хороший подход, который предлагает справедливый компромисс между точностью и скоростью. Вы теряете некоторую информацию, когда уменьшаете свои размеры, но получаете некоторую скорость.
По точности я имею в виду поиск точного ближайшего соседства (NN).
Анализ основных компонентов (PCA) - это хорошая идея, когда вы хотите уменьшить размерное пространство, в котором живут ваши данные.
Есть ли какой-нибудь умный алгоритм или структура данных, чтобы решить это именно в разумные сроки?
Приближенный поиск ближайшего соседа (ANNS), где вы удовлетворены найти точку, которая не может быть точно ближайшего соседа, а хорошее приближение к ней (то есть четвёртое, например NN вашему запросу, в то время как вы ищете 1-й NN).
Этот подход требует вашей точности, но значительно повышает производительность. Более того, вероятность нахождения хорошего NN (достаточно близкого к запросу) относительно высока.
Вы можете узнать больше об ANNS во введении нашего kd-GeRaF paper.
Хорошая идея - объединить ANNS с уменьшением размерности.
Чувствительность на месте (LSH) - это современный подход к решению проблемы Nearest Neighbor в высоких измерениях. Основная идея заключается в том, что точки, которые лежат близко друг к другу, хэшируются в одно и то же ведро. Поэтому, когда запрос приходит, он будет хэширован в ведро, где это ведро (и обычно его соседние) содержит хорошие кандидаты NN).
FALCONN - хорошая реализация на С ++, которая фокусируется на схожих косинусах. Еще одна хорошая реализация - наш DOLPHINN, который является более общей библиотекой.
Я думаю, что это похоже на одно из следующих: http://www.facebook.com/careers/puzzles.php – Joni
Насколько точными решениями я подозреваю, что ответ отрицательный, но я хотел предложить случайные прогнозы и Теорема Джонсона Линденштрауса может помочь – piccolbo
+1 для предыдущего комментария, который соответствует тем же линиям, что и LSH и ANN. –