求两字符串的距离的算法

来源:互联网 发布:撒旦诗篇 知乎 编辑:程序博客网 时间:2024/05/16 10:30

莱文斯坦距离(LD)用于衡量两个字符串之间的相似度。 以下我们称这两个字符串分别为 s (原字符串) 和 t (目标字符串)。莱文斯坦距离被定义为''将字符串 s 变换为字符串 t 所需的删除、插入、替换操作的次数''。 例如: s="test", t="test", 那么 LD(s,t)=0,因为不需要做任何变换两者已相等; s="test", t="tent", 那么 LD(s,t)=1,因为s变换为t只需做一次替换(将"s"替换为"n")。莱文斯坦距离越大,字符串的相似程度越低。 inline int min_in_three ( int i, int j, int k ) { int ret = min( i, j); return min(ret, k); } // compare two char, if the same, return 0, else 1 int diff (char *left, char *right) { return (*left)==(*right)?0:1; } int CalcDistance ( char *left, char * right, int n_left, int n_right ) { if ( n_left == 0) { return n_right; } if ( n_right == 0) { return n_left; } return min_in_three( 1 + CalcDistance( left, right, n_left-1, n_right), 1 + CalcDistance( left, right, n_left, n_right-1), diff( left+n_left, right+n_right) + CalcDistance( left, right, n_left-1, n_right-1)); } int main() { char *p = "snowy"; char *q = "sunny"; int l_p = strlen(p); int l_q = strlen(q); int i_distance = CalcDistance(p, q, l_p, l_q); cout<

原创粉丝点击