算法分析实验四报告

上传人:m**** 文档编号:485189023 上传时间:2023-03-18 格式:DOC 页数:6 大小:33.02KB
返回 下载 相关 举报
算法分析实验四报告_第1页
第1页 / 共6页
算法分析实验四报告_第2页
第2页 / 共6页
算法分析实验四报告_第3页
第3页 / 共6页
算法分析实验四报告_第4页
第4页 / 共6页
算法分析实验四报告_第5页
第5页 / 共6页
点击查看更多>>
资源描述

《算法分析实验四报告》由会员分享,可在线阅读,更多相关《算法分析实验四报告(6页珍藏版)》请在金锄头文库上搜索。

1、算法设计与分析实验报告 目 录一、 实验内容描述和功能分析.二、 算法过程设计.三、 程序调试及结果(附截图).四、 源代码(附源代码).一、 实验内容描述和功能分析.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

2、没有长度大于4的公共子序列。 最长公共子序列问题就是给定两个序列X=x1,x2,.xm和Y=y1,y2,.yn,找出X和Y的一个最长公共子序列。 功能分析:输入包含多组测试数据。第一行为一个整数C,表示有C组测试数据,接下来有C行数据,每组测试数据占1行,它由2个给定序列的字符串组成,两个字符串之间用空格隔开. 输出应该有C行,即每组测试数据的输出占一行,它是计算出的最长公共子序列长度。例如:输入: 1 输出:4 ABCBDBA BDCABA2. Minimal m Sums内容描述:给定n 个整数组成的序列,现在要求将序列分割为m 段,每段子序列中的数在原序列中连续排列。如何分割才能使这m段

3、子序列的和的最大值达到最小? 编程任务: 给定n 个整数组成的序列,编程计算该序列的最优m 段分割,使m 段子序列的和的最大值达到最小。功能分析:输入由多组测试数据组成。 每组测试数据输入的第1行中有2个正整数n和m。正整数n是序列的长度;正整数m是分割的段数。接下来的一行中有n个整数。 对应每组输入,输出的每行是计算出的m段子序列的和的最大值的最小值。例如:输入:1 1 输出:10 10 二、 算法过程设计.1.最长公共子序列 最长公共子序列问题是通过定义数组和指针来寻找两者的公共子序列,实现对问题的解决。2.Minimal m Sums 这个问题是通过定以一个一维数组和一个二维数组来实现问

4、题的解决。 三、程序调试及结果(附截图).1.最长公共子序列2.Minimal m Sums四、源代码(附源代码).1.最长公共子序列# include # include #define N 100char 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+

5、 ) for( j = 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

6、 j ) i -; else if( c i j = c i j -1 ) j-; else s -k = a i - 1 ; /*将一个公共字符存入s中*/ i-; j-; return s;int main() int n,m; scanf(%d,&m); getchar(); while(m-) scanf( %s%s, a,b ); n=strlen(build_lcs( str, a, b ); printf(%dn,n); return 0;2.Minimal m Sums #include using namespace std; int t100; int f100100 ;

7、void s(int n , int m ) int i , j , k , temp , maxt ; for ( i = 1 ; i = n ; i + ) fi1 = fi-11 + ti ; for ( j = 2 ; j = m ; j + ) for(i = j ; i = n ; i + ) for ( k = 1 , temp = 99999999 ; k fkj-1 ? ( fi1 - fk1 ) : fkj-1; if(temp maxt ) temp = maxt ; fij = temp ; int main() int i , n , m ; cin n m ; if( (n m) | ( n = 0 ) ) cout0endl; return 0; for ( i = 1 ; i ti; s(n,m); coutfnmendl; return 0;

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > PPT模板库 > 总结/计划/报告

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号