Найти точку, какая сумма расстояний до множества других точек минимальна

У меня есть одно множество (X) точек (не очень большое, пусть говорят 1-20 баллов) и второе (Y), гораздо большее множество точек. Мне нужно выбрать какую-то точку из Y, причем сумма расстояний до всех точек из X минимальна.

Я придумал идею, что я буду рассматривать X как вершины многоугольника и найти центр этого многоугольника, а затем выберем точку из Y, ближайшую к центроиду. Но я не уверен, минимизирует ли центроид сумму его расстояний до вершин многоугольника, поэтому я не уверен, что это хороший способ? Есть ли какой-либо алгоритм для решения этой проблемы?

Точки определяются географическими координатами.

Ответ 1

Центроид многоугольника может быть неправильным, но такая точка существует.

В статье: n-эллипсы и проблема минимального расстояния, показано, что если точки (называемые фокусами, ваш набор X ) не коллинеарны, то

  • Существует уникальная точка (называемая центром), для которой минимизирована сумма расстояний. Эта точка такова, что сумма единичных векторов от этой точки до фокусов равна нулю!

  • Локус точек, для которых сумма расстояний постоянна, является выпуклой кривой (называемой n-эллипсом), содержащей центр

  • n-эллипс для расстояния D полностью содержит n-эллипс для любого другого расстояния D ', для которого D' Д.

Таким образом, вы можете сделать какой-то алгоритм альпинизма, чтобы найти центр.

Конечно, эти n-эллипсы не обязательно являются кругами, поэтому просто выбор точки, ближайшей к центру, может не работать, но может быть хорошим приближением.

Возможно, вы выполнили некоторую предварительную обработку по 20 пунктам (если они исправлены), чтобы найти хорошую схему разбиения (на основе вышеуказанной информации).

Надеюсь, что это поможет.

Ответ 2

Если вы хотите минимизировать сумму квадратов расстояний (а не сумму расстояний), то точка, которая минимизирует эту сумму, является средним для точек в X.

Доказательство:

sum(squares of distances) = (x-x0)^2 + (y-y0)^2 + (x-x1)^2 + (y-y1)^2 + ... 

d/dx sum(squares of distances) = 2(x-x0) + 2(x-x1) + ... = 2(Nx - x0 - x1 - ...)

сумма минимизируется, когда производная равна нулю, что происходит при Nx = x0+x1+..., поэтому x = (x0+x1+...)/N

Производная симметрична вокруг этой точки, а функция квадратична, поэтому я уверен, что самая близкая точка в Y к этой средней точке является лучшей.

Сведение к минимуму расстояний сложнее, но я подозреваю, что тот же алгоритм с большей свободой в наборе Ys, который вы тестируете, также будет работать.

Ответ 3

Поскольку вы хотите минимальную сумму расстояний, я считаю, что вы можете уменьшить множество точек X до своего пространственного среднего. Затем вы можете использовать KDTree или какое-то дерево пространственного разбиения, чтобы найти точку в Y, ближайшую к пространственному среднему X. Использование дерева пространственных разделов может сохранить хороший бит работы по сравнению с проверкой всех возможных точек.

Ответ 4

Извините меня за предложение грубой силы. Как ставится вопрос, мы не знаем, где X, Y лежат. Пусть X - 30 точек, Y - 1000 точек. Тогда для каждой точки Y сумм 30 расстояний. Всего 30000 расчетов, выполненных в одно мгновение. Это гарантирует минимум. Поиск некоторого "центра" X и выбор ближайшего Y будет только приближенным решением.

Более интересный вопрос заключается в том, чтобы найти такую ​​точку только для X. игнорировать Y. Только для X трех точек точка Ферма-Торичелли решает проблему.