Ich bin auf der Suche nach einem Algorithmus, der diff
zwei Directed Azyklische Graphen (DAGs) kann. Das heißt, ich möchte einen Algorithmus, der eine Sequenz von Deletionen und Insertionen auf der ersten DAG erzeugt, um die zweite DAG zu erzeugen.Diff für gerichtete azyklische Graphen
Ich bin nicht hundertprozentig sicher, aber ich denke, eine längste gemeinsame Subsequenz kann auf die DAGs angewendet werden. Ich bin weniger besorgt über die Länge der resultierenden Editiersequenz (solange sie kurz genug ist) und mehr um die Laufzeit des Algorithmus besorgt.
Eine Komplikation ist, dass keiner meiner Vertices mit Ausnahme eines einzelnen Wurzelknotens beschriftet ist. Der Wurzelknoten ist auch der einzige Knoten mit Null-In-Kanten. Die Kanten des Diagramms sind beschriftet, und die "Daten" im Diagramm werden durch die Pfade von der Wurzel bis zu den Blättern dargestellt. Dies ist ähnlich zu einem trie
, aber mit einem gerichteten Graphen anstelle eines Baumes. Tatsächlich sind meine Graphen der directed acyclic word graph
Datenstruktur sehr ähnlich.
Hier ist ein Beispiel.
DAG1
DAG2
DAG 2 zu erhalten, fügen Sie einfach eine Ecke von der Wurzel mit dem Label 'b' zu einem anderen Eckpunkt. Von diesem Eckpunkt gibt es eine Kante zum letzten "ac" Vertex in DAG 1 und eine Kante zu einem neuen Eckpunkt, dessen Label "d" ist. Von diesem letzten Eckpunkt aus gibt es eine weitere Kante zum 'ac'-Eckpunkt in DAG 1. Ich würde einen Link zum diff im DAG-Formular posten, aber ich kann nicht mehr als zwei Links posten.
Danke und hoffe, das ist lesbar genug.
Kann ein Knoten hat zwei Kanten, die davon ausgehen, die identisch gekennzeichnet sind? – borrible
@borrible: Das ist eine gute Frage, ich glaube nicht, dass sie das. Würde es das drastisch ändern, wenn sie es tun würden? – Nomad010