编辑距离及编辑距离算法
来源:互联网 发布:js特效 编辑:程序博客网 时间:2024/05/01 06:55
编辑距离及编辑距离算法
编辑距离概念描述:
编辑距离,又称Levenshtein距离,是指两个字串之间,由一个转成另一个所需的最少编辑操作次数。许可的编辑操作包括将一个字符替换成另一个字符,插入一个字符,删除一个字符。
例如将kitten一字转成sitting:
- sitten (k→s)
- sittin (e→i)
- sitting (→g)
俄罗斯科学家Vladimir Levenshtein在1965年提出这个概念。
问题:找出字符串的编辑距离,即把一个字符串s1最少经过多少步操作变成编程字符串s2,操作有三种,添加一个字符,删除一个字符,修改一个字符
解析:
首先定义这样一个函数——edit(i, j),它表示第一个字符串的长度为i的子串到第二个字符串的长度为j的子串的编辑距离。
显然可以有如下动态规划公式:
- if i == 0 且 j == 0,edit(i, j) = 0
- if i == 0 且 j > 0,edit(i, j) = j
- if i > 0 且j == 0,edit(i, j) = i
- if i ≥ 1 且 j ≥ 1 ,edit(i, j) == min{ edit(i-1, j) + 1, edit(i, j-1) + 1, edit(i-1, j-1) + f(i, j) },当第一个字符串的第i个字符不等于第二个字符串的第j个字符时,f(i, j) = 1;否则,f(i, j) = 0。
0failing0 s a i l n
0failing001234567s1 a2 i3 l4 n5
计算edit(1, 1),edit(0, 1) + 1 == 2,edit(1, 0) + 1 == 2,edit(0, 0) + f(1, 1) == 0 + 1 == 1,min(edit(0, 1),edit(1, 0),edit(0, 0) + f(1, 1))==1,因此edit(1, 1) == 1。 依次类推:
0failing001234567s11234567a22 i3 l4 n5edit(2, 1) + 1 == 3,edit(1, 2) + 1 == 3,edit(1, 1) + f(2, 2) == 1 + 0 == 1,其中s1[2] == 'a' 而 s2[1] == 'f'‘,两者不相同,所以交换相邻字符的操作不计入比较最小数中计算。以此计算,得出最后矩阵为:
0failing001234567s11234567a22123456i33212345l44321234n55432223//主要二维数组的动态分配与释放操作
#include<iostream>using namespace std;int min(int a,int b){return a<b?a:b;}int edit(char *s,char *t){int len1=strlen(s);int len2=strlen(t);int **location=new int*[len1];int i,j,d,temp;for(i=0;i<len1;i++){location[i]=new int[len2];}for(i=0;i<len1;i++){location[i][0]=i;}for(i=0;i<len2;i++)location[0][i]=i;for(i=1;i<len1;i++){for(j=1;j<len2;j++){temp=min(location[i-1][j]+1,location[i][j-1]+1);if(s[i-1]==t[j-1])d=0;elsed=1;location[i][j]=min(temp,location[i-1][j-1]+d);}}for(i=0;i<len1;i++){for(j=0;j<len2;j++){cout<<location[i][j]<<" ";}cout<<endl;}int dis=location[len1-1][len2-1];for(i=0;i<len1;i++){delete [] location[i];location[i]=NULL;}delete [] location;location=NULL;return dis;}int main(){char str1[100],str2[100];cin>>str1;cin>>str2;cout<<edit(str1,str2)<<endl;return 1;}
0 0
- 编辑距离及编辑距离算法
- 编辑距离及编辑距离算法
- 编辑距离及编辑距离算法
- 编辑距离及编辑距离算法
- 编辑距离及编辑距离算法
- 编辑距离及编辑距离算法
- 编辑距离及编辑距离算法
- 编辑距离及编辑距离算法
- 编辑距离及编辑距离算法
- 编辑距离及编辑距离算法
- 编辑距离及编辑距离算法 | Levenshtein距离 |DP
- 编辑距离与编辑算法
- 编辑距离算法-java
- 编辑距离算法
- 编辑距离算法实现
- 编辑距离算法
- [算法]计算编辑距离
- 字符串编辑距离算法
- 清除元素浮动带来的影响
- 自定义控件
- openVswitch(OVS)源代码的分析技巧(哈希桶结构体为例)
- MySQL数据库集群进行正确配置步骤
- Ubuntu14.04安装QQ2013
- 编辑距离及编辑距离算法
- Duilib扩展《01》— 双击、右键消息扩展
- LateX 备忘
- 《Maven实战》笔记二:使用Archetype生成项目骨架
- 面试遇到的一些问题
- 嵌入式 libevent功能使用简介
- java.lang.NoClassDefFoundError错误的一种解决办法
- 统治世界的十大算法
- r0遍历系统进程方法总结