Виявлення двох видів майже простих багатокутників


22

Мене цікавить складність вирішення питання про те, чи є даний непростий багатокутник майже простим, в будь-якому з двох різних формальних почуттів: слабко простий або несамокретний . Оскільки ці терміни не широко відомі, дозвольте розпочати з деяких визначень.

  • Pp0,p1,p2,,pn1pipipi+1modn

  • Багатокутник простий, якщо всі вершин є чіткими, а краї перетинаються лише в їх кінцевих точках. Рівнозначно, багатокутник простий, якщо він гомеоморфний колу і кожен край має позитивну довжину. Однак, як правило, вершини та краї багатокутника можуть перетинатися довільно або навіть збігатися. 1n

  • Розглянемо два полігональних шляху і , перетин яких є загальним підпутком обох (можливо, однієї точки). Ми говоримо , що і хрест , якщо їх кінцеві точки чергуються на кордоні околиці загальної подпуть . Багатокутник є самопересічним, якщо він має два перехрестя, і в протилежному випадку не перетинається . 2ABAB A(0),B(0),A(1),B(1)AB

  • Багатокутник є дуже простим, якщо це межа послідовності простих багатокутників, або рівнозначно, якщо існує довільно невелике збурення вершин, що робить багатокутник простим. Кожен слабо простий багатокутник не є самопересічним; однак деякі непересічні багатокутники не є надто простими.

Наприклад, розглянемо шість точок показаних нижче.a,b,p,q,x,y

введіть тут опис зображення

  • Багатокутник простий; дивіться ліву фігуру.abpqyz

  • Багатокутник слабо простий; на середній фігурі зображений поблизу простий багатокутник. Однак цей багатокутник не простий, оскільки він відвідує тричі.papbpqyqzqp

  • Багатокутник є самопересічним, тому що та перетинаються. Подивіться на потрібну фігуру для деякої інтуїції.b p q z y q p apapbpqzqyqbpqzyqpa

  • Нарешті, багатокутник (який два рази обертається навколо середнього багатокутника) не є самопересічним, але це не дуже просто. Інтуїтивно, номер повороту цього многокутника дорівнює , тоді як число повороту будь-якого простого многокутника повинно бути . (Офіційний доказ вимагає певного аналізу випадків, частково тому, що поворотне число насправді не визначено для полігонів з кутами !)± 2 ± 1 0 papbpqyqzqpapbpqyqzq±2±10

Оновлення (13 вересня): На малюнку нижче полігон не є самопересічним та має поворот №1 , але це не дуже просто. Полігон, мабуть, має кілька пересічних непростих підземних ділянок , але він не має пересічних простих підвузлів . (Я кажу "певно", тому що незрозуміло, як визначити, коли перетинаються дві непрості прогулянки!)abcabcxyzxpqrxzyx

введіть тут опис зображення

Отже, ось мої актуальні питання:

  • Як швидко ми можемо визначити, чи не є певний багатокутник неперехідним?

  • Як швидко ми можемо визначити, чи даний багатокутник слабко простий?

Першу задачу можна вирішити за час наступним чином. Оскільки існує вершин, то є підряди вершин до вершин; ми можемо перевірити, чи який-небудь конкретний субпатій простий за час (грубою силою). Для кожної пари простих підрядок вершина до вершини ми можемо перевірити, чи вони перетинаються за час. Але це не може бути найкращим можливим алгоритмом.n O ( n 2 ) O ( n 2 ) O ( n )O(n5)nO(n2)O(n2)O(n)

