Anzahl der erreichbaren Scheitelpunkte in der DAG für jeden Scheitelpunkt


11

Sei ein azyklisch gerichteter Graph, so dass der Außengrad eines beliebigen Scheitelpunkts O ist ( log | V | ) . Für jeden Scheitelpunkt von G können wir die Anzahl der erreichbaren Scheitelpunkte zählen, indem wir einfach dfs von jedem Scheitelpunkt ausführen, und dies dauert O ( | V | | E | ) Zeit. Gibt es einen besseren Weg, um dieses Problem zu lösen?G(V,E)O(log|V|)GO(|V||E|)



1
@ Radu ist das ein direktes Duplikat? es klingt so
Suresh Venkat

@Suresh, im Vergleich zu meiner Frage hat diese eine Obergrenze für den Scheitelpunktgrad und fragt nicht nach Untergrenzen. Dies sind meiner Meinung nach kleine Unterschiede, daher würde ich es als Duplikat betrachten, aber ich habe kein starkes Gefühl dafür.
Radu GRIGore

1
ok also lassen wir es so wie es ist.
Suresh Venkat

4
Die Antwort von virgi auf meine Frage impliziert einen -Algorithmus für diesen. O(|V|2)
Radu GRIGore

Antworten:


5

Der beste exakte Algorithmus wird in der Zeit O (min {mn, n ^ 2.38}) unter Verwendung einer schnellen binären Matrixmultiplikation ausgeführt. Es gibt jedoch einen Zufallsalgorithmus, der in der Zeit O (m + n) ausgeführt wird und die Anzahl der erreichbaren Knoten von jedem Knoten mit einem kleinen relativen Fehler schätzt. Weitere Informationen finden Sie im Artikel " Framework zur Größenschätzung mit Anwendungen für den transitiven Verschluss und die Erreichbarkeit" "von Edith Cohen.


-1

Ich bin hier kein Experte, ich werde es versuchen.

1) Da es sich um DAG handelt, sollte es einen Senkenscheitelpunkt haben, dh einen Scheitelpunkt mit outdegree 0. Suchen Sie einen Senkenscheitelpunkt, sagen Sie x, und fügen Sie {x} als erreichbaren Scheitelpunkt zu Nachbar (x) hinzu. Entfernen Sie x und wiederholen Sie den Vorgang, bis das Diagramm leer wird


Da der Out-Degree begrenzt ist, scheint es sinnvoller zu sein, mit einer Quelle zu beginnen?
András Salamon

@ andras-salamon: nein, weil du nicht trivial weißt, wie viele Knoten von einer Quelle aus erreichbar sind. Sie tun das nicht (Null) für ein Waschbecken.
Martin B.

O(|V||E|)xO(|V|)O(|V|)O(|V|)O(|V||E|)

-2

(Ähnlich wie Prabus Lösung ... aber detaillierter)

N(v)vreach(v)

  1. O(|V|+|E|)
  2. vreach(v)=nN(v)reach(n)

|E|O(|V|+|E|)

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.