【算法】树的编辑距离

    字符串编辑距离定义了一个从字符串转换到另一个字符串最少需要的操作次数,操作次数越少,则从侧面证明两个字符串较为相似,它从新的角度定义了两个事物相似度的计算方法,这种事物并不仅限于字符串,也可以是其他结构比如树。

树的编辑操作同样有三种:

1.插入:向一颗树中插入一个节点;

2.删除:从一棵树中删除一个节点;

3.转换:将一棵树中的节点转换为其他的节点。

    计算树的编辑距离就是求从一棵树转换为另一棵树所需要树的编辑操作的最少次数。

    假设现在对两棵树T和T’求解编辑距离,首先要找到他们之间的映射,也就是相同的部分,然后再对不同的部分进行操作进行转换。

    上图是T和T'之间的映射图,T中没有虚线连接的点是需要删除的点,T'中没有虚线连接的点是需要插入的点,虚线连接的若是不同的两个点则进行转换操作,若连接的是相同的点则不进行任何操作。虚线连接的部分称为映射,它可以用一个三元组(M,T,T')来表示,M(i,j)表示T中节点i和T'中节点j的映射,i和j满足以下关系:

1. 1<=i<=|T|,1<=j<=|T'|;

2.对于M(i1,j1)和M(i2,j2):

    i1=i2当且仅当j1=j2;

    i1<i2当且仅当j1<j2;

    T[i1]是T[i2]的祖先或后继节点当且仅当T'[j1]是T'[j2]的祖先或后继节点。

令M为T到T'的一个映射,I和J分别为T和T'中未连接的节点,则映射代价可以用如下公式表示:

上式的三个部分分别对应转换、删除、插入的编辑代价,T和T'的编辑距离可以通过计算cost(M)得到。

    该算法基于字符串的编辑距离算法的启发,定义了从一棵树转换为另一棵树的三种基本操作,并称这些操作的最少次数为树的编辑距离该算法采用动态规划的方法,从根节点出发,每次比较上一层已经配对的节点的儿子节点,确定本层节点的一个最佳的对应关系,也就是找到两棵树之间当前层最相似的儿子节点,而没有参与到对应关系的节点则产生距离。由于该算法只需对两棵树同一层节点的相似度进行考虑,极大地简化了问题,所以有O(nr)的最坏时间复杂度,其中n代表书中节点个数,r代表树中节点平均儿子数。

猜你喜欢

转载自blog.csdn.net/weixin_39837402/article/details/81049977