算法第3章上机实践报告

江枫思渺然 提交于 2020-01-18 11:31:08

一、实践题目

  编辑距离问题

 

二、问题描述

  设A和B是2个字符串。要用最少的字符操作将字符串A转换为字符串B。

  字符操作包括 (1)删除一个字符; (2)插入一个字符; (3)将一个字符改为另一个字符。

  将字符串A变换为字符串B所用的最少字符操作数称为字符串A到 B的编辑距离,记为d(A,B)。 对于给定的字符串A和字符串B,计算其编辑距离 d(A,B)。

  输入格式:第一行是字符串A,文件的第二行是字符串B。

  输出格式:输出编辑距离d(A,B)。

 

三、算法描述

  本题可以通过填表的方式解决。解题的思路是:建立一个二维数组,将字符串A作为行的表头,字符串B作为列的表头。表格初始化如下:

  填表的方法为从左到右从上到下,表格中的数字代表从行到列所需要变换的最少次数。确定一个表格内容主要比较三种变换方法。
   (1)删除:dist[i][j-1]+1   

   (2)增加:dist[i-1][j]+1

      (3)替换:首先判断字符串A的第i-1个,与字符串B的j-1个是否相同,如果相同,则dist[i-1][j-1]不变,否则dist[i-1][j-1]=dist[i-1][j-1]+1

 

四、算法时间及空间复杂度分析

  按照算法分析,本题实际上是对一个二维数组进行遍历,因此时间复杂度为O(m x n),空间复杂度为O(m x n)。

 

五、心得体会

  刚看到这道题的时候思路很乱,觉得要比较的东西比较多,也不知道以什么规则比较,尝试使用填表的思想却不知道横纵坐标该怎么确定好。后来百度参考了一下别人的做法,知道了表格应该怎么确定,以及三种比较的内容,对于本题的做法就比较明晰了。和搭档讨论了一下之后便把代码一点点打出来。

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!