编辑距离问题
来源:互联网 发布:淘宝上添加剂少的零食 编辑:程序博客网 时间:2024/06/02 21:26
题目:
设A和B是2个字符串。要用最少的字符操作将字符串A转换为字符串B。这里所说的字符操作包括 (1)删除一个字符; (2)插入一个字符; (3)将一个字符改为另一个字符。将字符串A变换为字符串B所用的最少字符操作数称为字符串A到 B的编辑距离,记为d(A,B)。对于给定的字符串A和字符串B,计算其编辑距离 d(A,B)。
算法描述:
① 输入目标字符串fxpimu和初始字符串xwrs;
② 建立一个备忘录,行数为初始字符串长度加1,列数为目标字符串长度+1;
如下图:
0
f
x
p
i
m
u
0
x
w
r
s
③ 0的意思是空字符串意思,用于备忘录的初始化数据,备忘录上填写的为由此字符串转化为目的字符串所需要的最少字符操作数;
④ 表格一开始先填上由字符串转变为空字符串所需要的操作数:
0
f
x
p
i
m
u
0
0
1
2
3
4
5
6
x
1
w
2
r
3
s
4
⑤ 然后由上到下,左到右填表,每个值都通过比较左边,上边,左上边的值得一个最小值求出来,这三种值代表着三种方法;
⑥ 假设现在是求x→f的最少字符操作值,现在有三种情况,
第一种:左边的值为1,意即由x→空字符串所需要的字符操作数是1,(x→空字符)→(x→f)=2;
第二种:上边的值为1,意即由f→空字符串所需要的字符操作数是1,(f→空字符)→(f→x)=2;
第三种:左上边的值为0,意即由空字符变空字符所需要的字符操作数为0,0→0=0,此时x→f,即代表两个字符串同时加上一个新的字符,然后对这个字符进行比较,若相同则0+0=0,若不同则0+1=1;
⑦ 最后的备忘录结果为
0
f
x
p
i
m
u
0
0
1
2
3
4
5
6
x
1
1
1
2
3
4
5
w
2
2
2
2
3
4
5
r
3
3
3
3
3
4
5
s
4
4
4
4
4
4
5
⑧ 最后原问题的最优解为:最右下角的值;
算法时间及空间复杂度分析:
时间复杂度:所用的时间主要用于创建三个值互相对比以及进行填表,所以时间复杂度为T(n) = O(n²)。
空间复杂度:算法中辅助空间并不随着数组长度n而线性增大,所以空间复杂度为O(1)。
递归公式:
递归公式: c[i][j]=j, i==0
c[i][j]=i, j==0
c[i][j]=min{c[i-1][j]+1,c[i][j-1]+1,c[i-1][j-1]+f(a,b,i,j)}, i>0,j>0
f()=if(a[j-1]==b[i-1])return 0;else return 1;
- 编辑距离问题
- 【dp】编辑距离问题
- 王晓东 编辑距离问题
- 编辑距离问题 dp
- 编辑距离问题
- 王晓东 编辑距离问题
- 编辑距离问题
- 编辑距离问题
- 编辑距离问题(1)
- 编辑距离问题
- DP_编辑距离问题
- 编辑距离问题(1)
- 编辑距离问题
- 编辑距离问题
- 编辑距离问题
- 编辑距离问题
- dp 编辑距离问题
- 编辑距离问题
- 设计模式C++实现(13)——中介者模式
- Linux网络连接模式以及修改静态IP
- leetcode 70. Climbing Stairs爬梯子(DP问题)
- 小班研讨课的感想
- isEqual
- 编辑距离问题
- 2015年蓝桥杯JavaB组表格计算
- C# Linq查询的基本练习
- Python基础学习(3)
- C#事件学习
- 删除元素,在原数组上
- numpy.linspace使用详解
- maven多工程应用,spring MAVEN多个子模块之间的调用
- 外观模式