南京邮电大学c语言实验报告4,南京邮电大学算法设计实验报告——动态规划法...

《南京邮电大学算法设计实验报告——动态规划法》由会员分享,可在线阅读,更多相关《南京邮电大学算法设计实验报告——动态规划法(12页珍藏版)》请在人人文库网上搜索。

1、实 验 报 告(2009/2010学年 第一学期)课程名称算法分析与设计A实验名称动 态 规 划 法实验时间2009年11月20日指导单位计算机学院软件工程系指导教师张怡婷学生姓名丁力琪班级学号B学院(系)计算机学院专 业软件工程实 验 报 告实验名称动 态 规 划 法指导教师张怡婷实验类型验证实验学时22实验时间2009-11-20一、 实验目的和任务目的:加深对动态规划法的算法原理及实现过程的理解,学习用动态规划法解决实际应用中的最长公共子序列问题。 任务:用动态规划法实现求两序列的最长公共子序列,其比较结果可用于基因比较、文章比较等多个领域。要求:掌握动态规划法的思想,及动态规划法在实际。

2、中的应用;分析最长公共子序列的问题特征,选择算法策略并设计具体算法,编程实现两输入序列的比较,并输出它们的最长公共子序列。 二、 实验环境(实验设备)硬件:计算机软件:Visual C+3、 实验原理及内容(包括操作过程、结果分析等)1、最长公共子序列(LCS)问题是:给定两个字符序列X=x1,x2,xm和Y=y1,y2,yn,要求找出X和Y的一个最长公共子序列。例如:X=a,b,c,b,d,a,b,Y=b,d,c,a,b,a。它们的最长公共子序列LSC=b,c,d,a。通过“穷举法”列出所有X的所有子序列,检查其是否为Y的子序列并记录最长公共子序列并记录最长公共子序列的长度这种方法,求解时间。

3、为指数级别的,因此不可取。2、 分析LCS问题特征可知,如果Z=z1,z2,,zk为它们的最长公共子序列,则它们一定具有以下性质:(1) 若xm=yn,则zk=xm=yn,且Zk-1是Xm-1和Yn-1的最长公共子序列;(2) 若xmyn且xmzk,则Z是Xm-1和Y的最长公共子序列;(3) 若xmyn且zkyn,则Z是X和Y的最长公共子序列。这样就将求X和Y的最长公共子序列问题,分解为求解较小规模的问题:若xm=ym,则进一步分解为求解两个(前缀)子字符序列Xm-1和Yn-1的最长公共子序列问题;如果xmyn,则原问题转化为求解两个子问题,即找出Xm-1和Y的最长公共子序列与找出X和Yn-1。

4、的最长公共子序列,取两者中较长者作为X和Y的最长公共子序列。由此可见,两个序列的最长公共子序列包含了这两个序列的前缀的最长公共子序列,具有最优子结构性质。3、令cij保存字符序列Xi=x1,x2,xi和Yj=y1,y2,yj的最长公共子序列的长度,由上述分析可得如下递推式:0 i=0或j=0cij= ci-1j-1+1 i,j0且xi=yjmaxcij-1,ci-1j i,j0且xiyj由此可见,最长公共子序列的求解具有重叠子问题性质,如果采用递归算法实现,会得到一个指数时间算法,因此需要采用动态规划法自底向上求解,并保存子问题的解,这样可以避免重复计算子问题,在多项式时间内完成计算。4、 为。

5、了能由最优解值进一步得到最优解(即最长公共子序列),还需要一个二维数组s,数组中的元素sij记录cij的值是由三个子问题ci-1j-1+1,cij-1和ci-1j中的哪一个计算得到,从而可以得到最优解的当前解分量(即最长公共子序列中的当前字符),最终构造出最长公共子序列自身。5、 编程定义LCS类,计算最长公共子序列的长度,并给出最长公共子序列:(注意:C语言中数组下标由0开始,而实际数据在一维数组a、b和二维数组是c、s中存放却是从小标为1处开始。)类中数据成员主要有二维数组c和s用于动态规划法求解过程中保存子问题的求解结果,一维数组a和b用于存放来两个字符序列,m和n为两个字符序列中实际字。

6、符的个数。这些数据成员均应在LCS类的构造函数中进行初始化:#include#includeusing namespace std;#define maxlength 11class LCSpublic:LCS(int nx,int ny,char *x,char *y) /对数据成员m、n、a、b、c、s初始化m=nx;n=ny;a=new charm+2;b=new charn+2;memset(a,0,m+2);memset(b,0,n+2);/将x和y中的字符写入一维数组a和b中for(int i=0;i=cij-1)cij=ci-1j;sij=2;elsecij=cij-1;sij=。

