Алгоритм для 2-D ближайших координат - PullRequest
1 голос
/ 23 апреля 2011

Я знаю, что делаю это неправильно, но не могу придумать правильный способ решения этой проблемы.Я работаю с 12 пунктами, перечисленными ниже.(1,2) (1,11) (7,8) (9,9) (12,13), (13,4), (20,8), (22,3), (23,12),(24,14), (26,7), (31,10)

Я делю это на два подмножества

Влево = (1,2) (1,11) (7,8) (9,9) (12,13), (13,4)

Вправо = (20,8), (22,3), (23,12), (24,14),(26,7), (31,10)

Дальнейшее сокращение

LLeft = (1,2) (1,11) (7,8)

RLeft= (9,9) (12,13), (13,4)

LRight = (20,8), (22,3), (23,12)

RRight =(24,14), (26,7), (31,10)

Найдите минимальное расстояние на каждом наборе.

LLeft (1,2) (1,11) - 9, (1,11) (7,8) - 6,7, (1,2) (7,8) - 8,48

Мин. 6,7

RLeft (9,9) (12,3) - 6,70, (9,9) (13,4) - 6,4, (12,3) (13,4) - 1,14

Мин. 1,14

LRight (20,8) (22,3) - 5,38 (20,8) (23,2) - 5, (22,3) (23,12) - 9,05

Мин. 5

ПРАВО (24,14) (26,7) - 7,28 (24,14) (31,10) - 8,06 (26,7)(31,10) - 5,83

Минимум - 5,83

Так что теперь у меня есть LLeft, RLeft, LRight и RRight.То, что мне нужно найти, это LRLeft, RLLEft_Right (значение в середине) и LRRight. Вот где я запутался.Единственный способ получить LRLeft - это взять каждую точку в LLeft и RLEft и найти расстояние между ними.Затем используйте это расстояние и сравните его с LLeft и RLeft, и это даст мне кратчайшее расстояние между двумя точками для левой стороны.Тогда я делаю то же самое для правого и центра.Я уверен, что есть более быстрый и лучший способ сделать это, но я не могу понять это.

1 Ответ

3 голосов
/ 24 апреля 2011

Вы должны взглянуть на http://en.wikipedia.org/wiki/Closest_pair_of_points_problem#Planar_case

Вот лучший ресурс для шага 4 , но для начала: В рекурсии, если у нас уже есть минимальные расстояния d1 и d2 в левом и правом наборах соответственно, затем , если есть более близкая пара точек - где одна слева и одна справа, то нам нужно только проверить точкина расстоянии d от разделительной линии, где d = min(d1,d2).

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