【dp】编辑距离问题
2011-08-31 00:38
190 查看
问题描述: | 设A 和B 是2 个字符串。要用最少的字符操作将字符串A 转换为字符串B。这里所说的字 符操作包括 (1)删除一个字符; (2)插入一个字符; (3)将一个字符改为另一个字符。将字 符串A变换为字符串B 所用的最少字符操作数称为字符串A到B 的编辑距离,记为 d(A,B)。 | |
编程任务: | 试设计一个有效算法,对任给的2 个字符串A和B,计算出它们的编辑距离d(A,B)。 | |
数据输入: | 输入的第一行是字符串A,文件的第二行是字符串B。 | |
结果输出: | 程序运行结束时,将编辑距离d(A,B)输出。 | |
样例: | fxpimu xwrs | 5 |
核心思想 | f[i,j]=min{f[i-1,j],f[i,j-1],f[i-1,j-1]}+1,s1前i个字符s2前j个字符匹配的最小编辑距离。预处理 f[i,0]、f[0,i] |
var f:array[0..2000,0..2000]of longint; s1,s2:ansistring; i,j:longint; function min(a,b:longint):longint; begin ifa>b then exit(b); exit(a); end; function max(a,b:longint):longint; begin ifa<b then exit(b); exit(a); end; begin assign(input,'p34.in');reset(input); assign(output,'p34.out');rewrite(output); readln(s1); readln(s2); fillchar(f,sizeof(f),100); f[0,0]:=0; fori:=1 to length(s1) do f[i,0]:=i; fori:=1 to length(s2) do f[0,i]:=i; fori:=1 to length(s1) do forj:=1 to length(s2) do ifs1[i]=s2[j] then f[i,j]:=f[i-1,j-1] else f[i,j]:=min(min(f[i-1,j],f[i,j-1]),f[i-1,j-1])+1; writeln(f[length(s1),length(s2)]); close(input);close(output); end.题目来源:《算法设计与分析》第三章动态规划
相关文章推荐
- dp 编辑距离问题
- 算法设计课后题;编辑距离问题;注意DP的设计;
- 51nod 编辑距离问题 dp
- DP_编辑距离问题
- NOJ 1224 编辑距离问题 (线性dp 分类)
- [dp]编辑距离问题
- Codevs 2598 编辑距离问题 dp
- sdut 1728 编辑距离问题( dp )
- codevs 2598 编辑距离问题(DP)
- 编辑距离问题 【DP 初步】
- 哈理工OJ 1284 编辑距离(DP问题)
- DP-编辑距离问题
- 51Nod 1183 编辑距离(DP—编辑距离问题)
- [动态规划]背包问题(找零/子集和/编辑距离)
- 相近字符串的匹配--编辑距离问题
- fafu—1174 编辑距离 DP
- 动态规划求解编辑距离问题
- 最优编辑距离问题
- 动态规划之编辑距离问题
- 编辑距离(dp)