Transitivitätsprüfung vs. Transitivverschluss


9

Ist es nicht einfacher, die Transitivität eines Digraphen zu überprüfen, als (in Bezug auf die asymptotische Komplexität) den transitiven Verschluss des Digraphen vorzunehmen? Kennen wir eine Untergrenze besser als um festzustellen, ob ein Digraph transitiv ist oder nicht?Ω(n2)


1
Das Speichern des gesamten Transitivverschlusses kostet Sie zusätzlichen Platz. Bei einigen Diagrammen sollten Sie in der Lage sein, die Transitivitätsprüfung zu verknüpfen und zu verknüpfen, ohne die Kanten erneut zu überprüfen. Siehe: Ein paralleler Konnektivitätsalgorithmus, Y Shiloach, U Vishkin - Journal of Algorithms, 1982O(logn)
Chad Brewbaker

1
Hier hat Siek Implementierungshinweise für die Boost Graph Library boost.org/doc/libs/1_54_0/libs/graph/doc/…
Chad Brewbaker

2
Nicht sicher, was Sie mit meinen , aber eine Untergrenze von ist einfach - betrachten Sie für eine Kante . Jeder Algorithmus muss prüfen, ob für alle , da sonst die Kante, nach der er nicht gefragt hat, die fehlende sein könnte. ist eine Obergrenze, da dies die Zeit ist, die zum Berechnen eines transitiven Abschlusses benötigt wird. Ω ( | V | 2 ) K n{ e } e ( u , v ) E u , v V O ( | V || E | )nΩ(|V|2)Kn{e}e(u,v)Eu,vVO(|V||E|)
RB

2
Betrachten Sie einen gerichteten Graphen mit Eckpunkten: Quellscheitelpunkte , Zwischenscheitelpunkte , die unmittelbare Nachfolger jedes , und , die unmittelbare Nachfolger jedes sind . Der Digraph ist transitiv, wenn jeder der Bögen im Diagramm vorhanden ist. Dies erfordert die Überprüfung von Kanten. Andererseits kann das Finden eines transitiven Verschlusses in , wobei der Exponent der Matrixmultiplikation ist. Dies sind die bekanntesten Grenzen. s 1 , , s k t 1 , , t k s i u 1 , , u k t i ( s i , u j ) k 2 = ( n / 3 ) 2 = Ω ( n 2) ) O ( n ω ) ω < 2,373n=3ks1,,skt1,,tksiu1,,ukti(si,uj)k2=(n/3)2=Ω(n2)O(nω)ω<2.373
András Salamon

Hat Ihre DAG möglicherweise eine zusätzliche Struktur oder möchten Sie ganz allgemeine Ergebnisse erzielen?
Niel de Beaudrap

Antworten:


9

