算法第三章作业

Posted on 2020-10-30 17:05  Youthenen  阅读(174)  评论(0编辑  收藏  举报

作业题目

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

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

递归方程:

 

分析:

D[i][j]即为所填的表,表示的意义是A串中1~i个字符与B中1~j个字符的最短编辑距离。

题目所规定的编辑操作有3种,按照这三种操作来看,若A串进行:

①删除操作;删除A串中最后一个字母之后,由于我们的目标是把A换为B,所以A串剩余的工作即为努力通过最小编辑距离的操作使得1~i-1个字符与B串中1~j个字符相同,即D[i-1][j]。最后再加上1(删除所需的操作数)

②增加操作;因为目标是要把A换为B,所以我们在A串的最后增加一个与B串最后一个数相同的字母。接下来努力的目标即为使A中1~i个字符与B中1~j-1相同,所需最小编辑距离即D[i][j-1],再加上1(增加所需的操作数)

③替换操作;假如我们通过替换,使得A串与B串的最后一位相同,则剩余的工作即为努力让A串1~i-1和B串1~j-1相同,所需最小编辑距离则为D[i-1][j-1]。若最后一位字母原本不相同,需要一次替换操作,则加1。若相同则不需要。

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

设A的长度为m,B的长度为n,则:

表的维度为2,填表范围为m行n列,填表顺序为自左向右,自上而下。

1.3分析算法时间复杂度,空间复杂度

时间复杂度:总共有m*n个格子,每个格子进行一次加的操作。所以为O(m*n)

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

2. 你对动态规划算法的理解

我觉得动态规划算法重点在于列出递归方程,而列出递归方程的前提是能够找到大问题与子问题之间的关系。采用什么样的数组形式来表示子问题也是一个关键,从而影响了填表的范围。另外,填表时需注意哪些需要初始化。

3. 说明结对编程情况

伙伴的理解速度比我快,在交流讨论中也最终顺利解题。

Copyright © 2024 Youthenen
Powered by .NET 8.0 on Kubernetes