算法第三章作业

编辑距离问题

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

输入格式:

第一行是字符串A,文件的第二行是字符串B。

提示:字符串长度不超过2000个字符。

输出格式:

输出编辑距离d(A,B)

输入样例:

fxpimu
xwrs 

输出样例:

5

1.1 根据最优子结构性质,列出递归方程式

设D[i,j]表示从a[1:i]变为b[1:j]的编辑距离。

对于末尾元素:

1)当做删除操作的时候,只需要删除a[i],所以D[i,j] = D[i-1,j]+1;

2)当做插入操作的时候,可以看作删除了b[j],所以D[i,j] = D[i,j-1]+1;

3)当做替换操作的时候,此时a[i]和b[j]不相等,所以D[i,j] = D[i-1,j-1]+1;

4)当不需要进行操作的时候,意味着a[i]和b[j]相等,所以D[i,j] = D[i-1,j-1];

所以 D[i,j] = min{ D[i-1,j]+1, D[i,j-1]+1, D[i-1,j-1]+(a[i]==b[j] ? 0 : 1) };

再考虑边界情况:

当a为空时,显然,D[i,j] = j;

当b为空时,显然,D[i,j] = i;

所以递归方程式为:

1.2 给出填表法中表的维度、填表范围和填表顺序。

表的维度:2维

填表范围:整张表都要填

填表顺序:先填i=0的情况和j=0的情况,再从上往下,从左往右填。

1.3 分析该算法的时间和空间复杂度

时间复杂度:O(m*n)

空间复杂度:O(m*n)

2、对动态规划算法的理解

动态规划就是把大问题拆分成几个小问题,那几个小问题间要考虑到各种情况,同时,一些新小问题可能会进行重复计算,为了避免,可以把计算过了的小问题记录下来(填表)。做动态规划题目的解题步骤是:1.创建递归方程,2.利用填表法填表。

 

3、说明结对编程情况

一开始遇到问题会觉得比较难,不过我们之间通过讨论分析最终可以做出来。

 

posted @ 2020-10-31 15:08  IWTBWYR  阅读(126)  评论(0编辑  收藏  举报