Попробуйте kd-дерево .Высокопроизводительную библиотечную реализацию можно найти здесь .
Примечание: я указываю вам приблизительный поиск ближайших соседей, который оптимизирован для больших размеров.Это может быть немного излишним для вашего приложения.
Редактировать:
Для дерева 2d kd время сборки будет O (m * log (m))и время запроса будет O (n * sqrt (м)).Это должно закончиться тем, что станет чистым выигрышем над наивным решением, если число ваших запросов n превышает log (m).
Библиотека означает, что вам не нужно реализовывать ее, поэтому сложность не должна бытьпроблема.
Если вы хотите обобщить чрезвычайно быстрые запросы в большой размер, проверьте хеширование с учетом локальных особенностей .