Знайти найкоротшу парну відстань точок у o (n log n)?


11

Студентам, яких я керував, було проведено наступну вправу:

Давши n точок у площині, розробіть алгоритм, який знаходить пару точок, відстань яких мінімальна серед усіх пар точок. Алгоритм повинен працювати в часі o(n2) .

Існує (відносно) простий алгоритм поділу і підкорення, який вирішує задачу в часі Θ(nlogn) .

Запитання 1 : Чи існує алгоритм, який точно вирішує задану проблему в гіршому випадку o(nlogn) ?

Що змусило мене підозрювати, що це може бути можливим - це результат, який я пам’ятаю, що бачив у деяких розмовах (посилання оцінене). Він визначав щось по лініях, що не більше постійного числа cN точок можна розташувати в площині навколо деякої точки p всередині кола радіусом rR , з r мінімальна відстань між будь-якими двома залученими точками . Я думаю, що c=7 , точки, що утворюють рівносторонній шестикутник з p в центрі (в крайньому випадку).

У такому випадку наступний алгоритм повинен вирішити їх задачу за n ять кроків.

fun mindist [] | p::[] = INFINITY
|   mindist p1::p1::[] = dist(P[0], P[1])
|   mindist p::r = let m = mindist(r) in
                     min(m, nextNeighbour(p, r, m))
                   end

Зауважте, що це (стверджується, що) у лінійному часі, оскільки лише постійна кількість точок у не rможе бути далекішою mвід p(припускаючи вищевикладене твердження); лише ці пункти повинні бути досліджені для пошуку нового мінімуму. Звісно, ​​є улов; як ви реалізуєте nextNeighbour(можливо, з попередньою обробкою в лінійний час)?

Питання 2 : Нехай безліч точок і точка р R . Нехай m R зRpRmR

mmin{dist(p1,p2)p1,p2R}

і

Rp,m:={ppRdist(p,p)m} .

Припустимо, що є кінцевим. Чи можна знайти з мінімальною відстані від за (амортизованим) часом ? (Ви можете припустити, що побудований, додаючи досліджувані точки одна за одною.) p R p , m p O ( 1 ) R pRp,mpRp,mpO(1)Rp


2
Я б запропонував здійснити пошук за ключовою фразою "найближча пара".
Йосіо Окамото

Це вже всі стандартні речі, дивіться перші два розділи тут: goo.gl/pLiEO
Хар-Пелед

Пс. Якщо ви хочете очікуваного часу, то ви можете навіть обчислити триангуляцію Делоне, яка містить мінімальну відстань.
domotorp

Після питання 1 ви пишете, що "не більше постійної кількості точок можна розташувати в площині навколо деякої точки p всередині кола радіусом r, при r мінімальна відстань між p та будь-якою іншою точкою". Це, звичайно, не відповідає дійсності: Ви можете взяти будь-яку кількість точок на колі радіуса r. Ваше твердження вірно, якщо r мінімальна відстань між будь-якими двома точками, і в цьому випадку доказ досить простий.
domotorp

Перше питання - це матеріали з підручників, як уже зазначалося: точно не рівень досліджень. я не розумію друге питання: для будь-якого , то ви просите або не існує , або є найближчим сусідом в . так чим це відрізняється від питання 1? над чим ви амортизуєте (тобто якщо це питання структури даних, що таке оновлення та запити)? p p RmppR
Сашо Ніколов

Відповіді:


12

Неможливо вирішити проблему за менший час, ніж у стандартних моделях, наприклад, використовуючи алгебраїчні дерева рішень. Це випливає з роботи Яо та Бен-Ор, що показує, що в цій моделі неможливо вирішити, чи всі набори вхідних чисел різняться чи ні (див. Http://people.bath.ac.uk/masnnv /Teaching/AAlg11_8.pdf ). У випадку вашої проблеми, уявіть, що всі вони перебувають на реальній лінії. Якщо дві точки однакові, то ваш вихід буде двома пунктами з нульовою відстані, тоді як в іншому випадку - ні, тому рішення вашої проблеми також вирішить проблему ДИСТАНЦІЙНІ НОМЕРИ. Якщо ви хочете припустити, що всі ваші точки відрізняються, просто додайте доn i ϵ x i n ϵ 2 n ϵ Ω ( n log n )cnlognniϵxiвходи проблеми DISTINCT NUMBERS; у цьому випадку якщо ваш вихід не більше , то цифри не всі відрізняються. (Хоча в цьому випадку вам потрібно використовувати версію з обіцянками, коли різниця будь-яких двох чітких чисел становить щонайменше , але я думаю, що те саме підтвердження працює, щоб показати, що вам також потрібно у цьому випадок.)nϵ2nϵΩ(nlogn)


Справді, дякую. Це також відповідає на питання 2 (негативно).
Рафаель

Проблема, яку ви згадуєте, очевидно також відома як проблема розрізненості елементів .
Рафаель

Посилання @Sariel Har-Peled ( goo.gl/pLiEO ) представляє практичний алгоритм лінійного часу для пошуку найближчої пари. Цей документ безпосередньо стосується цього аргументу і пояснює, що він не застосовується, оскільки алгоритм використовує більш потужну модель обчислення.
Кевін Клайн

1
Так, але питання спеціально задало найгірший час роботи. Але я згоден, що всі мої спостереження фігурують уже в тези Саріеля.
домоторп


0

Наскільки я розумію питання 2, алгоритм Рабіна також дає відповідь на це. На кожному етапі структура даних - це сітка з шириною комірки, меншою за найменшу відстань між парами точок, що бачились дотепер, поділена на (так що жодна комірка не містить більше однієї точки). Щоб відповісти на запитання у питанні 2, вам потрібно лише зіставити до комірки в сітці та переглянути постійну кількість комірок навколо неї. Аналіз алгоритму, якщо набір точок введення досліджується у випадковому порядку, то амортизований час оновлення для сітки становить на нову точку очікування. pO(1)2pO(1)


До речі, я маю на увазі не версію алгоритму, як описує її Ліптон, а як це описано в першому коментарі (і в книзі Кляйнберга і Тардоса).
Сашо Ніколов

Лише в очікуванні див. Відповідь домоторпса.
Рафаель

я ніде не бачу, щоб ви хотіли обмежитися детермінованими алгоритмами. Алгоритм Рабіна цікавий саме тим, що він обходить нижні межі дерева рішень (це схоже на нижчі межі для порівняння сортування проти алгоритмів сортування цілих чисел). btw, мабуть, більше, ніж Рабін використовує, щоб обійти нижню межу, а саме хеш-трюк, який використовується для доступу до мережі
Сашо Ніколов,

4
Перегляньте "більше, що використовує Рабін": також можливість округлення вхідних цифр до цілих чисел. Потрібно бути дуже обережним з цим: якщо ви створили модель обчислення, в якій можна робити стандартні арифметичні операції та округлення за реальними числами, все в постійному часі на одну операцію, тоді можна вирішити завдання, повні PSPACE, у поліноміальний час у цій моделі. Але Рабін лише округляє вхідні цифри (з різним рівнем точності в різних ітераціях), і ця описана форма округлення не є проблемою.
Девід Еппштейн

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