Задача о паре ближайших точек

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

Пара ближайших точек выделена красным цветом

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

Наивный алгоритм нахождения расстояний между всеми парами в пространстве размерности d и выбора среди них наименьшего требует времени O(n2). Оказывается, что задача может быть решена за время в евклидовом пространстве или Lp пространстве фиксированной размерности d[2]. В модели вычислений алгебраического дерева решений алгоритм со временем O(n log n) оптимален при сведении от задачи единственности элемента. В вычислительной модели, в которой принимается, что функция floor вычисляема за постоянное время, задача может быть решена за время [3]. Если мы позволяем применение рандомизации вместе с функцией floor, задача может быть решена за время O(n)[4][5].

Алгоритм полного перебора

Пара ближайших точек может быть вычислена за время O(n2) путём выполнения полного перебора. Чтобы это сделать, можно вычислить расстояние между всеми n(n − 1) / 2 парами точек, затем выбрать пару с наименьшим расстоянием, как показано ниже.

minDist = infinity
for i = 1 to length(P) - 1
 for j = i + 1 to length(P)
  let p = P[i], q = P[j]
  if dist(p, q) < minDist:
   minDist = dist(p, q)
   closestPair = (p, q)
return closestPair

Планарный случай

Задача может быть решена за время с помощью рекурсивного подхода «разделяй и властвуй», например, так[1]:

  1. Сортируем точки согласно их x-координатам;
  2. Разбиваем множество точек на два подмножества равного размера вертикальной прямой ;
  3. Решаем задачу рекурсивно на левой и на правой частях. Это приводит к левому минимальному расстоянию и правому минимальному расстоянию , соответственно;
  4. Находим минимальное расстояние среди пар точек, из которых одна точка лежит слева от вертикальной линии, а другая точка лежит справа от прямой;
  5. Конечным ответом будет минимальное значение среди , и .
Разделяй и властвуй: наблюдение разреженных прямоугольников

Оказывается, что шаг 4 может быть выполнен за линейное время. Снова, наивный подход потребовал бы вычисление расстояний для всех пар слева/справа, то есть квадратичное время. Ключевое наблюдение основывается на следующем свойстве разреженности множества точек. Мы уже знаем, что пара ближайших точек не находятся на большем расстоянии, чем . Поэтому, для каждой точки p слева от разделяющей прямой мы должны сравнить расстояния до точек, которые лежат в прямоугольнике с размерами (dist, 2 ⋅ dist) как показано на рисунке. И этот прямоугольник может содержать не более шести точек, попарное расстояние между которыми не менее . Таким образом, достаточно вычислить на 4-м шаге 6n расстояний[6]. Рекуррентное отношение для числа шагов может быть записано как , которое может быть решено с помощью основной теоремы для рекурренции разделяй и властвуй, что даёт .

Так как пара ближайших точек определяют ребро в триангуляции Делоне и соответствуют двум смежным ячейкам в диаграмме Вороного, пара ближайших точек может быть определена за линейное время, если дана одна из этих двух структур. Вычисление триангуляции Делоне или диаграммы Вороного занимает время . Эти подходы не эффективны для размерностей d>2, в то время как алгоритм «разделяй и властвуй» может быть обобщён до времени выполнения для любого постоянного значения размерности d.

Динамическая задача ближайшей пары

Динамическая версия для задачи пары ближайших точек ставится следующим образом:

Если ограничивающий прямоугольник для всех точек заранее известен и доступна функция floor с постоянным временем работы, то была предложена структура данных с ожидаемой памятью O(n), которая поддерживает ожидаемое время (среднее время) вставки и удаления O(log n) и постоянное время запроса. Если задача модифицирована для модели алгебраического дерева принятия решения, вставки и удаления потребуют среднее время [7]. Следует отметить, что сложность указанной выше динамической задачи о паре ближайших точек экспоненциально зависит от размерности d, поэтому алгоритм становится менее пригодным для задач высокой размерности.

Алгоритм для динамической задачи пары ближайших точек в пространстве размерности d разработал Сергей Беспамятных в 1998 году[8]. Точки могут быть вставлены и удалены за время O(logn) на одну точку (в худшем случае).

См. также

Примечания

  1. Shamos, Hoey, 1975, с. 151—162.
  2. Clarkson, 1983.
  3. Fortune, Hopcroft, 1979, с. 20—23.
  4. Khuller, Matias, 1995, с. 34—37.
  5. Richard Lipton. Rabin Flips a Coin (24 September 2011).
  6. Cormen, Leiserson, Rivest, Stein, 2001, с. 957—961 33.4: Finding the closest pair of points..
  7. Golin, Raman, Schwarz, Smid, 1998.
  8. Bespamyatnikh, 1998, с. 175—195.

    Литература

    • Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, Clifford Stein. Introduction to Algorithms. — Second Edition. — MIT Press and McGraw-Hill, 2001. — ISBN 0-262-03293-7.
      • Перевод: Томас Кормен, Чарльз Лейзерсон, Рональд Ривест, Клиффорд Штайн. Алгоритмы: построение и анализ. — второе издание. — Москва, Санкт-Петербург, Киев: «Вильямс», 2005. — ISBN 5-8459-0857-4 ББК 32.973.26-018.2.75.
    • Jon Kleinberg, Éva Tardos. Algorithm Design. — Addison Wesley, 2006.
      • Перевод: Джон Клейнберг, Ева Тардос. Алгоритмы. Разработка и применение. — Москва, Санкт-Петербург, Нижний Новгород, Киев: Питер, 2016. — (Классика Computer Science). — ISBN 978-5-496-01545-5 ББК 32.973.2-018.
    • Michael Ian Shamos, Dan Hoey. Closest-point problems // Proc. 16th Annual IEEE Symposium on Foundations of Computer Science (FOCS). — 1975. doi:10.1109/SFCS.1975.8.
    • Fortune S., Hopcroft J.E. A note on Rabin's nearest-neighbor algorithm // Information Processing Letters. — 1979. Т. 8, вып. 1.
    • Clarkson K. L. 24th Annual Symposium on Foundations of Computer Science. — 1983.
    • Khuller S., Matias Y. A simple randomized sieve algorithm for the closest-pair problem // Inf. Comput. — 1995. Т. 118, вып. 1.
    • Mordecai Golin, Rajeev Raman, Christian Schwarz, Michiel Smid. Randomized Data Structures For The Dynamic Closest-Pair Problem // SIAM J. Comput.. — 1998. Т. 26, № 4. Предварительная версия была доложена на симпозиуме «4th Annu. ACM-SIAM Symp. on Discrete Algorithms», 1993, стр. 301—310
    • Sergey N. Bespamyatnikh. An Optimal Algorithm for Closest-Pair Maintenance // Discrete Comput. Geom. — 1998. Вып. 19.
    • UCSB Lecture Notes
    • rosettacode.org — Closest pair of points implemented in multiple programming languages
    • Line sweep algorithm for the closest pair problem
    This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.