标签:编程之美 搜索 编辑距离 字符串相似度
在《编程之美》之3.3讲到了计算字符串的相似度,请看下图
原文作者做了很详细的解释,有兴趣的朋友可以参考原文。
其实,总结为一点,是求两个字符的编辑距离,关于编辑距离,可以参考这儿
http://zh.wikipedia.org/wiki/%E7%B7%A8%E8%BC%AF%E8%B7%9D%E9%9B%A2
求两个字符串的编辑距离是有公式的,公式如下:
所以,根据这个公式,我们实现代码为:(C++)
int minimum(int a,int b,int c) { return min(a,min(b,c)); } int LevenshteinDistance(const char* s, int len_s, const char* t, int len_t) { /* base case: empty strings */ if (len_s == 0) return len_t; if (len_t == 0) return len_s; int cost = 0; /* test if last characters of the strings match */ if (s[len_s-1] == t[len_t-1]) cost = 0; else cost = 1; /* return minimum of delete char from s, delete char from t, and delete char from both */ return minimum(LevenshteinDistance(s, len_s - 1, t, len_t ) + 1, LevenshteinDistance(s, len_s , t, len_t - 1) + 1, LevenshteinDistance(s, len_s - 1, t, len_t - 1) + cost); }
求出来编辑距离,取倒数就是上面提到的相似度。
标签:编程之美 搜索 编辑距离 字符串相似度
原文地址:http://blog.csdn.net/zhanghaiyang9999/article/details/41324749