Ich suche nach einem Algorithmus auf "Invert" (? Rückwärtsdrehung inside-out) eine DAG:Algorithmus Sucht zu invertieren (? Reverse Spiegel dreht inside-out) ein DAG
A* # I can't ascii-art the arrows, so just
/\ # pretend the slashes are all pointing
B C # "down" (south-east or south-west)
//\ # e.g.
G E D # A -> (B -> G, C -> (E -> F, D -> F))
\/
F
Die Darstellung, die ich benutze, ist unveränderlich eine echte DAG (es gibt keine "Eltern" -Zeiger). Ich würde gerne den Graph in irgendeiner Weise durchqueren während der Erstellung eines "Spiegelbild" Graph mit äquivalenten Knoten, aber mit die Richtung der Beziehungen zwischen Knoten invertiert.
F*
/\
G* E D # F -> (E -> C -> A, D -> C -> A), G -> B -> A
\ \/ #
B C # Again, arrows point "down"
\/ #
A #
Also die Eingabe ist eine Menge von "Wurzeln" (hier, {A}). Die Ausgabe sollte eine Menge von "Wurzeln" in der Ergebnisgrafik sein: {G, F}. (Root meine ich einen Knoten ohne eingehende Referenzen. Ein Blatt ist ein Knoten ohne abgehenden Referenzen.)
Die Wurzeln des Eingangs der Blätter des Ausgangs und Visum wurden versa. Die Transformation sollte eine Umkehrung von sich selbst sein.
(Für die Neugierigen, würde Ich mag eine Funktion zu einer Bibliothek hinzufügen Ich verwende zu XML darstellen für strukturelle Abfrage-, mit dem ich jeden Knoten in der erste Baum zu seinem „Spiegelbild“ Karte kann in der zweite Baum (und zurück wieder) mehr Navigations Flexibilität für meine Abfrage Regeln zur Verfügung zu stellen)
Gibt es einen Grund, warum Sie die "Eltern" -Zeiger nicht speichern können? Ich würde mir vorstellen, dass das die Invert-Operation kostenlos zur Verfügung stellen würde, indem man Tiefensuche (oder was auch immer) von den Blattknoten aus durchführt. – Ben