Максимальный охватывающий круг заданного радиуса

19

Я пытаюсь найти подход к следующей проблеме:

По заданному набору точек и радиусу найдите центральную точку окружности, чтобы в окружности было максимальное количество точек из множества. Время работы должно быть .r O ( n 2 )SrO(n2)

Сначала это казалось чем-то похожим на проблему наименьшего окружающего круга, которую легко решить в . Идея состояла в том , чтобы установить произвольный центр и огибают все точки . Затем, шаг за шагом, замените круг, чтобы коснуться левой / правой точек и сожмите круг до заданного радиуса, очевидно, это не сработает.SO(n2)S

ком
источник

Ответы:

7

Я не знаю, как решить эту проблему за времени, но алгоритм существует.O ( n 2 log n )O(n2)O(n2logn)

Пусть - окружность, центр которой - , точка с радиусом . Нетрудно обнаружить, что множество точек может быть окружено окружностью с радиусом если пересечение с не является пустым. Более того, если не пусто, в некоторой (границе ) должны быть некоторые точки в ). Таким образом, для каждого C (s_i) и каждой точки p на его бондарности мы пытаемся найти, сколько кругов содержитs i i r P = { p 0 , p 1 , , p m } r I ( P ) C ( p 0 ) , C ( p 1 ) , , C ( p m ) I ( P ) I ( P ) bd C ( p i )C(si)siirP={p0,p1,,pm}rI(P)C(p0),C(p1),,C(pm)I(P)I(P)bdC(pi)C ( s i ) p pC(pi)C(si)pp . Максимальное количество среди всех p будет ответом на эту проблему.

Давайте рассмотрим точки в . Существует взаимно-однозначное соответствие между точками на и действительным числом в . Для каждого круга пересечение между и может быть представлено интервалом . Таким образом, для всех кругов, кроме , существует не более интервалов (некоторые круги могут не пересекаться с ). Максимальное количество может быть легко найдено путем сортировки всех конечных точек интервала, сканирования их по порядку и подсчета текущего числа с перекрытием. Для каждогоbd C ( s i ) [ 0 , 2 π ) C ( s j ) C ( s j ) bd C ( s i ) [ b e g i n j , e n d j ] C ( s) i ) n - 1 C ( s i ) 2bdC(si)bdC(si)[0,2π)C(sj)C(sj)bdC(si)[beginj,endj]C(si)n1C(si)2(n1)C(si) , этот шаг может быть выполнен за времени, и существует таких кругов, поэтому временная сложность этого алгоритма составляет .O(nlogn)nO(n2logn)

У Инь
источник
2
Расположение окружностей может быть построено за времени (с высокой вероятностью), используя стандартный рандомизированный инкрементный алгоритм. Фактически, время выполнения , где - количество пар пересекающихся окружностей. Смотрите ваш любимый учебник по вычислительной геометрии. O(n2)O(nlogn+k)k
Джефф
2

Я думаю, что трудным вопросом является знание, является ли выбранный вами круг «максимальным» в наборе. Единственный способ определить это - попробовать все возможные комбинации точек и проверить размер окружности, которая их охватывает.

Вы можете уменьшить пространство поиска, сначала разделив пространство точек на сетку квадратных ячеек шириной 2r. Затем найдите ячейку с наибольшей плотностью. Поскольку вы уже нашли один круг из X точек, вы можете сделать вывод, что если круг существует с большим количеством точек, то в нем должно быть как минимум X точек. И используйте это как отправную точку для тестирования различных комбинаций точек.

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

Сказав это, оба «сокращения» могут потерпеть неудачу, и в худшем случае вы будете вычислять круги для всех возможных комбинаций точек.

putnampp
источник
1

В Chazelle, B .; Lee, в статье DT Computing 36, 1-16 (1986), теорема 3 на стр. 15, говорится, что алгоритм поиска максимального окружающего круга требует временных затрат.O(n2)

Я думаю, что ключом по-прежнему является алгоритм построения графа пересечений он упоминает ранее (или см. Edelsbrunner, H. (1987), Algorithms in Combinatorial Geometry, глава 7). После этого поиск максимального круга должен быть простым.O(n2)

По-видимому, эта задача эквивалентна нахождению точки, покрытой максимальным количеством заданных окружностей, и легко узнать, что только те точки, которые пересекаются заданными n окружностями, должны рассматриваться как кандидаты. (Это также приводит к алгоритму напрямую)2n2O(n2log(n))

Однако, используя вышеупомянутый алгоритм построения , он также приводит алгоритм для этой задачи. Потому что граф пересечений, построенный с вершинами в качестве точек пересечения и ребрами в виде дуг, является планарным графом Эйлера. Таким образом, можно просто пройти все дуги через цикл Эйлера и порядок дуг, проиндексированных по индексам окружностей, к которым он принадлежит, и информацию о том, является ли какая-либо дуга «уходящей дугой» (изогнутой назад) или «входящей в дугу» ( кривая вперед) для встреченной вершины, на которую падает эта дуга, будет записано.O(n2)O(n2)

По теореме Джордана вершина пересечения окружена окружностью только в том случае, если она сначала встречает «уходящую дугу», принадлежащую этому кругу, или имеет падающую дугу, принадлежащую этому кругу. Таким образом, после всего путешествия можно легко найти максимальный окружающий круг. Это аналогично случаю определения времен покрытия для точек с упорядоченными интервалами вдоль прямой линии (или т. Е. Одномерной версии этой охватывающей задачи), за исключением того, что порядок уже задан путём перемещения. В то время как по формуле Эйлера для плоского графа, общее количество дуг является линейным с количеством вершин, и, поскольку нет необходимости снова записывать связанную информацию при возвращении к уже посещенным вершинам путем рукопожатия лемма, общая стоимость времени будет O ( nV+EF=2 .O(n2)

stack99
источник
Если это должно быть прочитано как дополнение к принятому ответу, и не должно быть прочитано само по себе (что я не знаю, так как я не знаю этой темы), вы должны быть откровенными об этом.
Бабу