Для двух наборов и каждый из которых содержит непересекающихся точек на плоскости, вычисляется кратчайшее расстояние между точкой в и точкой в , т. Е. .
Я не уверен, прав ли я, но эта проблема очень похожа на проблемы, которые можно решить с помощью линейного программирования в вычислительной геометрии. Однако сокращение до LP не является простым. Также моя проблема выглядит связанной с нахождением тончайшего условия между двумя наборами точек, которое, очевидно, может быть решено с помощью LP в в 2-мерном пространстве.
Ответы:
У меня есть решение, которое может показаться немного запутанным, но должно быть более эффективным, чем наивный перебор:O(n2)
Остальное в псевдокоде, чтобы было понятнее:
То есть, предварительно отсортировав точки вдоль , вы можете отфильтровать пары, которые никогда не будут находиться в пределах друг от друга, поскольку вдоль всегда будет,v d bk−aj v ≤∥bk−aj∥
В худшем случае это все еще , но если и хорошо разделены, это должно быть намного быстрее, чем это, но не лучше, чем , что требуется для сортировки.O(n2) A B O(nlogn)
Обновить
Это решение ни в коем случае не вытащено из шляпы. Это особый случай того, что я использую при моделировании частиц, чтобы найти все взаимодействующие пары частиц с пространственным биннингом. Моя собственная работа, объясняющая более общую проблему, здесь .
Что касается предложения использовать модифицированный алгоритм строчной развертки, хотя и интуитивно простое, я не уверен, что это в когда рассматриваются непересекающиеся множества. То же самое касается рандомизированного алгоритма Рабина.O(nlogn)
Похоже, не так много литературы, посвященной проблеме ближайших пар в непересекающихся множествах, но я нашел это , которое не претендует на то, что находится под , и это , что не кажется делать какие-либо претензии о чем-либо.O(n2)
Вышеприведенный алгоритм можно рассматривать как вариант развертки плоскости, предложенный в первой статье (Шань, Чжан и Зальцберг), однако вместо использования оси и отсутствия сортировки используется ось между наборами и обходы множеств в порядке убывания / возрастания.x
источник
Вы можете адаптировать алгоритм перестановки строк "ближайшая пара" , который является .O(nlogn)
Единственное изменение, которое вам нужно будет сделать, это игнорировать пары, которые принадлежат одному и тому же набору.
Изменить: это на самом деле не просто (или даже возможно), как я описал. Смотрите комментарии для обсуждения.
источник
Идея в таких задачах состоит в том, чтобы создать упорядоченную структуру из одного из наборов, которая позволяет эффективные запросы ближайшего соседа. Классическая статья, в которой была представлена структура запроса O (log n) для произвольного измерения:
Шамос и Хой о решениях Вороного
С тех пор был создан ряд других космических перегородок, основанных на идеях тесселяций Делоне, и они также приводят к различным описаниям подпространственной развертки. Обратите внимание, что метод Вороного также подпадает под общее описание «разделяй и властвуй» из-за его плоского разбиения, которое делает этап построения O (n log n).
Итак, основное решение этой проблемы:
Как видно из сложности каждого шага, общая сложность составляет O (n log n). Для современного читателя, не смотрящего на классические статьи, это описано во многих книгах по алгоритмам, например, "Руководство по разработке алгоритмов" Скиены.
источник
Нижняя граница для этой задачи - в алгебраической модели дерева решений. Я приведу примерный набросок его доказательства здесь.O(n∗logn)
Мы сократим случай проблемы отличимости элементов E до C.
Мы знаем, что нижняя граница времени выполнения для решения проблемы отличимости элементов . Следовательно, при уменьшении нижняя граница также относится к нашей проблеме.O(n∗logn)
источник