我已经实现了algorithm by Zhang and Shasha来计算两棵树之间的最小编辑距离。一切都很好,我对当前的运行时间非常满意。
现在我还想生成一个突出显示已更改/已删除/已插入节点的差异。根据他们的论文,很自然地要求产生计算距离的映射并且根据this presentation的最后幻灯片,似乎可以从最后的森林距离表和树距离中容易地提取映射。表。不幸的是,我还没有弄清楚确切的规则。
任何其他说明都将受到高度赞赏。非常感谢!
答案 0 :(得分:3)
好的,我终于自己想出来了。为了生成两棵树节点的最佳映射,分别有m和n个节点,你需要在林表中进行一些回溯。
对于从(m,n)森林距离表开始的每个区域(x,y),执行以下操作:如果通过对区域(x',y')求和得到最小值编辑/删除/插入成本,然后记下映射并转到当前林距离表的字段(x',y')。另一方面,如果通过将当前森林距离表中的字段(x',y')与树距离表中的字段(tx,ty)相加来获得最小值,则转到字段(x') ,y')从当前林距离表AND到森林表中对应于树(tx,ty)的字段(tx,ty)。您现在需要单独继续在两个林表中进行回溯并从两者中收集映射。