Definitionen: Sei eine DAG ohne Selbstschleifen, und und sind Graphen.
Input: . Ausgabe: Die relationale Zusammensetzung relationale Zusammensetzung in .
- Fall 1:. Zwei for-Schleifen über und : Runtime .
- Fall 2:
- Zeichnen Sie den Graphen : . Wir nennen Kanten von schwarz und von rot.
- Sortieren Sie es topologisch (Kahn: ). Die erste Ebene sei , und die Kanten wechseln von einer Ebene zu einer höheren Ebene.
- Zeichnen Sie dieses Diagramm zweimal.
- Entfernen Sie in der ersten Kopie jede rote Kante, die auf einer geraden Ebene beginnt, und jede schwarze Kante, die auf einer ungeraden Ebene beginnt: .
- Entfernen Sie in der zweiten Kopie alle "schwarzen geraden" und "roten ungeraden": .
- Für das erste Exemplar:
- für alle Knoten auf Ebene
- für alle Knoten auf Ebene
- Berichtskante (Laufzeit ).
- Für die zweite Kopie: Gleiches gilt für " ".
- Vereinigen Sie die gemeldeten Knoten und werfen Sie Duplikate aus (ich hoffe, die Diagrammdarstellung erlaubt dies).
Könnten einige von Ihnen bitte meinen Algorithmus überprüfen und prüfen, ob
- das ist richtig
- es ist in
Wenn es korrekt ist, "existiert" mein Algorithmus bereits? Wenn nicht, könnten Sie eine Alternative anbieten? Ich werde die erste Antwort akzeptieren, aber positiv bewerten, wenn noch mehr Leute so freundlich sind, dies zu überprüfen.
BEARBEITEN: Schritt 6 Scheint manchmal in . Ich wünschte, das wäre nicht wahr. Hat jemand einen funktionierenden Algorithmus?
Satz 2.29 auf Seite 60 der Parsing-Theorie von Sippu und Soisalon-Soininen gibt einen Algorithmus zur Berechnung (unter anderem Operationen auf Beziehungen) der Zusammensetzung zweier Beziehungen an. Der Algorithmus läuft in der Zeit , wobei die Zeit ist, die benötigt wird, um Vereinigungs- oder Zuweisungsoperationen an Scheitelpunktsätzen durchzuführen. Das Ergebnis dieser Operation ist eine Menge von Scheitelpunkten pro Scheitelpunkt, die seine Nachbarn darstellen. Dieser Algorithmus arbeitet mit beliebigen Graphen, nicht nur mit azyklischen.O(t(|V|+|E|)) t
quelle