我正在寻找一种可以diff
两个有向无环图(DAG)的算法。也就是说,我想要一种算法,它在第一个 DAG 上产生一系列删除和插入以产生第二个 DAG。
我不是百分百肯定,但我认为最长的公共子序列可以应用于 DAG。我不太关心生成的编辑序列的长度(只要它足够短),而更关心算法的运行时间。
一个复杂的问题是,除了单个根节点之外,我的所有顶点都没有被标记。根节点也是唯一具有零入边的节点。图的边缘被标记,图中的“数据”由从根到叶的路径表示。这类似于 atrie
但使用有向图而不是树。directed acyclic word graph
实际上,我的图表与数据结构非常相似。
这是一个例子。
DAG1
DAG2
要获得 DAG 2,您只需将一个顶点从根添加到另一个带有标签“b”的顶点。从那个顶点到 DAG 1 中的最终“ac”顶点有一条边,还有一条到标签为“d”的新顶点的边。从最后一个顶点到 DAG 1 中的“ac”顶点还有另一条边。我会以 DAG 形式发布一个指向差异的链接,但我不能发布两个以上的链接。
谢谢,希望这足够清晰。