7、3;return cmn; /返回最优解值void LCS:CLCS(int i,int j)constif(i=0|j=0|sij=0) return;if(sij=1)CLCS(i-1,j-1);cout=LCSLength(i,j-1)cij=LCSLength(i-1,j);sij=2;elsecij=LCSLength(i,j-1);sij=3;return cij;2、 若省去原程序中的二维数组s,是否还能求的最长公共子序列问题的最优解?请编写一个类似的CLCS算法实现:不借助二维数组s在O(m+n)的时间内构造最长公共子序列的功能。(提示:此时可在当前cij处比较ai和bj。如果。

8、相等,则调用CLCS(i-1,j-1),输出ai(或bj)。如果不相等,则比较ci-1j和cij-1。若ci-1jcij-1,则递归调用CLCS(i-1,j);否则,递归调用CLCS(i,j-1)。)void LCS:CLCS(int i, int j) constif(i=0|j=0) return;if(ai=bj)CLCS(i-1,fj-1);cout=cij-1) CLCS(i-1,j);else CLCS(i,j-1); 3、 如果只需计算最长公共子序列的长度,而无须构造最优解,则如何改进原有程序可以使得算法的空间需求大大减少?请改写原程序,使算法的空间复杂度减少为O(minm,n)。

9、。(提示:计算cij仅用到第i行和第i-1行元素,因此,只需两行元素空间就可以计算最长公共子序列的长度,并且选用序列长度较短的一个作为y序列,可以缩短每行元素的个数,从而进一步减少空间复杂度。)#include#includeusing namespace std;#define maxlength 11class LCSpublic:LCS(int nx,int ny,char *x,char *y)m=nx;n=ny;a=new charm+1;b=new charn+1;memset(a,0,m+2);memset(b,0,n+2);for(int i=0;in)l=m;s=n;else。

10、char *t;t=x;x=y;y=t;s=m;l=n;c1=new ints+1;c2=new ints+1;for(int i=0;i=c2j-1)c2j=c1j;elsec2j=c2j-1;for(int z=0;zx;nx=strlen(x);couty;ny=strlen(y);LCS lcs(nx,ny,x,y);cout=cij-1)语句中没有区分ci-1jcij-1和ci-1j=cij-1这两种不同的情况。因此要找出所有LCS,就必须在ai!=bj且ci-1j=cij-1的时候,分别沿着ci-1j向上和cij-1向左两个搜索方向分别构造最优解,才能据此找出所有的LCS。实现时可采用一个solution数组来记录最优解向量。)四、实验小结(包括问题和解决方法、心得体会等)通过本次实验,我掌握了LCS的原理及方法。关于动态规划法,我了解了其原理,本次实验,学到很多 。 五、指导教师评语成 绩批阅人日 期。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/339632.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

启动jboss_3种启动JBoss BPM流程的基本方法

启动jboss这一集提示和技巧将帮助您了解根据需要启动流程实例的最佳方法。 规划项目可能包括流程项目,但是您是否考虑过可以启动流程的各种方式? 也许您的JBoss BPM Suite在您的体系结构中本地运行,也许您在云中运行,但是无论它…

单片机控制灯光亮度c语言程序,基于51单片机控制LED灯光亮度并报警

利用pwm控制led灯光亮度大小。可以显示许多亮度等级 到最低或者最高亮度等级会发出报警。设计思路:LED一般是恒流操作的,如何改变LED的亮度呢?答案就是PWM控制。在一定的频率的方波中,调整高电平和低电平的占空比,即可…

将Quarkus应用程序部署到AWS Elastic Beanstalk

Elastic Beanstalk允许在AWS云中部署和管理应用程序,而无需了解运行这些应用程序的基础架构。 使用Elastic Beanstalk,您可以运行可处理HTTP请求的网站,Web应用程序或Web API,但也可以运行辅助应用程序以运行长任务。 Elastic Be…

c语言中rand()%900,c语言 n=rand()%5是什么意思

rand()函数会产生范围为0至32767的随机数,% 让它与5求余,变成0至4的随机数,不过每次启动程序产生的随机数都相等,在用srand(unsigned int)输入种子数后产生的才不一样,一般都用的 srand((unsigned int)time(NULL)) 产生…

gradle 构建应用流程_使用Gradle构建和应用AST转换

gradle 构建应用流程最近,我想在Gradle项目中构建并应用本地ast转换。 虽然我可以找到几个有关如何编写转换的示例,但找不到完整的示例来显示完整的构建过程。 转换必须单独编译然后放在类路径中,因此其源代码不能简单地放在Groovy源代码树的…

c语言malloc calloc,C语言内存管理:malloc、calloc、free的实现

任何一个对C稍稍有了解的人都知道malloc、calloc、free。前面两个是用户态在堆上分配一段连续(虚拟地址)的内存空间,然后可以通过free释放,但是,同时也会有很多人对其背后的实现机制不了解。这篇文章则是通过介绍这三个函数,并简单…

在雅加达EE TCK中使用Arquillian的可能方法

最近,我们讨论了如何创建独立的Jakarta Batch测试套件(TCK)。 对于大多数提交者而言,使用Arquillian将测试从实现中如何执行抽象化是很自然的。 但是Romain提出了一个有趣的想法,即使用纯JUnit5引起了我的思考。 它并没…

