【dp】编辑距离问题

问题描述:

 设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.
题目来源:《算法设计与分析》第三章动态规划

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值