У меня есть код, который для массива пар lat / long находит ближайшую пару lat / long из другого массива:
Входные данные:
$reference_array
, который является ассоциативным массивом, где ключи являются «метками», а значения — широтой / длиной этой метки. Например, оно может сопоставить название города с центром города.
$input_array
, который является списком широт / длинных пар.
Мне нужно найти ярлык от $reference_array
ближайший к каждому из пунктов $input_array
, У меня также есть максимальный радиус, поэтому любой ближайшей точке, не входящей в этот радиус, присваивается «ближайшая метка», равная нулю.
У меня есть код, который работает — я перебираю каждый массив, вычисляю расстояние между каждой парой, а затем записываю ближайшую метку (и ее расстояние) для каждой точки в $input_array
, Это работает, и в основном так же, как этот вопрос, но не эффективен, и мой сценарий рассчитан с относительно небольшим количеством очков. Я не могу контролировать размер $reference_array
поэтому всегда будет большое количество сравнений, которые необходимо выполнить.
Мой вопрос — какие структуры данных или алгоритмы я могу использовать для повышения эффективности этих вычислений?
Вы можете повысить эффективность, если сначала проверяете, включены ли точки в квадрат с радиусом стороны 2 * или нет. Потому что при сравнении операций нагрузка значительно меньше, чем при расчете расстояния.
Других решений пока нет …