• 第三章上机实践报告


    7-3 编辑距离问题 (30 分)

    设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
    


    题目描述:

    通过研读题目,我们不难发现,是要求我们输入两个字符串,并且求出他们的编辑距离:
    ①将字符串A变换为字符串B所用的最少字符操作数称为字符串A到 B的编辑距离,记为d(A,B)。
    ②字符操作包括 (1)删除一个字符; (2)插入一个字符; (3)将一个字符改为另一个字符。



    算法描述:

    我们假设有字符串A(A.length()== a)和字符串B(B.length()== b).
    对于一个字符串A来说,A[1]~A[a]到B的编辑距离取决于A[1]~A[a-1]到B的编辑距离。
    同时,对于一个字符串来说,A到B[1]~B[b]的编辑距离也取决于A到B[1]~B[b-1]的编辑距离。

    那么,我们就能够建立一个二维数组temp[2099][2099]来存放A字符串和B字符串之间的关系。

    //temp[i][j]表示s1[1][i]和s2[1][j]的编辑距离 
    int temp[2022][2022];
    分为以下两种情况:
    ①A[i] == B[j]即两比较字符串结尾相同,则temp[i][j] = temp[i-1][j-1],即编辑距离与A[i-1]B[j-1]相同。

    ②否则,temp[i][j]将由 min(min(temp[i-1][j], temp[i][j-1]), temp[i-1][j-1])决定,并加一次编辑操作。
    temp[i][j] =
    min(min(temp[i-1][j], temp[i][j-1]), temp[i-1][j-1]) + 1;



    心得体会:

    通过几道动态规划的练习题之后,觉得能否能够成功实现在于,问题是否能够分割,能否总最小的子问题扩展为原问题。
    很多算法建议我们考虑的时候从全局入手,去从大局考虑问题,但是动态规划来说,若是从大的方面来入手反而会混淆各种思维,
    特别是当动态规划附加了更多的条件的情况下,并没有很好的办法能够一下子面面俱全。

    因此从一个最小的子问题入手再返回原问题是最好的思考过程。






    ——但少闲人,所以等等。
  • 相关阅读:
    数据结构----字典及部分知识总结(2018/10/18)
    数据结构----链表的逆置及链表逆置和删除极小值
    Python自学知识点----Day03
    Python自学知识点----Day02
    Python自学知识点----Day01
    课堂笔记及知识点----树(2018/10/24(pm))
    课堂笔记及知识点----栈和队列(2018/10/24(am))
    数据结构----链表的删除和遍历(2018/10/24)
    数据结构----顺序表的增和遍历(2018/10/23)
    知识点回顾及委托(2018/10/22)
  • 原文地址:https://www.cnblogs.com/yi2105/p/11716163.html
Copyright © 2020-2023  润新知