Kürzester nicht schneidender Pfad für einen in eine euklidische Ebene eingebetteten Graphen (2D)


14

Welchen Algorithmus würden Sie verwenden, um den kürzesten Pfad eines Graphen zu finden, der in eine euklidische Ebene eingebettet ist, sodass der Pfad keine Selbstschnittpunkte enthalten sollte (in der Einbettung)?

In der folgenden Grafik möchten Sie beispielsweise von . Normalerweise würde ein Algorithmus wie der von Dijkstra eine Sequenz erzeugen wie:(0,0)(-3,2)

[(0,0)3(0,3)2(1,2)4(-3,2)]=7+2.

Vollständige Grafik:

Bildbeschreibung hier eingeben

Kürzester Weg:

Bildbeschreibung hier eingeben

Kürzester nicht kreuzender Weg:

Bildbeschreibung hier eingeben

Doch selbst dieser Weg kreuzt auf der euklidischen Ebene, also ich mag einen Algorithmus, den mir die kürzeste nicht schneidende Sequenz, in diesem Fall geben würde:

[(0,0)3(0,3)3(0,6)5(-3,2)]=11.

Dieser Pfad ist länger als der kürzeste Pfad, aber er ist der kürzeste nicht kreuzende Pfad.

Gibt es einen (effizienten) Algorithmus, der das kann?

TikZ-Quellen


2
Nettes Problem! (+1). Können Sie etwas über die Anwendung oder den Kontext sagen, in dem dieses Problem auftritt? Ich bin fasziniert. (PS: Der naheliegende Ausweg aus diesem Rätsel besteht darin, zu prüfen, ob Sie für jeden Schnittpunkt, dh für jeden Punkt, an dem eine Kante eine andere Kante schneiden kann, einen neuen Scheitelpunkt einführen können. Allerdings ist mir dies für einige / viele Anwendungen klar Dies ist möglicherweise nicht möglich.)
DW

2
@ DW das bin ich, der Babibus schlecht formuliertes brennendes Esel / Pony-Problem umformuliert ; Die Anwendung ist sein euklidischer TSP-Heuristik-Algorithmus. Ich bin mir nicht ganz sicher, wie er ihn verwenden soll, aber ich stelle mir vor, er möchte wissen, ob er einen Weg zwischen zwei Punkten finden kann, wenn er bereits mehrere andere besucht hat sich nicht überschneiden). Und ja, wenn Sie neue Knoten einführen können, wäre das großartig, aber die Frage ist, ob Sie dies nicht können (und natürlich können Sie keine neuen Städte für den euklidischen TSP einführen).
Realz Slaw

1
Lassen Sie mich versuchen, das Problem der Pfadexistenz in 3SAT umzuwandeln. Die größte Herausforderung besteht darin, zwei Signale zu kreuzen, ohne zwei Pfade zu kreuzen.
John Dvorak

1
Ja. Damit wollte ich SAT lösen.
John Dvorak

2
n

Antworten:


11

Es ist NP-vollständig, selbst zu entscheiden, ob ein Pfad existiert.

Es ist eindeutig möglich, zu überprüfen, ob ein bestimmter Pfad in der angegebenen Grafik gültig ist. Somit liegt das Problem der begrenzten Länge in NP, und ebenso die Teilmenge, das Any-Path-Problem.

Um nun die NP-Härte des Any-Path-Problems (und damit des Bounded-Length-Problems) zu beweisen, reduzieren wir SAT-CNF auf dieses Problem:


Die globale Struktur ist ein Gitter von Drahtstücken, an das eine Spalte von Satzstücken anschließt. Die Logikformel ist erfüllbar, wenn ein sich nicht schneidender Pfad durch das Diagramm vorhanden ist.

Es ist unmöglich, zwei Teile des Pfades zu kreuzen, es ist jedoch erforderlich, zwei Logikdrähte zu kreuzen. Vielmehr ist der Pfadfluss streng gegeben: Ein Drahtpunkt wird durch zwei Knoten gegeben. Die Reihenfolge der Drahtpunkte, durch die der Pfad verläuft, wird durch die Reduzierung erzwungen. Die Logik wird durch den ausgewählten Knoten dargestellt. Jeder Pfad kann ausgewählt werden, solange er alle Drahtpunkte durchläuft.

In diesem Diagramm wird der Pfad durch die rote Kurve und der logische Ablauf durch die schwarzen Drähte dargestellt:

Links ein Gitter aus Drähten, rechts eine Spalte aus Satzteilen.

Lassen Sie uns nun jede Komponente erstellen.


Bei der Verdrahtung werden drei Kacheln verwendet: die Kreuzung, der Verzweigungspunkt und der vertikale Draht. Beginnen wir mit dem schwierigsten:

Die Grundidee hinter der Kreuzung besteht darin, einen Pfad für jedes Paar von Drahtpunkten zu erstellen und die möglichen Pfade so weit zu biegen, dass sich alle Paare mit Ausnahme derjenigen, die dieselbe Logik (kompatible Pfade) codieren, kreuzen. Natürlich können wir nicht einfach sagen, dass sich zwei parallele Kanten schneiden, sondern wir können zusätzliche Knoten der Ordnung 2 einführen, damit sich zwei Pfade schneiden.

