算法第三章实验报告

一、实践题目

编辑距离问题 (25 分)
 

设A和B是2个字符串。要用最少的字符操作将字符串A转换为字符串B。这里所说的字符操作包括 (1)删除一个字符; (2)插入一个字符; (3)将一个字符改为另一个字符。 将字符串A变换为字符串B所用的最少字符操作数称为字符串A到 B的编辑距离,记为d(A,B)。 对于给定的字符串A和字符串B,计算其编辑距离 d(A,B)。

二、问题描述

将A字符串通过最少的步骤变成B字符串,用动态规划的方法计算其编辑距离d(A,B)

三、算法描述

1、定义一个二维数组d用于存放最小编辑距离。

2、初始化  

for(int j=1;j<=lb;j++) d[0][j]=d[0][j-1]+1;
for(int i=1;i<=la;i++) d[i][0]=d[i-1][0]+1;

3、找出递归式。插入操作:  d[i,j]=d[i,j-1]+1   删除操作:d[i,j]=d[i-1,j]+1   替换操作:d[i,j]=d[i-1,j]-1+1(Ai≠Bj)/0(Ai=Bj)

4、填表顺序为从上到下,从左往右。

四、算法时间复杂度以及空间复杂度的分析

算法采用动态规划的思想且通过填表的策略,设字符串A的长度为m,字符串B的长度n。则在每一步的操作中所用的时间为:

①创建二维数组:o(n);

②填表:o(m) + o(n);

③填表:o(m * n);

综上,本题所用算法的时间复杂度为o(m * n)。

而程序中开辟的辅助空间主要为二维数组d,故空间复杂度为o(m * n)。

五、心得体会

动态规划与分治法有相似之处,就是将问题分成若干个子问题求解,但是有些子问题会被计算多次,此时可以用一个表来记录已解决子问题的答案,解决动态规划问题最重要的是要找到递归式,要对问题分块分析。

六、动态规划的个人体会和思考

动态规划使用于解最优化问题,通常有4个步骤:①找出最优解的性质,并刻画其结构特征。②递归地定义最优值。③以自底向上的方式计算最优值。④根据计算最优值时得到的信息,构造最优解。

posted @ 2021-10-25 23:36  张月琼  阅读(44)  评论(0编辑  收藏  举报