Я не знаю, чи можна вирішити другу проблему за багаточлен. Я думаю, що я можу швидко обчислити чітко визначене число повороту для будь-якого не простого багатокутника (якщо тільки об'єднання країв полігону не є лише контуром; в цьому випадку полігон повинен бути слабко простим); дивіться мою відповідь нижче. Однак з нового прикладу багатокутника вище випливає, що неперехід і поворот №1 не означають, що це просто просто.

Ми можемо визначити, чи даний багатокутник простий за час , перевіривши кожну пару ребер на перетин, або за час за допомогою стандартного алгоритму швидкої лінії чи навіть за часу використовуючи алгоритм тріангуляції Chazelle. (Якщо введення багатокутника не є простим, будь-який алгоритм тріангуляції буде або кидати виняток, нескінченний цикл, або видавати висновок, який не є дійсною тріангуляцією.) Але жоден з цих алгоритмів не вирішує проблем, про які я задаю питання. O ( n log n ) O ( n )O(n2)O(nlogn)O(n)


1 Бранко Грюнбаум. Полігони: Майстер мав рацію, а Пуансот помилявся, але переважав . Beiträge zur Algebra und Geometrie 53 (1): 57–71, 2012.

2 Див., Наприклад: Ерік Д. Демейн та Джозеф О'Рурк. Геометричні алгоритми складання: зв'язки, орігамі, багатогранники . Cambridge University Press, 2007.


Я не розумію, чому можна було б проголосувати це питання ?!
Каве

Я, можливо, зовсім не розумію питання, і тому, можливо, це зовсім не так, але мені здається, що те, як ви рахуєте вершини, означає, що друге питання обов'язково займає експоненціальний час. Поясню: у вашому останньому прикладі ви використовуєте одні і ті ж вершини кілька разів. Здається, легко побудувати графіки, де існує експоненціальна кількість унікальних циклів.
Джо Фіцсімонс

Якщо ваш вхід - це багатокутник, наведений як у ваших прикладах, то вхід може бути експоненціальним у кількості вершин, не повторюючи циклу. Якщо графік містить прикладний графік (2 та 3) як підграф, то він має цикли, які є непересічними, та цикли, які перетинаються. Як результат, вам потрібно прочитати весь рядок, щоб переконатися, що у вас немає циклів перетину (які можуть бути, а можуть і не включатися). Це вимагає експоненціалу часу в в гіршому випадку. n
Джо Фіцсімонс

1
@JoeFitzsimons: вхід - це лише послідовність точок (тобто пар реальних чисел), які не повинні бути різними. Розмір введення - це довжина цієї послідовності, а не кількість унікальних точок. n
Jeffε

2
@Kaveh: Може бути занадто абстрактним / спеціалізованим? Забагато слів? Я повинен був назвати точки Ga, Ka, Naa, Taa, Tin, Khat ?
Jeffε

Відповіді:


2

Здається, що перше питання має алгоритм (хоча це, ймовірно, також не є оптимальним). Якщо припустити, що існує схрещування, то ключовим для його знаходження є те, що краї, які необхідно знайти, - це ті, що знаходяться безпосередньо з обох боків загального підпутника. Тому ми дивимося на всі пари послідовних пар ребер. Їх існує квадратичне число. Якщо ми знайдемо пару пар ребер з вершинами і такі, що ребра і однакові, то ми дотримуємося загального підпутця до кінця та оглядаємо ребра, які залишають його. Якщо вони утворюють перехрестя разом з іa b c d e f b c e f a b d eO(n3)abcdefbcefabde, тоді ми готові, інакше переходимо до наступної пари. Дотримуватися загального підпутника - це максимум операція лінійного часу, тому весь алгоритм є .O(n3)

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


1
"Слідкувати за загальним підпутком - це максимум операція лінійного часу ..." Це правда? Пам’ятайте, що субпути не тотожні. Один може скластися вперед-назад уздовж зображення іншого. Насправді, навіть не зрозуміло (мені), коли ти знаєш, що закінчиш.
Пат Морін

Влучне зауваження. Чи можна було б на етапі попередньої обробки помістити багатокутник у якусь стандартну форму? Ми би схилили стежки, які негайно згортаються на себе, а також вершини, які є колінеарними з їх безпосередніми сусідами. Тоді було б краще визначити речення, яке ви цитували - загальний підпутник складається з ребер, які мають однакові вершини, і ви знаєте, що ви виконані, оскільки ви потрапляєте в різні вершини. Доведення того, що відповідь залишається однаковою на багатокутнику в стандартній формі, не повинно бути занадто важким.
Кріс Грей

@ChrisGray: Можливо, але не так просто, як ви запропонували. Якщо зображення є деревом, то рекурсивно змикання всіх перемикачів зрештою зводить до однієї точки. ПPP
Джефф

Так, ти маєш рацію, ця ідея не спрацює. Найправіша цифра, яку ви вказали вище, буде зведена до однієї точки.
Кріс Грей

Я планую дозволити виграшності щедрості; половина балів буде автоматично присвоєна цій відповіді.
Jeffε

2

На пропозицію Пат Моріна, ось моя ідея для обчислення поворотного числа. Вибачте, якщо це трохи неохайно; Я все ще борюся з демонами позначень. Більше того, коментар Пата до відповіді Кріса показує, що я ігнорував деякі важливі вироджені випадки. Але я все-таки опублікую це у випадку, якщо інші вважають це корисним.

Для будь-якого індексу , нехай позначає підписаний зовнішній кут у вершині ; це кут проти годинникової стрілки між променями та , нормалізований до діапазону . (Все індекс арифметика неявно по модулю ) . У повертаючи число з визначається як Дозвольте мені назвати вершиною шпори , якщо внутрішній кутθ ( p i ) = θ ( p i - 1 , p iip i p i - 1 p ip i p i + 1θ(pi)=θ(pi1,pi,pi+1)pipi1pipipi+1n P T u r n ( P ) = 1πθiπnPp i p i 0 θ i π - π P P p i = p i + 1 T u r n ( P ) T u r n ( P ) = ± 1 P

Turn(P)=12πi=0n1θ(pi).
pipi дорівнює . Зовнішній кут на шпорі недостатньо визначений; це може бути або або . Більш загально, число повороту добре визначається, якщо і лише тоді, коли не має шпори (і немає повторних вершин ). Не важко довести, що - ціле число, якщо воно добре визначене; зокрема, якщо - простий багатокутник.0θiππPPpi=pi+1Turn(P)Turn(P)=±1P

Тепер припустимо, що містить прогулянку форми , де і шлях - це шлях . Тоді - шпора; Виклик на корінь з . У цьому випадку дозвольте мені визначити зовнішній кут у таким чином: (Але що робити, якщоp r s r q p q rPprsrqpqs r s r s s ˜ θ ( s ) = π s p , r , qrssrsrss

θ~(s)=πsgnθ(p,r,q)={πif θ(p,r,q)>0πif θ(p,r,q)<0
θ(p,r,q)=0? Як зауважує Пат, це може насправді статися. Можливо, є якийсь рекурсивний спосіб визначення навіть у цьому випадку, але я не знаю, що це.)θ~(s)

Якщо слабо простий, то існує простий -gon довільно близький до ; Tet буде вершиною ближче всього до . Коли наближається до , внутрішній кут у наближається до нуля. Не важко довести (за допомогою індукції на довжину ), що зовнішній кут наближається до .n ˜ PPnP~˜ s ˜ P P ˜ P P ˜ sPs~P~PP~Ps~rsθ(s~)θ~(s)

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

В іншому випадку, якщо ми визначимо для будь-якої вершини без шпори , тепер у нас буде чітко визначений номер повороту , який повинен бути якщо слабо простий.pi ~ T u r n (P)=i ˜ θ (pi)/2π=Turn( ˜ P )±1Pθ~(pi)=θ(pi)piTurn~(P)=iθ~(pi)/2π=Turn(P~)±1P

Я більше не впевнений, що можна обчислити за лінійним часом. Основна складність полягає в тому, що хода може містити шпори. Наївний алгоритм, який знаходить корінь кожної шпори грубою силою, насправді займає час у гіршому випадку; розглянемо -gon, який має підводний прохід довжиною який просто чергується між двома точками.rsΘ(n2)nΩ(n)Turn~(P)rsΘ(n2)nΩ(n)

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