Перевірка того, чи множина n точок у площині утворює опуклий n багатокутник за o (nlogn) часу


13

Припустимо, що вам дано набір n площин у площині, і ви хочете перевірити, чи утворюють вони опуклий n багатокутник, тобто чи всі вони лежать на опуклому корпусі. Мені було цікаво, чи хтось знає, як це зробити в o (nlogn) час, тобто без обчислення СН.


Ви можете обчислити опуклий корпус за час O (n log n). Ви маєте на увазі, чи можливо це зробити за менший час, ніж це?
Per Vognsen

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

4
Він написав o (nlogn) не O (nlogn), тому його питання правильне.
Шива Кінталі

1
Я використовую маленьку нотацію, тому питання як і раніше є
Babis Tsourakakis,

4
Змушує мене трохи нахмуритися, побачивши сортування чисел (або еквівалентно опуклих корпусів декартових точок), зазначених як взяття Θ (n log n) часу, без явного твердження про те, яку модель обчислень ви використовуєте. Порівняння сортування займає Θ (n log n) час, але модель порівняння навіть не дозволяє обчислювати корпуси. Вони обидва ще Θ (n log n) час для алгебраїчних дерев рішень (як свідчить прийнята відповідь), але швидше в моделях обчислень, які більше нагадують фактичні комп'ютери.
Девід Еппштейн

Відповіді:


17

Це здається малоймовірним, принаймні, у моделях дерев порівняння / алгебраїки. Визначення спочатку:

Точка безліч знаходиться в опуклому положенні , якщо ні одна точка не може бути записана у вигляді випуклої комбінації інших точок .P PPPP

Тепер, вирішивши, чи множина Ω ( n log n ) n X P = { ( x , x 2 ) | x X } .n чисел різним, займає час (це відомо як УНІКАЛЬНІСТЬ). Враховуючи такий набір з чисел , віднесіть їх до безлічі точок Якщо повторного числа немає, то точки знаходяться у випуклій позиції.Ω(nlogn)nX

P={(x,x2)|xX}.

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

А саме, вирішити, чи встановлений точку у випуклій позиції, настільки ж важко, як і НЕУПРАВЛІСТЬ.


12
Існує варіант цього зменшення, який не дає повторюваних балів. Нехай X [1..n] - набір цілих чисел; перевірка того, чи всі елементи X відрізняються, все ще вимагає часу Ω (n log n) в алгебраїчній дереві рішення рішень. Тепер замініть кожне ціле число X[i](X[i],X[i]2+i/n2)

1
@Babis: Скорочення Джеффа працює, коли повторювані точки не дозволені. Точки, згенеровані зменшенням, є унікальними незалежно від того, який початковий масив.
Vinayak Pathak

Таким чином ми отримуємо, що кількість кутів опуклого корпусу дорівнює n тоді і тільки тоді, коли жодна дві точки не мають однакової x-координати. Велике спасибі, спочатку я думав, що це має бути простіше, ніж сортування.
Babis Tsourakakis

Дякую Віняк, я не бачив скорочення Джеффа, оскільки він був опублікований в той же час, коли я писав попередній коментар, який я замінив вище
Babis Tsourakakis

2
Суреш, я не згоден із фразою "стандартна модель". Саме це і є RAM Word :) Це саме модель, яка найбільше відповідає справжньому комп'ютеру, і яку ми використовуємо для аналізу алгоритму в більшості TCS. Геометрія висловила виняток для використання реальної оперативної пам’яті, так що нам не потрібно мати справу з питаннями точності. Але це не "стандартна модель".
Міхай

-1

O(nlogn)

Як тільки ви знаєте порядок точок, кут від кожної точки до наступної точки в послідовності повинен бути монотонним. Це формує необхідну умову і, я думаю, достатню.

Отримання внутрішньої точки залишається як вправа для читача.


O(nlogn)


Ви, мабуть, неправильно прочитали його o (n log n) як O (n log n) так само, як я. У будь-якому випадку, алгоритм, який ви окреслили, - це упаковка подарунків у ембріональній формі. Вам не потрібно використовувати точку інтер’єру; Ви можете використовувати точку на межі, наприклад, точку з мінімальною координатою x.
Per Vognsen

O(nlogn)o()
BCS

Справа в тому, що існує велика кількість алгоритмів опуклих корпусів, які працюють в O (n log n). Ваш алгоритм - це, звичайно, старе упаковка подарунків. Він просив щось швидше, наприклад, лінійний час. Дивіться інші відповіді.
Per Vognsen

1
Щодо редагування, якщо ви зможете подивитися на прийняту відповідь вище своєї, ви побачите, що проблема еквівалентна унікальності елемента, який має нижню межу O (n log n).
Per Vognsen

2
@BCS: Я боюся, що у вас є якісь непорозуміння щодо відповіді Саріель Хар-Пелед. Зниження - від унікальності до тестування опуклою позицією, а не іншого напрямку. Тобто, Саріель (і JeffE) зазначили, що якщо вам надають набір чисел і хочете перевірити унікальність, ви можете перетворити його в набір точок і використовувати будь-який алгоритм для тестування опуклої позиції.
Цуйосі Іто
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.