计算俩个NSString的相似度
来源:互联网 发布:http 了解情况js 编辑:程序博客网 时间:2024/05/16 00:53
最近项目中需要做一个用户通讯录好友和某开放平台的用户名进行相似度匹配,根据动态规划的算法处理了一下大致如下:
//
static inline int min (int a, int b, int c)
{
int min = a;
a = b < c ? b : c;
return min < a ? min : a;
}
/*
计算相似度,数值越大越相似,最大为1,表示相同,
*/
- (float)sim:(NSString *)str1 str2:(NSString *)str2
{
int ld = [self ld:str1 str2:str2];
return 1-(float)ld/(float)MAX(str1.length, str1.length);
}
/*
*计算距离
*/
- (int)ld:(NSString *)str1 str2:(NSString *)str2
{
int n = str1.length;
int m = str2.length;
if(n == 0) {
return m;
}
if(m == 0) {
return n;
}
int d[n+1][m+1]; //矩阵
int i; //遍历str1的
int j; //遍历str2的
unichar ch1; //str1的
unichar ch2; //str2的
int temp; //记录相同字符,在某个矩阵位置值的增量,不是0就是1
for(i=0; i<=n; i++) { //初始化第一列
d[i][0] = i;
}
for(j=0; j<=m; j++) { //初始化第一行
d[0][j] = j;
}
for(i=1; i<=n; i++) { //遍历str1
ch1 = [str1 characterAtIndex:(i-1)];
//去匹配str2
for(j=1; j<=m; j++) {
ch2 = [str2 characterAtIndex:(j-1)];//str2.charAt(j-1);
if(ch1 == ch2) {
temp = 0;
} else {
temp = 1;
}
//左边+1,上边+1,左上角+temp取最小
d[i][j] = min(d[i-1][j]+1, d[i][j-1]+1, d[i-1][j-1]+temp);
}
}
return d[n][m];
}
- 计算俩个NSString的相似度
- 相似度的计算
- 计算字符串的相似度
- 计算字符串的相似度
- 计算字符串的相似度
- 计算字符串的相似度
- 计算字符串的相似度
- 计算字符串的相似度
- 计算字符串的相似度
- 计算字符串的相似度
- 计算字符串的相似度
- 计算字符串的相似度
- 计算字符串的相似度
- 计算字符串的相似度
- 计算字符串的相似度
- 计算字符串的相似度。
- 计算字符串的相似度
- 计算字符串的相似度
- 影响计算机算法世界的十位大师(ZT)
- css元素分类
- 笨笨菜鸟学电脑-自我介绍篇
- Minimum Depth of Binary Tree - LeetCode
- VS2010创建和调用动态链接库
- 计算俩个NSString的相似度
- JavaWeb之数据库部分--MySQL
- MFC开发积累
- 连号区间数 蓝桥杯
- python corrector
- Rational Rose启动和退出时报错
- mysql 主从同步过程详解、主从延迟原理分析
- 关于Ubuntu中zeitgeist-fts进程的问题
- logback logback.xml常用配置详解(一)<configuration> and <logger>