Wie kann man bei einem gerichteten azyklischen Graphen mit Knoten bestimmen, ob es einen Pfad zwischen einem der folgenden n Knotenpaare gibt ? Es gibt einen einfachen Algorithmus in (wobei m die Anzahl der Kanten ist), indem von jedem Knoten gesucht wird , aber kann es besser gemacht werden?( 1 → n + 1 ) , … , ( n → n + n ) O ( n ⋅ ( n + m ) ) 1 … n
EDIT: Ich suche Existenz, nicht vollständige Pfade.
Antworten:
Wie Chandra Chekuri in einem Kommentar betonte, könnten Sie den transitiven Abschluss einfach durch schnelle Matrixmultiplikation berechnen und das Problem in O ( ) (verwenden Sie Ihre Lieblingsmethode, O ( ) über Coppersmith und Winograd oder praktischer mit Straßens O ( )), und dies wäre gut für dichte Graphen.n 2,376 n 2,81nω n2.376 n2.81
Nun behaupte ich, wenn Sie diese Laufzeit für Ihr Problem für dichte Graphen übertreffen könnten, würden Sie einen Algorithmus für die Dreieckserkennung erhalten, der effizienter ist als die Berechnung des Produkts zweier Boolescher Matrizen. Die Existenz eines solchen Algorithmus ist ein großes offenes Problem.
Ich werde das Dreiecksproblem auf das Problem der Erreichbarkeit von n-Paaren-DAG reduzieren. Angenommen, wir erhalten einen Graphen G auf n Knoten und möchten bestimmen, ob G ein Dreieck enthält.
Erstellen Sie nun aus G eine DAG G 'wie folgt. Erstellen Sie vier Kopien der Scheitelpunktmenge , V 2 , V 3 , V 4 . Fügen Sie für Kopien u i ∈ V i , v i + 1 ∈ V i + 1 für i = 1 , 2 , 3 eine Kante ( u i , v i + 1 ) hinzu, wenn ( u , v )V.1 V.2 V.3 V.4 uich∈ V.ich vi + 1∈ V.i + 1 i = 1 , 2 , 3 ( uich, vi + 1) ( u , v ) war in G. Wenn wir nun fragen, ob es einen Pfad zwischen einem der Paare für alle u ∈ G gibt, dann würde dies genau fragen, ob es in G ein Dreieck gibt . Der aktuelle Graph hat 4 n Knoten und wir fragen nach n Paaren. Wir können jedoch 2 n isolierte Dummy-Knoten hinzufügen und stattdessen 3 n Abfragen haben (indem wir eine Abfrage für 2 n verschiedene Paare ( y , d ) hinzufügen , wobei y ∈ V 2 ist( u1, u4) u ∈ G 4 n n 2 n 3 n 2 n (y,d) und d ein Dummy), wodurch eine 6 n- Knoten-Instanz genau Ihres Problems erhalten wird.y∈V2∪V3 d 6n
quelle
Die topologische Sortierung ( ) arbeitet dann daran, ein Bit-Set von Knoten zu verbreiten, von denen aus jeder Knoten erreicht werden kann ( O ( m n ) ).O(m+n) O(mn)
Nach der topologische Sortierung können Sie tun , Schnell Ablehnung (wenn der Knoten n + x , bevor der Knoten kommt x in der Art , dann gibt es keinen Weg von x nach n + x ).O(n) n+x x x n+x
quelle
Andere Heuristiken können hinzugefügt werden, aber ihre Effizienz (und Effizienz der drei vorgeschlagenen) hängt stark von der Graphstruktur ab.
quelle