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.376n2.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.1V.2V.3V.4uich∈ V.ichvi + 1∈ V.i + 1i = 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 ∈G4 nn2 n3 n2 n(y,d) und d ein Dummy), wodurch eine 6 n- Knoten-Instanz genau Ihres Problems erhalten wird.y∈V2∪V3d6n