网站大量收购独家精品文档,联系QQ:2885784924

算法分析实验4报告.docVIP

  1. 1、本文档共6页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
算法分析实验4报告

《算法设计与分析》实验报告 目 录 实验内容描述和功能分析. 算法过程设计. 程序调试及结果(附截图). 源代码(附源代码). 实验内容描述和功能分析. 1.最长公共子序列 内容描述:一个给定序列的子序列是在该序列中删去若干元素后得到的序列。给定两个序列X和Y,当另一序列Z既是X的子序列又是Y的子序列时,称Z是序列X和Y的公共子序列。例如,若X={A,B,C,B,D,B,A},Y={B,D,C,A,B,A},则序列{B,C,A}是X和Y的一个公共子序列,但它不是X和Y的一个最长公共子序列。序列{B,C,B,A}也是X和Y的一个公共子序列,它的长度为4,而且它是X和Y的一个最长公共子序列,因为X和Y没有长度大于4的公共子序列。 最长公共子序列问题就是给定两个序列X={x1,x2,...xm}和Y={y1,y2,...yn},找出X和Y的一个最长公共子序列。 功能分析:输入包含多组测试数据。第一行为一个整数C,表示有C组测试数据,接下来有C行数据,每组测试数据占1行,它由2个给定序列的字符串组成,两个字符串之间用空格隔开. 输出应该有C行,即每组测试数据的输出占一行,它是计算出的最长公共子序列长度。 例如:输入: ABCBDBA BDCABA Minimal m Sums 内容描述:给定n 个整数组成的序列,现在要求将序列分割为m 段,每段子序列中的数在原序列中连续排列。如何分割才能使这m段子序列的和的最大值达到最小? 编程任务: 给定n 个整数组成的序列,编程计算该序列的最优m 段分割,使m 段子序列的和的最大值达到最小。 功能分析:输入由多组测试数据组成。 每组测试数据输入的第1行中有2个正整数n和m。正整数n是序列的长度;正整数m是分割的段数。接下来的一行中有n个整数。 对应每组输入,输出的每行是计算出的m段子序列的和的最大值的最小值。 例如:输入:1 1 输出:10 10 算法过程设计. 1.最长公共子序列 最长公共子序列问题是通过定义数组和指针来寻找两者的公共子序列,实现对问题的解决。 2.Minimal m Sums 这个问题是通过定以一个一维数组和一个二维数组来实现问题的解决。 三、程序调试及结果(附截图). 1.最长公共子序列 2.Minimal m Sums 四、源代码(附源代码). 1.最长公共子序列 # include stdio.h # include string.h #define N 100 char a[ N ], b[ N ], str[ N ]; int lcs_len( char *a, char *b, int c[][ N ] ) { int m = strlen( a ), n = strlen( b ), i, j; for( i = 0; i = m; i++ ) c[ i ][ 0 ] = 0; for( j = 1; j = n; j++ ) c[ 0 ][ j ] = 0; for( i = 1; i = m; i++ ) for( j = 1; j = n; j++ ) if( a[ i - 1 ] == b[ j - 1 ]) c[ i ][ j ] = c[ i - 1 ][ j - 1 ] + 1; else if( c[ i - 1 ][ j ] = c[ i ][ j -1 ] ) c[ i ][ j ] = c[ i - 1 ][ j ]; else c[ i ][ j ] = c[ i ][ j -1 ]; return c[ m ][ n ]; } char *build_lcs( char s[], char *a, char *b ) { int k, i = strlen( a ), j = strlen( b ), c[ N ][ N ]; k = lcs_len( a, b, c ); /*将c[][]传给lcs_len()计算并求出长度,将中间结果放在c[][]中*/ s[ k ] = \0; /*s串的结束标记*/ while( k 0 )/*开始倒推*/ if( c[ i ][ j ] == c[ i - 1 ][ j ] ) i --;

文档评论(0)

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

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

1亿VIP精品文档

相关文档