Angenommen , wir haben ein gerichteter Graph und zwei Knoten und . Ich würde gerne wissen, ob es bereits Algorithmen zur Berechnung des folgenden Entscheidungsproblems gibt:
Gibt es mindestens zwei Pfade zwischen und gleicher Länge?
Wie steht es mit der Komplexität? Kann ich es in polynomialer Zeit lösen?
Ich möchte dem Diagramm eine neue Einschränkung hinzufügen, da das Problem möglicherweise besser lösbar ist. In der Adjazenzmatrix ist nicht jede Spalte leer. Jeder Knoten hat also mindestens einen Pfeil am Eingang und es ist auch mindestens ein Knoten mit sich selbst verbunden. Wenn also der Knoten der te Knoten ist, dann ist eine Kante im Graphen.
complexity-theory
graph-theory
time-complexity
graphs
Paolo Parisen T.
quelle
quelle
Antworten:
Betrachten wir einen Graphen , möchten wir wissen, ob es zwei verschiedene Pfade von A nach B mit der gleichen Länge gibt. Was ist zu tun? Einfach: Code zwei Pfade in einem. Definieren Sie den Graphen G ' mit den Eckpunkten V × V × { 0 , 1 } . Sie machen einen Schritt in G ', indem Sie zwei unabhängige Schritte in G machen . Das zusätzliche Bit zeigt an, ob die beiden Pfade bereits voneinander getrennt wurden.G A B G′ V×V×{0,1} G′ G
Formal gibt es eine Kante in G ', wenn i → i ' , j → j ' in G und e ' = e ∨ ( i , i ') ) ≠ ( j , j ′ ) .(i,j,e)→(i′,j′,e′) G′ i→i′ j→j′ G e′=e∨(i,i′)≠(j,j′)
Der Algorithmus prüft, ob ein Pfad vorhanden ist in G ' ( A , A , 0 ) zu ( B , B , 1 ) gibt , der O ( V 4 ) oder so etwas wie O ( ( V + E ) 2 ) ist .(A,A,0) (B,B,1) G′ O(V4) O((V+E)2)
Wenn Sie zustimmen, dass dieser Algorithmus korrekt ist, ist der Pfad in folglich höchstens 2 n 2 lang , daher müssen mögliche "Pfadkollisionen" spätestens bei dieser Länge auftreten. Aus dieser Beobachtung können Sie einen O ( V ω log V ) -Algorithmus erhalten, wobei ω die Komplexität der Matrixmultiplikation ist (fragen Sie, ob Sie einen Spoiler benötigen ...).G′ 2n2 O(VωlogV) ω
Ich bin der festen Überzeugung, dass es einen -Algorithmus gibt, der mehr von der Struktur des Problems Gebrauch macht.O(V+E)
quelle
Wahrscheinlich habe ich eine Antwort auf dieses Problem, aber ich bin nicht sicher, ob es funktioniert.
Es ist nicht wichtig, die beiden Pfade zu "finden", sondern nur zu "wissen", ob sie existieren oder nicht. Ich denke nicht, dass dies ein NP-vollständiges Problem ist.
So nehmen Sie die Adjazenzmatrix . Wir können leicht annehmen, dass es mit einem Wert von 0,1 gefüllt ist. (0 = keine Kante; 1 = es gibt eine Kante) Verwenden wir die folgende Algebra mit 3 Werten (0,1,2), wobei alles wie gewohnt funktioniert, außer: 2 + <etwas> = 2 ; 2 ∗ <was auch immer größer als 0> = 2 istA 2+<something>=2 2∗<whatever greater than 0>=2
Also, wenn es zwei Wege von gleicher Länge von ich erwarte , dass es ein Wert p derart , dass ( A p ) i , j = 2 .i,j p (Ap)i,j=2
Sei die Anzahl der Eckpunkte im Graphen (oder sagen wir, dass A die Dimension n × n hat ). Ich kenne den Wert von p nicht , aber wenn ich A durch Multiplikation mit sich selbst für höchstens iterieren A n×n p A sollte ich die Antwort finden. (also, p < n 2 ) (der Sinn ist, dass ich A überprüfe, dann überprüfe ich A 2 , dann überprüfe ich A 3 und so weiter ...)n2 p<n2 A A2 A3
Hier ist meine Argumentation:
Ich höre auf zu iterieren, sobald ich .(Ap)i,j=2
Liege ich falsch?
quelle