Im Folgenden werde ich Folgendes zeigen: Wenn Sie einen O ( ) - Zeitalgorithmus haben, um zu überprüfen, ob ein Graph für ein transitiv ist , dann haben Sie ein O ( ) Zeitalgorithmus zum Erkennen eines Dreiecks in einem Knoten-Diagramm, und daher hätten Sie (nach einem Artikel aus FOCS'10 ) einen O ( ) -Zeitalgorithmus zum Multiplizieren von zwei boolesche Matrizen, und daher impliziert dies nach einem Ergebnis von Fischer und Meyer aus den 70er Jahren auch einen O ( ) -Zeitalgorithmus für den transitiven Abschluss. ε > 0 n 3 - ε n n 3 - ε / 3 n × n n 3 - ε / 3n3εε>0n3εnn3ε/3n×nn3ε/3

Angenommen, Sie möchten ein Dreieck in einem Knoten G erkennen . Wir können nun das folgende Diagramm H erstellen . H ist dreigliedrig mit Partitionen I , J , K auf jeweils n Knoten. Hier wird jeder Knoten x von G hat Kopien x I , x J , x K in den Teilen I , J , K . Fügen Sie für jede Kante ( u , v ) von G gerichtete Kanten hinzu (nGHHI,J,KnxGxI,xJ,xKI,J,K(u,v)G und ( u J , v K ) . Addieren Sie für jede Nichtkante ( u , v ) von G die gerichtete Kante ( u I , v K ) .(uI,vJ)(uJ,vK)(u,v)G(uI,vK)

Erstens, wenn ein Dreieck u , v , w enthält , dann ist H nicht transitiv. Dies liegt daran, dass die Kanten ( u I , v J ) , ( v J , w K ) in H sind , ( u I , w K ) jedoch nicht. Zweitens muss, wenn H nicht transitiv ist, ein gerichteter Pfad von einem Knoten s zu einem Knoten t in H existieren, so dass (Gu,v,wH(uI,vJ),(vJ,wK)H(uI,wK)HstH. ist nicht eine gerichtete Kante in H . Die längsten Pfade in H haben jedoch zwei Kanten, und daher muss ein solcher Pfad die Form ( u I , v J ) , ( v J , w K ) und ( u I , w K ) haben , daherist er nicht in H. u , v , w bilden in G ein Dreieck.(s,t)H.H.2(uich,vJ.),(vJ.,wK.)(uich,wK.)H.u,v,wG


1
Das Finden eines transitiven Verschlusses entspricht im Wesentlichen der Matrixmultiplikation. Die Frage ist, ob der Exponent in der Untergrenze von 2 oder der Exponent in der Obergrenze von 2,373 herabgesetzt werden kann. Die von Ihnen demonstrierte Argumentationskette zeigt, dass selbst ein optimaler -Algorithmus zur Überprüfung der Transitivität nur einen O ( n 2.667 ) -Zeitalgorithmus für den transitiven Abschluss ergeben würde - wir haben jedoch bereits einen O ( n 2.373 ) -Zeitalgorithmus . O(n2)O(n2.667)O(n2.373)
András Salamon

Der Punkt ist, dass Black-Box-Reduzierungen existieren. Der O ( ) -Zeitalgorithmus ist alles andere als praktisch. Ein praktischer Transitivitätsprüfungsalgorithmus, der durch die obigen Reduktionen in subkubischer Zeit ausgeführt wird, impliziert jedoch auch einen praktischen für BMM und damit für den transitiven Verschluss. Auch wenn Sie sich nicht für praktische Algorithmen interessieren, ist es durchaus möglich, dass der Verlust des Exponenten aus dem FOCS'10-Papier nicht erforderlich ist und die Dreieckserkennung wahrscheinlich BMM entspricht. n2.373
Virgi

Oh, und natürlich könnten wir die Härte des Transitivitätsproblems nur auf die angenommene Härte der Dreieckserkennung stützen. Es ist zu beachten, dass für die Dreieckserkennung keine besseren Untergrenzen als sind und die beste Obergrenze O ( n ω ) ist . n2O(nω)
Virgi

Wir haben bereits einen subkubischen praktischen Algorithmus, der eine schnelle Matrixmultiplikationsmethode verwendet: siehe zum Beispiel cacm.acm.org/magazines/2014/2/…
András Salamon

2
Das von Ihnen zitierte Papier von Ballard et al. Spricht insbesondere über den Strassen-Algorithmus. Soweit ich weiß, ist keiner der Matrixmultiplikationsalgorithmen, die den Grenzrang verwenden, praktisch. Insbesondere sind mir keine praktischen Algorithmen für Grenzen von unter 2,78 bekannt . ω2.78
Virgi

7

Es sieht so aus, als ob die bekannteste Untergrenze ist, da jede Untergrenze eine Untergrenze für die Boolesche Matrixmultiplikation impliziert. Wir wissen, dass die Transitivitätsprüfung mit einer Booleschen Matrixmultiplikation erreicht werden kann, dh G ist genau dann transitiv, wenn G = G 2 ist .Ω(n2)GG=G2


4

Es ist genauso schwer herauszufinden, ob eine DAG transitiv ist, wie zu entscheiden, ob ein allgemeiner Digraph transitiv ist (was uns zu Ihrer vorherigen Frage zurückbringt :)).

Angenommen, Sie haben einen Algorithmus, der in der Zeit um zu entscheiden, ob eine DAG transitiv ist.O(f(n))

Bei einem gerichteten Graphen können Sie den folgenden zufälligen Algorithmus verwenden, um zu entscheiden, ob G in der Zeit O ( f ( n ) log ( 1 ) transitiv istGGund Fehlerwahrscheinlichkeitδ:O(f(n)log(1δ))δ

 1. for $O(\log{\frac{1}{\delta}})$ iterations:

   1.1. Compute a random permutation on $V$. Denote the result by $<v_1,v_2,...,v_n>$.

   1.2. Set $G'=(V,E\cup \{(v_i,v_j)|i<j\})$ (i.e. compute a random acyclic orientation).

   1.3. If $G'$ (which is acyclic) is not transitive return false.

 2. return true.

Nun ist es offensichtlich, dass, wenn transitiv war, dieser Algorithmus true zurückgibt.G

Nehmen wir nun an, war nicht transitiv. Sei e 1 = ( v i , v j ) , e 2 = ( v j , v k ) E, so dass ( v i , v k ) E (es muss Kanten geben, da G nicht transitiv ist). Die Wahrscheinlichkeit, dass e 1 , e 2G ' ist , ist 1Ge1=(vi,vj),e2=(vj,vk)E(vi,vk)EGe1,e2G , daher ist in jeder Iteration die Wahrscheinlichkeit, dass der AlgorithmusGnicht transitiv darstellt,116G und nachO(log(δ)) -Iterationen beträgt die Ausfallwahrscheinlichkeit höchstensδ.16O(log(δ))δ


1
Danke für die Antwort. Angenommen, ich habe einen Algorithmus zur Entscheidung, ob eine DAG in transitiv ist, wie f ( n ) = Ω ( n 2 ) . Dann kann ich entscheiden, ob ein gerichteter Graph G in O ( f ( n ) ) -Zeit als transitiv ist; 1) Erhalten Sie einen stark verbundenen Digraphen in O ( n 2 ) -Zeit. 2) Überprüfen Sie, ob jede Komponente in O ( n 2 ) vollständig ist.O(f(n))f(n)=Ω(n2)O(f(n))O(n2)O(n2)-Zeit. 3) Überprüfen Sie, ob jedes Komponentenpaar, für das der Komponentendigraph eine Kante enthält, zweifach vollständig ist, dh, es gibt eine Kante von jedem Scheitelpunkt einer Komponente zu jedem Scheitelpunkt der zweiten Komponente in -Zeit. 4) Überprüfen Sie, ob die Komponente Digraph in O ( f ( n ) ) -Zeit transitiv ist. O(n2)O(f(n))
Ekayaaslan

