2015-09-20 2 views
0

У меня есть набор двумерных точек/координат, и мне нужно, чтобы между всеми парами точек было соблюдено определенное минимальное расстояние. Кроме того, каждая точка связана с некоторой информацией, которую я хотел бы поддерживать, возможно, слияние этой информации с другой информацией, содержащейся в других точках.Алгоритм для синтеза набора двумерных точек

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

Я не могу придумать алгоритм или метод, который решает эту проблему в любой временной стоимости.

Любая помощь будет оценена по достоинству.

+0

Ваш вопрос непонятен. Можете ли вы продемонстрировать пример и что вы пробовали? – barak1412

+0

@ barak1412 Я отредактировал описание, теперь ясно? – manelmc

+0

Возможно, кластеризация 2D-точек - это то, что вы ищете. (https://en.wikipedia.org/wiki/Cluster_analysis) – barak1412

ответ

1

Наивное решение - не быстро (O (n³)), но, возможно, вы начали:

  1. Найти минимальное расстояние между любыми двумя точками, то есть пары точек, которые во всем мире имеют минимальное расстояние (O (n²))
  2. Если расстояние больше необходимого минимума, вы сделали
  3. Объединить две точки и начать на 1.

это объединяет пункты, которые наиболее близко друг к другу один от на e используйте алгоритм грубой силы до тех пор, пока не будет достигнуто минимальное расстояние.

P.S .: Как отмечает @Yyes Dauous в комментариях, закрывающая пара может быть найдена в O (n log n), как описано, например, в соответствующей статье Википедии (которая включает в себя некоторое обсуждение динамических аспектов, которые могут быть здесь полезны): https://en.wikipedia.org/wiki/Closest_pair_of_points_problem

+0

Спасибо, Стефан, Это начало. Посмотрим, как он реагирует. – manelmc

+1

Проблема пары ближайших точек решена во времени 'O (N Log (N))'. Слияние точек превращает его в динамический экземпляр проблемы. Я не удивлюсь, что следующие запросы могут быть выполнены вовремя «O (Log (N))» или так, что приводит к гораздо большей сложности, чем «O (N³)». –

+1

Дерево k-d - это вариант здесь. O (N log N) для сборки. O (log N), чтобы найти ближайшего соседа O (log N), чтобы удалить точку. Используйте приоритетную очередь для определения следующих двух ближайших точек. – Nuclearman

Смежные вопросы