最长公共子序列课程设计文档及源码.docVIP

最长公共子序列课程设计文档及源码.doc

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
课程设计项目: 说明:若给定序列X={x1,x2,…,xm},则另一序列Z={z1,z2,…,zk},是X的子序列是指存在一个严格递增下标序列{i1,i2,…,ik}使得对于所有j=1,2,…,k有:zj=xij。例如,序列Z={B,C,D,B}是序列X={A,B,C,B,D,A,B}的子序列,相应的递增下标序列为{2,3,5,7}。给定2个序列X和Y,当另一序列Z既是X的子序列又是Y的子序列时,称Z是序列X和Y的公共子序列。 设计要求:请使用C语言编程,设计一个有效的算法解决下述问题:给定2个序列X={x1,x2,…,xm}和Y={y1,y2,…,yn},找出X和Y的最长公共子序列。 设计提示: 设序列X={x1,x2,…,xm}和Y={y1,y2,…,yn}的最长公共子序列为Z={z1,z2,…,zk} ,则 (1)若xm=yn,则zk=xm=yn,且zk-1是xm-1和yn-1的最长公共子序列。 (2)若xm≠yn且zk≠xm,则Z是xm-1和Y的最长公共子序列。 (3)若xm≠yn且zk≠yn,则Z是X和yn-1的最长公共子序列。 由此可见,2个序列的最长公共子序列包含了这2个序列的前缀的最长公共子序列。 由最长公共子序列问题的最优子结构性质建立子问题最优值的递归关系。用c[i][j]记录序列和的最长公共子序列的长度。其中, Xi={x1,x2,…,xi};Yj={y1,y2,…,yj}。当i=0或j=0时,空序列是Xi和Yj的最长公共子序列。故此时C[i][j]=0。其他情况下,由最优子结构性质可建立递归关系如下: 课程设计目的: 用c语言编程列出解决的方法,复习c语言的用法,提高动手实践能力 课程设计内容 需求分析: 本演示程序中,输入的x序列和y序列是任意的,当然是在不超过MAXSIZE的前提下进行的; 演示程序以用户和计算机的对话方式执行,即在计算机的终端上显示“提示信息”之后,由用户在键盘上输入相应数据( 即X序列和Y序列) 测试数据 x序列:ADJdjfk48** dfj*hj6 GHh%$ y序列:AhdhGHGF67 HGHG^%HGF%$ 输 出:Adh6 GH%$ x序列:SDJFKJdkjfj^*UJGHJ^$ y序列:SHJhjhd^657HGH^$ 输 出:SJd^GH^$ (3)其余省略 概要设计 void lcs_length(char * x, char * y, int c[][MAXSIZE]) c[i,j]记录序列Xi和Yj的最长公共子序列的长度 根据下面条件,构造类似图lcs_length的表 图Lcs_length 2.int lcs(int c[][MAXSIZE], char *x, char *y, int len_x, int len_y, char * lcs_arr) 把最长公共子序列存储在lcs_arr中,并返回子序列的长度 详细设计 元素类型: C[i][j]记录Xi和Yj序列的最长公共子序列长度 Lcs_arr数组存储最长公共子序列的元素 每个模块的分析 主程序模块: int main(void) { int i, c; char x[MAXSIZE], y[MAXSIZE]; while(1){ printf(y to continue, and you can input list of x and y; n to stop: ); c = getchar(); if(c == n) { printf(Are you sure to quit, y to quit, n to continue: ); getchar(); c = getchar(); if(c == y){ exit(1); } else if(c == n){ getchar(); printf(Please input the array of x(like: ABCDEF): ); if(fgets(x, sizeof(x), stdin) == NULL) exit(1); printf(Please input the array of y(like: ABCDEF): )

文档评论(0)

beifanglei + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档