求字符串编辑距离的递推和递归实现
2014-03-26 10:47
381 查看
递推实现:
int CalculateDis_DP(char *str1,char *str2) { int i, j; int len1=strlen(str1), len2=strlen(str2); for (i=0; i<=len2; i++) d[0][i] = i; for (i=0; i<=len1; i++) d[i][0] = i; for (i=1; i<=len1; i++) for (j=1; j<=len2; j++) { int cost = (str1[i] == str2[j]) ? 0 : 1; int deletion = d[i-1][j] + 1; int insertion = d[i][j-1] + 1; int substitution = d[i-1][j-1] + cost; d[i][j] = min(deletion,insertion,substitution); } return d[len1][len2]; }递归实现:
int CalculateDis_Recurse(char str1[], int astart, int aend, char str2[], int bstart, int bend) { if (astart > aend) { if (bstart < bend) return bend-bstart+1; else return 0; } if (bstart > bend) { if (astart < aend) return aend-astart+1; else return 0; } if (str1[astart] == str2[bstart]) { return CalculateDis_Recurse(str1, astart+1, aend, str2, bstart+1, bend); } else { int min1 = CalculateDis_Recurse(str1, astart+1, aend, str2, bstart, bend); int min2 = CalculateDis_Recurse(str1, astart, aend, str2, bstart+1, bend); int min3 = CalculateDis_Recurse(str1, astart+1, aend, str2, bstart+1, bend); return min(min1,min2,min3)+1; } }
相关文章推荐
- 字符串编辑距离(C递归实现)
- 字符串相关算法(编辑距离,最大公共字串)C#实现版
- 动态规划(最小字符串编辑距离实现)
- Python实现求两个字符串的最短编辑距离
- 【Algorithm】字符串编辑距离(Levenshtein距离)C++算法实现
- java实现编辑距离算法,计算字符串相似度
- 字符串反转-编辑距离-约瑟夫环的实现
- 相似字符串(字符串编辑)最短距离(非递归版本)
- 用C#实现字符串相似度算法(编辑距离算法 Levenshtein Distance)
- 【动态规划】字符串最小编辑距离Java实现
- 字符串编辑距离的c#实现
- 字符串编辑距离的几种实现
- C++实现两个字符串之间的Levenshtein Distance(编辑距离)
- 每天一个JavaScript实例-递归实现反转数组字符串
- C语言:编写reverse_string(char * string)(递归实现)函数,将参数字符串中的字符反向排列
- 最大子序列、最长递增子序列、最长公共子串、最长公共子序列、字符串编辑距离(链接)
- 两个字符串的最小编辑距离 Edit Distance
- java 用递归实现:输入一个整数,用字符串逆序输出,例如输入123,输出321 ,不使用全局变量
- 字符串编辑距离
- 求两个字符串的编辑距离