Interesuje mnie złożoność decydowania, czy dany nie-prosty wielokąt jest prawie prosty, w jednym z dwóch różnych formalnych zmysłów: słabo prostym lub nie-samokreślącym . Ponieważ te terminy nie są powszechnie znane, zacznę od niektórych definicji.
Wieloboku jest zamknięty cykl odcinków łączenia kilku skończoną sekwencję punkty na płaszczyźnie. Punkty nazywane są wierzchołkami wielokąta, a segmenty nazywane są jego krawędziami . Możemy określić dowolny wielokąt, po prostu wymieniając jego wierzchołki w kolejności.
Wielokąt jest prosty, jeśli wszystkie wierzchołków są różne, a krawędzie przecinają się tylko w punktach końcowych. Odpowiednio, wielokąt jest prosty, jeśli jest homeomorficzny dla koła, a każda krawędź ma długość dodatnią. Ogólnie jednak wierzchołki i krawędzie wielokąta mogą przecinać się dowolnie, a nawet pokrywać. 1
Rozważ dwie ścieżki wielokątne i których przecięcie jest wspólną podścieżką obu (być może pojedynczym punktem). Mówimy, że i B krzyż , jeśli ich punkty końcowe A (0), B (0), A (1), B (1) zastępcy na granicy dzielnicy wspólnej podścieżkę A \ cap B . Wielobok sam się krzyżuje, jeśli ma dwie przecinające się podścieżki, a w przeciwnym razie nie krzyżuje się . 2)
Wielobok jest słabo prosty, jeśli stanowi granicę sekwencji prostych wieloboków lub równoważnie, jeśli występuje dowolnie mała perturbacja wierzchołków, która sprawia, że wielobok jest prosty. Każdy słabo prosty wielokąt nie przechodzi przez siebie; jednak niektóre wielokąty nieprzekraczające się nie są dość proste.
Rozważmy na przykład sześć punktów pokazanych poniżej.
Wielokąt jest prosty; patrz lewa postać.
Wielobok jest słabo prosty; środkowa figura pokazuje pobliski prosty wielokąt. Jednak ten wielokąt nie jest prosty, ponieważ odwiedza trzy razy.
Wielobok to samo przejście, ponieważ podścieżki i krzyż. Zobacz odpowiednią liczbę dla intuicji.b p q z y q p a
Wreszcie, wielokąt (który nakręca dwukrotnie wokół środkowego wielokąta) jest non-self-przejście, ale to nie słabo proste. Intuicyjnie liczba zwrotna tego wielokąta wynosi , podczas gdy liczba zwrotna dowolnego prostego wielokąta musi wynosić . (Formalny dowód wymaga pewnej analizy przypadku, częściowo dlatego, że liczba zwrotów nie jest właściwie dobrze zdefiniowana dla wielokątów z kątami !)± 2 ± 1 0 ∘
Aktualizacja (13 września): Na poniższym rysunku wielokąt nie przechodzi przez siebie i ma zwrot 1 , ale nie jest to wcale takie proste. Wielokąt ma prawdopodobnie kilka przecinających się niełatwych ścieżek , ale nie ma żadnych prostych ścieżek . (Mówię „prawdopodobnie”, ponieważ nie jest jasne, jak określić, kiedy krzyżują się dwa niełatwe spacery!)
Na koniec oto moje aktualne pytania:
Jak szybko możemy ustalić, czy dany wielokąt nie przechodzi przez siebie?
Jak szybko możemy ustalić, czy dany wielokąt jest słabo prosty?
Pierwszy problem można rozwiązać w czasie w następujący sposób. Ponieważ istnieje wierzchołków, istnieją podścieżki wierzchołków ; możemy sprawdzić, czy jakaś konkretna podścieżka jest prosta w czasie (brutalną siłą). Dla każdej pary prostych podścieżek wierzchołek-wierzchołek możemy sprawdzić, czy przecinają się w czasie . Ale to nie może być najlepszy możliwy algorytm.n O ( n 2 ) O ( n 2 ) O ( n )
Nie wiem, czy drugi problem można rozwiązać w czasie wielomianowym. Myślę, że mogę szybko obliczyć dobrze zdefiniowaną liczbę zwrotną dla dowolnego nieprostego wielokąta (chyba że połączenie krawędzi wielokąta jest tylko ścieżką, w którym to przypadku wielokąt musi być słabo prosty); zobacz moją odpowiedź poniżej. Jednak nowy przykładowy wielokąt powyżej sugeruje, że brak przekraczania i obracanie numeru 1 nie oznacza słabo prostej.
Można określić, czy dana wielokąt jest prosty w w czasie sprawdzając każdą parę krawędziami przecięcia lub razem za pomocą standardowego algorytmu sweepline lub nawet w Czas za pomocą algorytmu triangulacji Chazelle. (Jeśli wielokąt wejściowy nie jest prosty, dowolny algorytm triangulacji wyrzuci wyjątek, pętlę nieskończoną lub wygeneruje dane wyjściowe, które nie są prawidłową triangulacją.) Ale żaden z tych algorytmów nie rozwiązuje problemów, o które pytam. O ( n log n ) O ( n )
1 Branko Grünbaum. Wieloboki: Meister miał rację, a Poinsot mylił się, ale zwyciężył . Beiträge zur Algebra und Geometrie 53 (1): 57–71, 2012.
2 Patrz na przykład: Erik D. Demaine i Joseph O'Rourke. Geometryczne algorytmy składania: powiązania, origami, wielościany . Cambridge University Press, 2007.
Odpowiedzi:
Wydaje się, że pierwsze pytanie ma algorytm (choć prawdopodobnie nie jest to również optymalne). Zakładając, że istnieje skrzyżowanie, kluczem do jego znalezienia wydaje się, że krawędzie, które należy znaleźć, są krawędziami znajdującymi się bezpośrednio po obu stronach wspólnej podścieżki. Dlatego patrzymy na wszystkie pary kolejnych par krawędzi. Jest ich kwadratowa liczba. Jeśli znajdziemy parę krawędzi z wierzchołkami i tak że krawędzie i są takie same, wówczas podążamy wspólną ścieżką podrzędną do końca i sprawdzamy krawędzie, które ją opuszczają. Jeśli tworzą skrzyżowanie z ia b c d e f b c e f a b d e O ( n 3 )O ( n3)) a b c ree f b c e f a b de , to skończymy, w przeciwnym razie przejdziemy do następnej pary. Podążanie za wspólną ścieżką podrzędną jest co najwyżej operacją w czasie liniowym, więc cały algorytm to .O(n3)
Ta analiza prawdopodobnie nie jest ścisła, ponieważ liczba wspólnych podścieżek o długości liniowej nie jest liniowa w liczbie par. Powinno być ich tylko stała liczba. Podobnie, jeśli długość najdłuższej wspólnej podścieżki jest stała, to jesteśmy w porządku pod względem ilości czasu po wspólnych podścieżkach. Spodziewałbym się, że najgorszy przypadek występuje, gdy istnieje jedna podścieżka o długości która jest wspólna dla podścieżek . Następnie występują interakcje i w każdej interakcji śledzone są krawędzie . Więc nawet liczba śledzonych krawędzi wynosiO( √O(n−−√) O(n)O( √O(n−−√) O(n) o(n2)O(n2)O(n−−√) o(n2) , a granica wynika z liczby par. Tak więc zgaduję, że prawdziwą granicą tego algorytmu jest .O(n2)
źródło
Zgodnie z sugestią Pata Morina, oto mój pomysł na obliczenie liczby zwrotnej. Przepraszam, jeśli to trochę niechlujne; Wciąż walczę z demonami notacji. Co więcej, komentarz Pata do odpowiedzi Chrisa pokazuje, że zignorowałem kilka ważnych zdegenerowanych przypadków. Ale i tak opublikuję tutaj, na wypadek gdyby inni uznali to za przydatne.
Dla dowolnego indeksu , niech θ ( p i ) = θ ( p i - 1 , p i , p i + 1 ) oznacza podpisany kąt zewnętrzny w wierzchołku p i ; jest to kąt przeciwny do ruchu wskazówek zegara między promieniami → p i - 1 p i i → p i p i + 1 , znormalizowany do zakresu - π ≤ θ ii θ(pi)=θ(pi−1,pi,pi+1) pi pi−1pi−→−− pipi+1−→−− . (Wszystkie arytmetyczna indeks jest niejawnie mod n ). Określenie obracając liczbę od P jest zdefiniowana jako
T U r n ( p ) = 1−π≤θi≤π n P
Zadzwonię wierzchołekpjabodziec, jeśliwewnętrznykąt przypijest równa0. Kąt zewnętrznyθina ostrodze nie jest dobrze określony; może to byćπlub-π. Mówiąc bardziej ogólnie, liczba zwrotówPjest dobrze zdefiniowana wtedy i tylko wtedy, gdyPnie ma ostróg (i nie ma powtarzających się wierzchołkówpi=
źródło