c语言怎么循环输入单个字符,c语言 帮我检查一下 输入一段文字,每行用回车结束,文字输入完毕可以使用某个特殊字符作为结束,...

c语言 帮我检查一下 输入一段文字,每行用回车结束,文字输入完毕可以使用某个特殊字符作为结束,0HIDE152019.04.28浏览4次分享举报c语言输入一段文字,每行用回车结束,文字输入完毕可以使用某个特殊字符作为结束&#xf…

gradle发布jar_使用Gradle将JAR工件发布到Artifactory

gradle发布jar因此,我浪费了一两天(只是投资)来了解如何使用Gradle将JAR发布到本地运行的Artifactory服务器。 我使用Gradle Artifactory插件进行发布。 我迷失在无穷循环中,包括各种版本的各种插件和执行各种任务。 是的&#xf…

c++语言 自己构造函数 成员对象构造函数 调用顺序,C++类成员构造函数和析构函数顺序示例详细讲解...

对象并不是突然建立起来的,创建对象必须时必须同时创建父类以及包含于其中的对象。C遵循如下的创建顺序:(1)如果某个类具体基类,执行基类的默认构造函数。(2)类的非静态数据成员,按照声明的顺序创建。(3)执行该类的构造函数。即构…

最新的20多个JMS面试问答(2020)

快速浏览JMS(Java消息服务)常见问题面试问题和答案。 2020年以来的最新问题已添加到列表中。 1.简介 在本教程中,我们将了解2020年常见的JMS面试问题。作为面试的一部分,如果您有6年以上的经验,就有机会在JMS领域提出…

【学习笔记】SAR相关概念

文章目录 1. 基础SAR—复数据转换—多视处理—自适应滤波—地理编码—斜地距转换—地形辐射校正—转DB影像 2. SAR 平差—自动匹配—区域网平差—几何精校正—镶嵌线编辑 3.干涉 SAR(InSAR/DInSAR)—配准—干涉图计算—基线计算—去除平地相位—相干性计算—干涉图滤波—相位解…

c语言逆序输出6A8F,【C语言】将二进制数逆序输出。比如6为000...0110,逆序后为0110....

//将二进制数逆序输出。比如6为000...0110,逆序后为0110...000#include unsigned int reverse_bit(int num){int i;int bit;unsigned new_num 0;for (i 0; i//将二进制数逆序输出。比如6为000...0110,逆序后为0110...000#include unsigned int reverse_bit(int num){int i;in…

加载dll api_运行时类加载以支持不断变化的API

加载dll api我维护一个IntelliJ插件 ,可以改善编写Spock规范的体验。 这个项目的挑战是在单个代码库中支持多个且不兼容的IntelliJ API版本。 回想起来,该解决方案很简单(这是野外适配器模式的一个示例),但是最初它需要…

12生肖 c语言设计,语言十二生肖教案

十二生肖中班教案十二生肖教案反思语言教案十二生肖点击进入查看全文2010虎年运势测算,走好运,发大财!宝宝三个月,来说一说之前购买的海量的婴儿用品的使用况(配合图片),大家可以都来讨论一下吧。太败了,之…

Quarkus的其他(非标准)CDI功能

Quarkus支持CDI(上下文和依赖注入)2.0,但并非全部,仅支持最常见的功能。 但是,Quarkus确实包含一些非标准功能,这些功能对于开发人员非常方便,我想在下面的视频中进行展示。 不管您是否熟悉CDI…

c语言输出星期几的英语表达,C语言程序设计: 输入年月日 然后输出是星期几...

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼#include main(){int year,month,day0,a,b,week,c,i,sum0,days,d;printf("please input year,month,days\n");scanf("%d,%d,%d",&year,&month,&days);for(i1;i{if (year%40){if(year%1000){if (ye…

将Visual Studio Code设置为jshell中的默认编辑器

Java Shell( jshell )是用于在Java中学习和进行原型制作的交互式工具。 它是在Java 9中引入的,从那以后,我在演示过程中偶尔使用它来进行一些快速原型制作,或者只是为了验证Java语言中的新功能。 由于jshell是命令行工…

c语言中组合函数,排列组合c怎么算 公式是什么

排列有两种定义,但计算方法只有一种,凡是符合这两种定义的都用这种方法计算。定义的前提条件是m≦n,m与n均为自然数。下面介绍排列组合c的计算方法及公式,供参考。排列组合中A和C怎么算排列A(n,m)n(n-1).(n-m1)n!/(n-m)!(n为下标,…

使用Spring WebFlux构建反应性REST API –第1部分

在本文中,我们将看到如何使用Spring WebFlux构建响应式REST API。 在进入反应式API之前,让我们看看系统是如何发展的,传统REST实现遇到的问题以及现代API的需求。 如果您查看从旧版系统到下文所述的现代系统的期望, 现代系统的期…