Нахождение ближайшей точки из набора точек на плоскости - PullRequest
12 голосов
/ 07 декабря 2009

Учитывая n точек на двумерной плоскости, что это за точка, чтобы расстояние от всех точек было минимальным? Эта точка не должна быть из набора заданных точек. Это центроид или что-то еще?

Как найти все такие точки (если их больше одного) с помощью алгоритма?

Ответы [ 4 ]

5 голосов
/ 07 декабря 2009

Это называется «Центром расстояния» и отличается от центроида.

Сначала вы должны определить, какую меру расстояния вы используете. Если мы предполагаем, что вы используете стандартную метрику d = sqrt ((x1-x2) ^ 2 + (y1-y2) ^ 2), то она не уникальна, и проблема сводит к минимуму эту сумму.

Самый простой пример, показывающий, что ответ не уникален, это пример с прямой линией. Любая точка между двумя точками имеет одинаковое общее расстояние от всех точек.

В 1D правильным ответом будет любой ответ, имеющий одинаковое количество точек справа и слева. Пока это верно, то любое движение влево и вправо будет увеличивать и уменьшать левую и правую стороны на одинаковую величину, и, следовательно, оставлять расстояние одинаковым. Это также доказывает, что центроид не обязательно правильный ответ.

Если мы перейдем к 2D, это уже не так - поскольку sqrt делает проблему взвешенной. Удивительно для меня, кажется, нет стандартного алгоритма! Страница здесь , кажется, использует метод грубой силы. Я никогда этого не знал!

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

3 голосов
/ 07 декабря 2009

Может быть более одной точки. Рассмотрим плоскость с двумя точками. Эти точки описывают отрезок. Любая точка на этом отрезке будет иметь одинаковое общее расстояние от двух конечных точек.

0 голосов
/ 07 декабря 2009

Это подробно обсуждается здесь http://www.ddj.com/architect/184405252?pgno=1

0 голосов
/ 07 декабря 2009

Алгоритм грубой силы. может дать вам лучшие результаты. Во-первых, найдите прямоугольник / любой четырехугольник, ограничивающий входные точки. Наконец, для каждой точки внутри прямоугольника вычислите расстояние от других точек. Суммируйте расстояния точки от входного набора. Скажи, что это «стоимость» точки. Повторите для каждой точки и выберите точку с мин. стоимость.

Интеллект также может быть добавлен к алгоритму. это может устранить области, основанные на средней стоимости, и т.д ...

Вот как бы я подошел к проблеме хотя бы ... надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...