算法第三章作业

编辑距离问题

1.1 递归方程:

$$
f[i][j]=
\left\{
\begin{aligned}
&min(f[i][j-1]+1,f[i-1][j]+1,f[i-1][j-1]+(a[i]!=a[j]))&if(i>=1,j>=1) \\\
&i &if(j==0) \\\
&j &if(i==0) \\\
\end{aligned}
\right.
$$

字符串AB都是从下标1开始读入。

方程分析:

$f[i][j]$表示A中前i个字母转化为B中前j个字母所需最少操作次数。

讨论对A中第i个字符操作后,A中前i个字符串与B中前j个字符串相同。

1.在$a[i]$后增加一个字母,增加后两字符串相同,则增加的字母必然为$b[j]$。则增加前A的前i个字母与B的前j-1个字母相同。此时$f[i][j]=f[i][j-1]+1$

2.把$a[i]$删除。删除后两字符串相同,则删除前A的前i-1个字母与B的前j个字母相同。此时$f[i][j]=f[i-1][j]+1$

3.把$a[i]$修改为$b[j]$。修改后两字符串相同。则修改前A的前i-1个字母与B的j-1个字母相同。若$a[i]==b[j]$则不需要操作次数。若$a[i]!=b[j]$则需要修改,操作次数加一。

最后把三种情况取个min即可。

考虑边界情况。$i==0$时则j是多少就要在A中增加多少个字符。$j==0$时,则i是多少就要在A中删除多少个字符。

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

维度是二维。每个状态只与前面的状态有关。两重循环i和j分别从1~lenA,1~lenB

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

A的长度为n,B的长度为m

 状态数为n*m,转移为O(1)

时间复杂度为O(n*m)。

空间复杂度为O(n*m)。

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

设计dp方程。找到某个时候与他前一个时候的关系。来推出递归方程

3. 说明结对编程情况

还不错,比较顺利。题目交流后基本都能做出来

 

posted @ 2020-10-26 16:35  kuzi99  阅读(101)  评论(0编辑  收藏  举报