Максимальне оточуюче коло заданого радіуса


19

Я намагаюся знайти підхід до наступної проблеми:

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

Спочатку здавалося, що це щось подібне до найменшої проблеми кола, що вкладається, що легко вирішити в . Ідея полягала в тому , щоб встановити довільний центр і огинають всі крапки S . Далі крок за кроком замініть коло, щоб торкнутися лівої / правої крапки і зменшити коло до заданого радіуса, очевидно, це не спрацює.O(n2)S

Відповіді:


7

Я не знаю, як вирішити цю проблему за час , але алгоритм O ( n 2 log n ) існує.О(н2)О(н2журналн)

Нехай - коло, центром якого є s i , i - я точка, радіусом r . Це не важко знайти , що безліч точок Р = { р 0 , р 1 , ... , р т } можуть бути укладені в окружності з радіусом г , тоді і тільки тоді перетин I ( Р ) з С ( р 0 ) , С ( р 1 ) , С(сi)сiirП={p0,p1,,pм}rЯ(П) не порожній. Більше того, якщо I ( P ) не порожній, у I ( P ) повинні бути деякі точки, щолежать на деякому bd C ( p i ) (межа C ( p i ) ). Тож для кожного C ( s i ) та кожної точки p на його облігації ми намагаємось знайти, скільки кіл містить p . Максимальна кількість серед усіх p буде відповіддю на цю проблему.С(p0),С(p1),,С(pм)Я(П)Я(П)бдС(pi)С(pi)С(сi)ppp

Розберемо точки в . Існує відображення один на один між точками на bd C ( s i ) і реальним числом в [ 0 , 2 π ) . Для кожного кола C ( s j ) перетин між C ( s j ) та bd C ( s i ) можна представити інтервалом [ b e g i n jбдС(сi)бдС(сi)[0,2π)С(сj)С(сj)бдС(сi) . Отже, для всіх кіл, окрім C ( s i ) , існує максимум n - 1 інтервалів (деякі кола можуть не перетинатися з C ( s i ) ). Максимальне число можна легко знайти, відсортувавши всі 2 ( n - 1 ) кінцеві точки інтервалу, скануючи їх у порядку та підрахувавши поточне число, що перекривається. Для кожного C ( s i ) цей крок можна зробити в O ( n log n[бегiнj,енгj]С(сi)н-1С(сi)2(н-1)С(сi) час, і є n таких кіл, тому складність часу цього алгоритму становить O ( n 2 log n ) .О(нжурналн)нО(н2журналн)


2
Розташування кіл може бути побудовано за час (з великою ймовірністю), використовуючи стандартний рандомізований алгоритм нарощення. Насправді час виконання - O ( n log n + k ) , де k - кількість пар кіл, які перетинаються. Дивіться улюблений підручник з обчислювальної геометрії. О(н2)О(нжурналн+к)к
JeffE

2

Я думаю, що складні питання - це знати, чи вибране вами коло насправді є "максимальним" у межах набору. Єдиний спосіб, яким я можу визначити це, - спробувати всі можливі комбінації точок і перевірити розмір кола, що їх охоплює.

Ви можете зменшити простір пошуку, попередньо розділивши простір точки на сітку квадратних комірок шириною 2r. Потім знайдіть клітинку з найбільшою щільністю. Оскільки ви вже знаходили одне коло з X точок, ви можете зробити висновок, що якщо коло існує з більшою кількістю точок, то в ньому повинно бути принаймні X точок. І використовуйте це як вихідну точку для тестування різних комбінацій точок.

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

Сказавши це, обидва "зменшення" можуть провалитися, і в гіршому випадку ви будете обчислювати кола для всіх можливих комбінацій точок.


1

У Chazelle, B .; Лі, стаття DT Computing 36, 1-16 (1986), теорема 3 на сторінці 15, стверджує, що максимальний алгоритм пошуку кола, що охоплює, займає витрати часу на .О(н2)

Я думаю, що ключовим є все-таки алгоритм побудови графіка перетину про який згадується рано (або див. Edelsbrunner, H. (1987), Алгоритми комбінаторної геометрії, розділ 7). Після цього знаходження кола maximun, що охоплює, повинно бути прямим.О(н2)

Мабуть, ця проблема є рівнозначною для пошуку точки, охопленої максимальною кількістю заданих кіл, і легко дізнатися , що кандидатами слід вважати лише ті, здебільшого точки, пересічені даними n колами. (Це також веде O ( п 2 л ущільнювального г ( п ) ) алгоритм безпосередньо)2н2О(н2лог(н))

О(н2)О(н2)

V+Е-Ж=2О(н2)


Якщо це потрібно читати як доповнення до прийнятої відповіді, і чи не слід його читати самостійно (чого я не знаю, оскільки я не знаю цієї теми), ви повинні бути чітко про це.
бабу
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.