Ich interessiere mich für die Komplexität der Entscheidung, ob ein bestimmtes nicht einfaches Polygon fast einfach ist, und zwar in einer von zwei verschiedenen formalen Richtungen: schwach einfach oder nicht selbstüberschreitend . Da diese Begriffe nicht allgemein bekannt sind, möchte ich mit einigen Definitionen beginnen.
Ein Polygon ist der geschlossene Kreis von Liniensegmenten, die eine endliche Folge von Punkten in der Ebene verbinden. Die Punkte heißen die Eckpunkte des Polygons, und die Segmente heißen seine Kanten . Wir können jedes Polygon angeben, indem wir seine Eckpunkte in der richtigen Reihenfolge auflisten.p i p i + 1 mod n
Ein Polygon ist einfach, wenn alle Eckpunkte verschieden sind und sich Kanten nur an ihren Endpunkten schneiden. Entsprechend ist ein Polygon einfach, wenn es zu einem Kreis homöomorph ist und jede Kante eine positive Länge hat. Im Allgemeinen können sich die Eckpunkte und Kanten eines Polygons jedoch willkürlich schneiden oder sogar zusammenfallen. 1
Betrachten Sie zwei polygonale Pfade und deren Schnittpunkt ein gemeinsamer Unterpfad von beiden ist (möglicherweise ein einzelner Punkt). Wir sagen, dass sich und kreuzen, wenn sich ihre Endpunkte an der Grenze einer Nachbarschaft des gemeinsamen Unterpfads abwechseln . Ein Polygon kreuzt sich selbst, wenn es zwei sich kreuzende Unterpfade hat und sich ansonsten nicht selbst kreuzt . 2B A B A ≤ B
Ein Polygon ist schwach einfach, wenn es die Grenze einer Folge einfacher Polygone ist, oder gleichwertig, wenn es eine willkürlich kleine Störung der Eckpunkte gibt, die das Polygon einfach macht. Jedes schwach einfache Polygon ist nicht selbstüberschreitend; Einige sich nicht selbst kreuzende Polygone sind jedoch nicht schwach einfach.
Betrachten Sie beispielsweise die unten gezeigten sechs Punkte .
Das Polygon ist einfach; siehe die linke Abbildung.
Das Polygon ist schwach einfach; Die mittlere Abbildung zeigt ein einfaches Polygon in der Nähe. Dieses Polygon ist jedoch nicht einfach, da es dreimal besucht.
Das Polygon sich selbst, weil sich die Unterpfade und kreuzen. Sehen Sie die rechte Abbildung für etwas Intuition.b p q z Y q p a
Schließlich ist das Polygon (das sich zweimal um das mittlere Polygon windet) nicht selbst kreuzend, aber es ist nicht schwach einfach. Intuitiv ist die Umdrehungszahl dieses Polygons , während die Umdrehungszahl jedes einfachen Polygons . (Ein formaler Beweis erfordert einige Fallanalysen, zum Teil, weil die Umdrehungszahl für Polygone mit Winkeln von nicht genau definiert ist !)± 2 ± 1 0 ∘
Update (13. September): In der folgenden Abbildung ist das Polygon nicht selbstkreuzend und hat die Nummer 1 , ist aber nicht ganz einfach. Das Polygon hat vermutlich mehrere sich kreuzende, nicht einfache Unterwege , aber keine sich kreuzenden, einfachen Unterwege . (Ich sage "wohl", weil es unklar ist, wie man definiert, wenn sich zwei nicht einfache Wege kreuzen!)
Zum Schluss hier meine eigentlichen Fragen:
Wie schnell können wir feststellen, ob ein bestimmtes Polygon sich nicht selbst kreuzt?
Wie schnell können wir feststellen, ob ein bestimmtes Polygon schwach einfach ist?
Das erste Problem kann wie folgt in gelöst werden. Da es Vertices gibt, gibt es Vertex-to-Vertex-Unterpfade; Wir können testen, ob ein bestimmter Unterpfad in der Zeit einfach ist (durch rohe Gewalt). Für jedes Paar einfacher Vertex-zu-Vertex-Unterpfade können wir testen, ob sie sich in -Zeit kreuzen . Dies kann jedoch nicht der bestmögliche Algorithmus sein.n O ( n 2 ) O ( n 2 ) O ( n )
Ich weiß nicht, ob das zweite Problem in Polynomzeit gelöst werden kann. Ich denke, ich kann für jedes nicht einfache Polygon schnell eine genau definierte Abbiegezahl berechnen (es sei denn, die Vereinigung der Polygonkanten ist nur ein Pfad. In diesem Fall muss das Polygon schwach einfach sein). Siehe meine Antwort unten. Das obige neue Beispielpolygon impliziert jedoch, dass Nicht-Selbstkreuzung und Wenden Nummer 1 nicht schwach einfach implizieren.
Wir können feststellen , ob ein bestimmtes Polygon ist einfach in Zeit durch jedes Paar von Kanten für Schnittprüfung oder in Zeit , um eine Standard - sweepline Algorithmus, oder sogar in Zeit mit Chazelles Triangulationsalgorithmus. (Wenn das Eingabepolygon nicht einfach ist, löst jeder Triangulationsalgorithmus entweder eine Ausnahme, eine Endlosschleife oder eine Ausgabe aus, die keine gültige Triangulation ist.) Keiner dieser Algorithmen löst jedoch die von mir gestellten Probleme. O ( n log n )
1 Branko Grünbaum. Polygone: Meister hatte Recht und Poinsot hatte Unrecht, setzte sich aber durch . Beiträge zur Algebra und Geometrie 53 (1): 57–71, 2012.
2 Siehe zum Beispiel: Erik D. Demaine und Joseph O'Rourke. Geometrische Faltungsalgorithmen: Verknüpfungen, Origami, Polyeder . Cambridge University Press, 2007.
Antworten:
Es scheint, als hätte die erste Frage einen -Algorithmus (obwohl dies wahrscheinlich auch nicht optimal ist). Unter der Annahme, dass es eine Kreuzung gibt, scheint der Schlüssel zum Finden zu sein, dass die Kanten, die gefunden werden müssen, diejenigen sind, die sich unmittelbar auf beiden Seiten des gemeinsamen Unterpfads befinden. Daher betrachten wir alle Paare aufeinanderfolgender Kantenpaare. Davon gibt es eine quadratische Anzahl. Wenn wir ein Paar Kantenpaare mit Eckpunkten und so dass die Kanten und sind, folgen wir dem gemeinsamen Unterpfad bis zum Ende und untersuchen die Kanten, die ihn verlassen. Wenn sie zusammen mit und eine Kreuzung bildena b c d e f b c e f ein b d e O ( n 3 )O(n3) abc def bc ef ab de , dann sind wir fertig, sonst fahren wir mit dem nächsten Paar fort. Dem gemeinsamen Unterpfad zu folgen ist höchstens eine lineare Zeitoperation, daher ist der gesamte Algorithmus .O(n3)
Diese Analyse ist wahrscheinlich nicht eng, da die Häufigkeit, mit der ein gemeinsamer Unterpfad linearer Länge befolgt wird, in der Anzahl der Paare von Paaren nicht linear ist. Es sollte nur eine konstante Anzahl davon geben. Wenn die Länge des längsten gemeinsamen Unterpfads konstant ist, ist die Zeit, die gemeinsamen Unterpfaden folgt, in Ordnung. Ich würde erwarten, dass der schlimmste Fall eintritt, wenn es einen einzelnen Unterpfad der Länge gibt, der -Unterpfaden gemeinsam ist. Dann gibt es Wechselwirkungen und in jeder Wechselwirkung werden Kanten verfolgt. Die Anzahl der Kanten, denen gefolgt wird, ist also immer nochO( √O(n−−√) O(n)O( √O(n−−√) O(n) o(n2)O(n2)O(n−−√) o(n2) und die Grenze ergibt sich aus der Anzahl der Paare. Daher würde ich vermuten, dass die wahre Schranke für diesen Algorithmus .O(n2)
quelle
Auf Vorschlag von Pat Morin ist hier meine Idee zur Berechnung der Abbiegezahl. Tut mir leid, wenn das etwas schlampig ist; Ich kämpfe immer noch gegen die Dämonen. Außerdem zeigt Pats Kommentar zu Chris 'Antwort, dass ich einige wichtige entartete Fälle ignoriert habe. Aber ich werde es trotzdem hier posten, falls andere es nützlich finden.
Für jeden Index sei der vorzeichenbehaftete Außenwinkel am Scheitelpunkt ; Dies ist der Winkel gegen den Uhrzeigersinn zwischen den Strahlen und , normalisiert auf den Bereich . (Alle Index Arithmetik ist implizit mod ) . Die Drehzahl von ist definiert als Lassen Sie uns rufen eine Ecke einen Sporn , wenn der Innenwinkel anθ ( p i ) = θ ( p i - 1 , p i , p i + 1 ) p i → P i - 1 p i → P i P i + 1i θ(pi)=θ(pi−1,pi,pi+1) pi pi−1pi−→−− pipi+1−→−− −π≤θi≤π n P pipi0θiπ-πPPpi=pi+1Turn(P)Turn(P)=±1P
Angenommen, enthält einen Weg der Form , wobei und der Pfad die Umkehrung von ist Pfad . Dann ist ein Sporn; nenne die Wurzel von . In diesem Fall lassen Sie uns definieren den Außenwinkel bei wie folgt: (Aber was ist, wennP p→r⇝s⇝r→q p≠q r⇝s s⇝r s r s s
Wenn schwach einfach ist, dann gibt es ein einfaches -gon beliebig nahe bei ; Tet ist der Scheitelpunkt von , der nächsten liegt . Wie nähert sich , den Innenwinkel bei Null nähert. Es ist nicht schwer zu beweisen (durch Induktion über die Länge von ), dass sich der äußere Winkel nähert .P n P~ P s~ P~ P P~ P s~ r⇝s θ(s~) θ~(s)
Wenn vollständig aus einem besteht, dem die Umkehrung folgt: , sind die Außenwinkel an den Ausläufern und noch nicht genau definiert. Aber in diesem Fall glaube ich, dass genau dann schwach einfach ist, wenn der Weg nicht ist. (Es gibt komplexere Fälle, in denen ich keine vernünftige geänderte Abbiegezahl definieren kann, insbesondere wenn das Polygon auf einem einzigen Gang vor- und zurückwandert. In all diesen Fällen scheint das Polygon jedoch nur dann schwach einfach zu sein, wenn es es ist ist nicht selbstüberschreitend.)P r⇝s⇝r r s P r⇝s
Andernfalls haben wir, wenn wir für einen Nicht-Stichvertex , eine genau definierte Wendezahl , was muss, wenn schwach einfach ist.Pi ~ T u r n (P)=Σi ~ θ (pi)/2π=Turn( ~ P )±1Pθ~(pi)=θ(pi) pi Turn˜(P)=∑iθ~(pi)/2π=Turn(P~) ±1 P
Ich bin nicht mehr sicher, dass in linearer Zeit berechnet werden kann. Die Hauptschwierigkeit besteht darin, dass die selbst Sporen enthalten können. Der naive Algorithmus, der die Wurzel jedes Sporns durch rohe Gewalt findet, benötigt im schlimmsten Fall tatsächlich Zeit; Betrachten Sie ein gon mit einem Subwalk der Länge , der einfach zwischen zwei Punkten wechselt.r⇝sΘ(n2)nΩ(n)Turn˜(P) r⇝s Θ(n2) n Ω(n)
quelle