Для установки нажмите кнопочку Установить расширение. И это всё.

Исходный код расширения WIKI 2 регулярно проверяется специалистами Mozilla Foundation, Google и Apple. Вы также можете это сделать в любой момент.

4,5
Келли Слэйтон
Мои поздравления с отличным проектом... что за великолепная идея!
Александр Григорьевский
Я использую WIKI 2 каждый день
и почти забыл как выглядит оригинальная Википедия.
Статистика
На русском, статей
Улучшено за 24 ч.
Добавлено за 24 ч.
Что мы делаем. Каждая страница проходит через несколько сотен совершенствующих техник. Совершенно та же Википедия. Только лучше.
.
Лео
Ньютон
Яркие
Мягкие

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

Из Википедии — свободной энциклопедии

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

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

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

Наивный алгоритм нахождения расстояний между всеми парами в пространстве размерности d и выбора среди них наименьшего требует времени O(n2). Оказывается, что задача может быть решена за время в евклидовом пространстве или Lp пространстве фиксированной размерности d[2]. В модели вычислений алгебраического дерева решений[en] алгоритм со временем O(n log n) оптимален при сведении от задачи единственности элемента[en]. В вычислительной модели, в которой принимается, что функция floor[en] вычисляема за постоянное время, задача может быть решена за время [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.

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

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

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

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

См. также

Примечания

  1. 1 2 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 сентября 2011). Дата обращения: 19 февраля 2019. Архивировано 16 февраля 2019 года.
  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.
  • Jon Kleinberg, Éva Tardos. Algorithm Design. — Addison Wesley, 2006.
  • 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
Эта страница в последний раз была отредактирована 16 сентября 2023 в 12:04.
Как только страница обновилась в Википедии она обновляется в Вики 2.
Обычно почти сразу, изредка в течении часа.
Основа этой страницы находится в Википедии. Текст доступен по лицензии CC BY-SA 3.0 Unported License. Нетекстовые медиаданные доступны под собственными лицензиями. Wikipedia® — зарегистрированный товарный знак организации Wikimedia Foundation, Inc. WIKI 2 является независимой компанией и не аффилирована с Фондом Викимедиа (Wikimedia Foundation).