实例用C求出最大公共子序列LCS的长度.doc_第1页
实例用C求出最大公共子序列LCS的长度.doc_第2页
实例用C求出最大公共子序列LCS的长度.doc_第3页
实例用C求出最大公共子序列LCS的长度.doc_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

程序报告算法思想:为了方便叙述首先列出书上的算法(一)(二)(三) (四)图(一)和(二)列出的程序是为了求出最大公共子序列LCS的长度,图三列出的程序是为了构造一个LCS。求最大公共子序列所需的运行时间是O(m*n),为了构造一个LCS所需的运行时间是O(m+n)。一、然而如果仅要求出一个LCS的长度,而不需要构造一个LCS的元素,则只需要c的两行:正在被计算的一行和前面一行,也就是说完全可以用2*min(m,n)项以及O(1)的额外空间来计算一个LCS的长度。此时首先要比较出m梦芭莎优惠券,n的大小,利用他们而这种较小的作为存储空间的行,在本次程序中构造了两个数组vector Common1,Common;利用Common来存储正要计算的i行和利用Common1来存储需要用到的i-1行,计算结束后,便将本行计算结果Common中的值赋给上一行Common1,此时Common1中存储的便是i行中的计算结果,然后Common便可以继续利用Common1中存储的值,来急需计算i+1行,以下程序列出了计算过程(此段代码中已提前计算出Wen2_lengthWen1_length):for(long i=0;iWen1_length;i+)for(long j=0;jCommon1j+1)Commonj+1=Commonj;elseCommonj+1=Common1j+1;for(long j=0;j=Wen2_length;j+)Common1j=Commonj;二、然而,实际上,需要的辅助空间还可以更小(仅略多于表c一行的空间),为min(m,n)项以及O(1)的额外空间。这是因为在实际的计算i行第j个值的过程中,仅用到了i-1行中第j和j-1个值,所以只要用两个变量及时给出i-1行中第j和j-1个的值即可完成计算,这样便可以进一步缩小所需额外辅助空间,在本次程序中构造了一个数组vector Common;两个变量long K1=0,K2=0;,利用Common来存储正要计算的i行值,利用K1和K2来提供所需的i-1行值的内容,以下代码给出了具体计算过程:for(long i=0;iWen1_length;i+)for(long j=0;jK2)Commonj 1=Commonj;elseCommonj+1=K2;K1=Common0;K2=Common1;其中if(j=0)elseK1=K2;K2=Commonj+1;是为了防止在一行开始时K1,被附成Common中的第二个值。以后利用else中的内容即可及时为Common中值的计算提供所需的值。三、本次共写了三个程序,第一个是利用两个数组来存储值,第二个是利用一行数组来存储计算的值,第三个是在第二个的基础上将计算过程单独编织成了一个函数(因为曾记得有书上说调用函数会占用更长的时间,不过本次程序只涉及一次调用过称想来应该差别不大,不过还是想把它写一下),这

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论