Учитывая набор из нескольких миллионов точек с координатами x, y, каков алгоритм выбора для быстрого нахождения лучших 1000 ближайших точек из местоположения? "Быстро" здесь означает около 100 мс на домашнем компьютере.
Грубая сила означает выполнение миллионов умножений, а затем их сортировку. Хотя даже простое приложение Python может сделать это менее чем за минуту, оно все еще слишком длинное для интерактивного приложения.
Ограничительная рамка для точек будет известна, поэтому было бы возможно разбиение пространства на простую сетку. Однако точки распределены несколько неравномерно, поэтому я подозреваю, что большинство квадратов сетки будет пустым, а затем внезапно некоторые из них будут содержать большую часть точек.
Изменить: не обязательно быть точным, на самом деле может быть довольно неточным. Это не было бы огромной сделкой, если бы 1000 лучших на самом деле были всего лишь случайными точками из верхнего 2000, например.
Изменить: количество точек редко изменяется.