算法第三章作业

3-4 编辑距离问题 

(一)、问题描述

给出两个字符串 A、B,可以通过增删改三个操作将A变成B,需要进行几次操作。

(二)、算法描述

首先,用 d[Blen+1][Alen+1] 来存储结果;

然后,用 d[i][j] 表示A的子串(下标从0到i)转化为B的子串(下标从0到j)需要的操作次数;

所以,本题要求的就是d[Blen][Alen],那么问题就转化为求出 d 数组。

1、初始化:当 strlen(A)=0,d[0][j]=j ;同理可得 d[i][0]=i;

2、当A[i-1]=B[j-1],则d[i][j]=d[i-1][j-1];

3、当A[i-1]!=B[j-1],有以下三种情况:

(1)若进行删除操作:操作数加1,d[i][j]=d[i-1][j]+1;

(2)若进行增加操作:操作数加1,d[i][j]=d[i][j-1]+1;

(3)若进行替换操作:操作数加1,d[i][j]=d[i-1][j-1]+1;

  d[i][j]等于上面三种情况d[i][j]里的最小值。

(三)、算法时间及空间复杂度分析

两层for循环处理 d 数组,故时间复杂度为O(n^2)。

(四)、心得体会

解决动态规划问题的关键是找到问题的最优解子结构,然后建立递推关系,确定好填表的顺序。

多做题,多思考,才能提高、加深对算法的理解。

 

posted @ 2020-10-31 19:11  唐嘉欣  阅读(56)  评论(0编辑  收藏  举报