Ich suche einen O (V + E) -Algorithmus, um die transitive Reduktion bei gegebener DAG zu finden.
Das heißt, entfernen Sie so viele Kanten wie möglich, so dass Sie nach dem Entfernen der Kanten immer noch nach v greifen können, wenn Sie v von u aus für willkürliches v und u erreichen könnten.
Wenn dies ein Standardproblem ist, weisen Sie mich bitte auf eine Modelllösung hin.
algorithms
graphs
dag
Karan
quelle
quelle
Antworten:
Wir können dieses Problem lösen, indem wir DFS von jedem Scheitelpunkt aus ausführen.
Die Gesamtkomplexität des Obigen ist die Komplexität des Ausführens von DFS ', was O ( N ( N + M ) ) ist .N O ( N( N+ M) )
quelle
Nicht das, wonach Sie suchen. Aber nur zum Zweck des Wissensaustauschs können Sie dies mit Nachrichten ( | E | ) tun, wenn Sie davon ausgehen, dass jeder Eckpunkt als Prozessor fungiert . Beachten Sie, dass jeder Scheitelpunkt einen vergleichbaren Wert hat. Daher gibt es einige Eckpunkte, die größer sind als alle ihre Nachbarn. Diese Eckpunkte führen Folgendes aus:O ( | E| )
Wenn nun ein Knoten eine Nachricht von jedem größeren Nachbarn empfangen hat (dh alle Kanten ( v ' , v ) sind entweder enthalten oder nicht enthalten), verhält sich der Knoten v so , als ob er der größte in seiner Nachbarschaft wäre zuvor erwähnten 4 Schritte.v ( v′, v ) v
Dieser Algorithmus endet in Nachrichten ( | E | ) in einer verteilten Umgebung. Ich weiß, das ist nicht das, wonach du fragst.O ( | E| )
quelle
Lemma: Wenn es eine Kante V -> Y gibt und Y auch ein indirekter Nachfolger von V ist (z. B. V -> W -> + Y), dann ist die Kante V -> Y transitiv und nicht Teil der transitiven Wurzel.
Methode: Verfolgen Sie den transitiven Abschluss jedes Scheitelpunkts, indem Sie in umgekehrter topologischer Reihenfolge vom Endpunkt zum Anfangsscheitelpunkt arbeiten. Die Menge der indirekten Nachfolger von V ist die Vereinigung der transitiven Abschlüsse der unmittelbaren Nachfolger von V. Die transitiven Abschlüsse von V sind die Vereinigung ihrer indirekten Nachfolger und ihrer unmittelbaren Nachfolger.
Algorithmus:
Dies setzt voraus, dass Sie einen effizienten Weg haben, um Verticesätze (z. B. Bitmaps) zu verfolgen, aber ich denke, diese Annahme wird auch in anderen O (V + E) -Algorithmen getroffen.
Ein potenziell nützlicher Nebeneffekt ist, dass er den transitiven Verschluss jedes Scheitelpunkts von G findet.
quelle
Ich habe das gleiche Problem gelöst, aber es war nicht genau dasselbe. Es wurde nach der Reduzierung nach dem Minimum an Kanten im Diagramm gefragt, sodass die ursprünglich verbundenen Scheitelpunkte weiterhin verbunden sind und keine neuen Verbindungen hergestellt werden. Es ist klar, dass es nicht heißt, den verkleinerten Graphen zu finden, sondern wie viele redundante Kanten vorhanden sind. Dieses Problem kann mit O (V + E) gelöst werden. Der Link zur Erklärung lautet https://codeforces.com/blog/entry/56326 . Aber ich denke, um das Diagramm tatsächlich zu machen, wird es eine höhere Komplexität haben als O (N).
quelle