博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
算法第三章上机实践报告
阅读量:6818 次
发布时间:2019-06-26

本文共 1473 字,大约阅读时间需要 4 分钟。

第三章上机实践报告

 

1.     实践题目

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

 

2.     问题描述

设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)

 

3.     算法描述

递归方程

m = a.length();

n = b.length();

d [ i ] [ j ]  = d [ i – 1] [ j – 1] ,   (A [ a – 1 ] = B [ b – 1 ] )

d [ i ] [ j ] = min ( d [ i ] [ j – 1] + 1 , d [ i – 1 ] [ j ] + 1 , d [ i – 1 ] [ j – 1] + 1) ,  ( A [ a – 1] != B [ b – 1] )

#include
#include
#include
using namespace std;char a[2000],b[2000];int d[2000][2000];int main(){ cin>>a; cin>>b; int m=strlen(a); int n=strlen(b); for(int i=1;i<=m;i++) d[i][0]=i; for(int j=1;j<=n;j++) d[0][j]=j; for(int i=1;i<=m;i++) for(int j=1;j<=n;j++) if(a[i-1]==b[j-1]) d[i][j]=d[i-1][j-1]; else d[i][j]=min(min(d[i-1][j-1],d[i-1][j]),d[i][j-1])+1; cout<

 

4.     算法时间及空间复杂度分析

时间复杂度:T(n) = a + b + a * b

所以时间复杂度 O( a * b );

空间复杂度:整个算法在计算过程中新定义了一个存储编辑距离的数组d[a][b]

                     所以空间复杂度为 O(a * b)

 

5.     心得体会(对本次实践收获及疑惑进行总结)

在7-3这道题中,起初的想法是先求出字符串A和字符串B的公共最长子序列长度m ,最短编辑距离 = B.length() – m。在与结对同伴的讨论之后,这种方法存在问题,如:当字符串A 为abcdef 字符串B 为 ascdef 时,d(A, B) = 1, 而按照上述想法的结果 d(A, B) = 2。

本章的动态规划,对问题分析和解决问题的方法对个人来说是一个很大的难点。

动态规划的基本方法:

1) 找出最优解的性质,并刻画其结构的特征

2) 递归定义最优值,写出递归方程

3) 思考表的维数,范围和根据递归方程按照什么顺序填

4) 根据计算最优值时得到的信息,构造最优解

转载于:https://www.cnblogs.com/linzexuan/p/9939244.html

你可能感兴趣的文章
云态势感知产品 - 沙箱高级威胁检测
查看>>
Window配置Redis环境和简单使用
查看>>
asp.net正则匹配嵌套Html标签
查看>>
mybatis表关联一对多
查看>>
Amazon RDS 上的 Microsoft SQL Server » 导入和导出 SQL Server 数据库
查看>>
微信小程序——时间戳的转换及调用
查看>>
【RS】Modeling User Exposure in Recommendation - 在推荐中建模用户的暴露程度
查看>>
Kibana5.6安装
查看>>
Java多线程-线程池ThreadPoolExecutor构造方法和规则
查看>>
Solr字段类型field type的定义
查看>>
CentOS6.4下编译安装Apache2.4+PHP5.6
查看>>
Atitit. Xss 漏洞的原理and应用xss木马
查看>>
Spring使用facotry-method创建单例Bean总结<转>
查看>>
eclipse中英文版转换(前提:有中文包)
查看>>
当你纠结时,请打开这31个锦…
查看>>
怎样将runlmbench 获取的数值传给上层app
查看>>
Eclipse 使用maven创建Dynamic Web Project
查看>>
Python学习笔记——迭代器(RandSeq和AnyIter)
查看>>
MySQL索引使用方法和性能优化
查看>>
JSP简单练习-定时刷新页面
查看>>