1

Ich denke, dies sollte in linearer Zeit möglich sein, dh wobei n die Anzahl der Eckpunkte und m die Anzahl der Kanten ist. Vielleicht durch Anpassen eines Diagrammdurchlaufschemas an die gerichtete Einstellung? Ein Ausgangspunkt könnte das hier beschriebene LexBFS / LexDFS sein ; Für gerichtete Graphen sollten wir eher die topologische Sortierung als die DFS verwenden. Vielleicht ist es also mit einem LexTSA- Algorithmus möglich, dies zu entdecken?O(n+m)nm


2
Dies ist IMO unwahrscheinlich, da es einen probabilistischen linearen Zeitalgorithmus für die Transitivitätsprüfung in allgemeinen Digraphen geben würde, siehe meine Antwort.
RB

0

In Bezug auf die vorherige Antwort ist hier eine einfache Möglichkeit, einen solchen Algorithmus zu definieren. Weisen Sie jedem Scheitelpunkt einen Index i ( x ) zu , der auf 0 initialisiert ist . Für jedes x sei M ( x ) das Multiset von Indizes seiner Nachbarn. Wir simulieren eine topologische Sortierung, indem wir eine Menge R unerforschter Eckpunkte beibehalten , die auf die gesamte Menge initialisiert sind. Bei jedem Schritt machen wir Folgendes:xi(x)0xM(x)R

  1. Wählen Sie einen Scheitelpunkt dessen Multiset M ( x ) minimal ist (in der Multiset-Reihenfolge);xRM(x)

  2. Aktualisieren auf den aktuellen Schleifenzähler und entfernen x aus R .i(x)xR

Kann dieser Algorithmus für Ihr Problem oder für eine andere Anwendung verwendet werden?


Dies wäre als Kommentar angemessener.
Suresh Venkat
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.