Angenommen, die Pfade kommen von Norden nach Westen und von Süden nach Osten, dann können wir: jeden Pfad von Norden mit seinem kompatiblen Pfad von Osten auf einer Linie zusammenfassen (einige inkompatible Pfade kreuzen sich); Kreuzen Sie jedes Paar miteinander, indem Sie die Reihenfolge der Paare umkehren. Verteilen Sie die Pfade auf ihre Süd- und Westendpunkte. Dies lässt sich am besten anhand eines Diagramms erklären. Hier repräsentiert jedes Knotenpaar einen Drahtpunkt. Pfade mit dem gleichen Farbcode (mit der gleichen Logik) kreuzen sich nicht, Pfade mit einem anderen Farbcode tun dies:

grafische Darstellung der oben genannten

Der Verzweigungspunkt und der vertikale Draht funktionieren gleich, es sind jedoch weniger Pfade zu korrelieren:

zwei paar wege reichen hier aus.  Der Draht ist im Wesentlichen ein Verzweigungspunkt, bei dem der Zweig zerstört ist

¬EIN¬B

Bildbeschreibung hier eingeben

Es ist möglich, diese Reduktion zu verallgemeinern, um einen beliebigen Baum von UND- und ODER-Gattern zu codieren, indem der Lesedraht auf unterschiedliche Weise verzweigt wird. Insbesondere können sowohl SAT-CNF als auch SAT-DNF auf die oben beschriebene Art und Weise auf das Problem des nicht schneidenden Pfades reduziert werden.


Wow, gut gemacht, Mann. Ich habe es noch nicht besprochen, aber die Arbeit, die Sie hineingesteckt haben, ist unglaublich.
Realz Slaw

OK, ich möchte nur mein Verständnis zusammenfassen: Mit dem ersten Gadget kann man zwei beliebige Literal-Pfad-Paare kreuzen und die verwendeten Pfade beibehalten. Daher muss man sich keine Gedanken über die Planarität machen, um die Pfade auszulegen (wie es das xor-Gadget in PlanarCircuitSat für Schaltungen tut). Mit dem letzten Gadget kann man dann beliebige logische Klauseln erstellen (ohne sich mehr um die Planarität kümmern zu müssen). Ist das richtig?
Realz Slaw

Dies scheint richtig zu sein, aber Sie müssen zwei Dinge für ein allgemeines Layout sicherstellen: Sie müssen in der Lage sein, alle Geräte mit einem NIP-Pfad zu versorgen (dies sollte immer möglich sein - wenn ein Pfad in der Mitte hängen bleibt, können Sie Wire-Gadgets einführen führe einsame Enden des Pfades zusammen) und dass sich alle Pfade im Lesedraht so kreuzen, dass es nicht möglich ist, innerhalb des Drahtes umzukehren (es scheint mir, dass es garantiert ist, wenn es keine wahren Klauseln gibt ( kein Literal kreuzen) und wenn sich alle Klauseln außerhalb des Stromkreises befinden (auf derselben Fläche befinden sich Anfang und Ende)).
John Dvorak

Es ist einfach sicherzustellen, dass sich alle Pfade im Lesedraht kreuzen. Wenn Sie sicher sein möchten, verzweigen Sie einfach n Pfade und kreuzen Sie alle sofort. Ich denke, das ist jedoch nie notwendig.
John Dvorak

1
Ich habe OpenOffice Draw für die globale Struktur und [yEd] (www.yworks.com/products/yed) für den Rest verwendet. Soll ich das in (mit <sub>) bearbeiten ?
John Dvorak

-1

Das Problem scheint auf Turan 1944 zu datieren. Dies scheint eine gute Übersicht über Theorie und Algorithmen zu sein, die Crossing Number of Graphs: Theorie und Berechnung von Mutzel. wikipedia hat einige infos unter kreuzung der anzahl von diagrammen


1
Vielleicht ist das besser als Kommentar?
Juho

Es beantwortet wissenschaftlich die grundlegende Frage "Welchen Algorithmus würden Sie verwenden"
vzn

1
Während dies theoretisch die Frage beantworten mag, wäre es vorzuziehen , die wesentlichen Teile der Antwort hier aufzunehmen und den Link als Referenz bereitzustellen.
John Dvorak

jan zitiert einen ref aus stackexchange meta. Während dies eine gültige Idee ist, unterscheidet sich die Rolle von Zitaten in Naturwissenschaften / Mathematik von der einer Programmiertipps-Site .... [zugegebenermaßen steht mir die Referenz momentan nicht für eine detailliertere Antwort zur Verfügung] .. sowieso ist so etwas durchaus möglich jans construction ist zwar nützlich / lohnenswert, aber bereits in der Literatur und in der Wissenschaft enthalten und gehört zum Standardprozess / den Best Practices, um es zu lokalisieren ....
vzn
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.