В главе Введение в алгоритмы * есть глава , посвященная поиску двух ближайших точек в двумерном пространстве за O (n * logn) времени. Вы можете проверить это на Google Книги . На самом деле, я предлагаю это всем, так как метод решения проблемы «разделяй и властвуй» очень прост, элегантен и впечатляет.
Хотя это не может быть расширено непосредственно к вашей проблеме (так как константа 7
будет заменена на 2^101 - 1
), для большинства наборов данных это должно быть просто отлично. Таким образом, если у вас достаточно случайный ввод, он даст вам O(n*logn*m)
сложность, где n
- это количество точек, а m
- это число измерений.
редактировать
Это все, если у вас есть евклидово пространство. Т.е. длина вектора v
равна sqrt(v0^2 + v1^2 + v2^2 + ...)
. Если вы можете выбрать метрику, однако, могут быть другие варианты для оптимизации алгоритма.