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?
11
Antworten:
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.
quelle
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
quelle
(Ähnlich wie Prabus Lösung ... aber detaillierter)
quelle