算法设计与分析报告.doc

  1. 1、本文档共10页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
算法期末作业报告 08计本(2) 第 PAGE \* MERGEFORMAT 1页 算法设计与分析报告 ◎小组成员: 陈壮茂,陈振凯,张建龙,莫媚,林晓丹 ◎报告内容: 1.给定数组a[0:n-1],试设计一个算法,在最坏情况下用n+[logn]-2次比较找出a[0:n-1] 中的元素的最大值和次大值. ◎分析:a[0:n-1] 是说这个数组有n个元素,序号为0到n-1 n+[logn]-2就是一个算法复杂度,应该是n+logn的整数部分-2。 ◎首先对数组相邻的两个进行比较,将大的放在后面,小的放在前面,然后在两个数中小的所有数选出最小,同时也在两个数中大的所有数选出最大的。可以得出总的比较次数: (int)(n/2)+2*((int)(n/2)-1). ◎代码如下: #includeiostream.h #define N 9 int k=0; int max(int num[],int n) { int big[N],i; coutmaxendl; for(i=0;2*i=n-2;i++) { if(k++,num[i]num[n-i-1]) big[i]=num[i]; else big[i]=num[n-i-1]; } if(n%2!=0) { big[i]=num[i]; i++; } if(i==1) return big[0]; else return max(big,i); } int fun(int second,int num[],int n) { int big[N],small[N],i,number; coutfunendl; for(i=0;2*i=n-2;i++) { if(k++,num[i]num[n-i-1]) { big[i]=num[i]; small[i]=num[n-i-1]; } else { big[i]=num[n-i-1]; small[i]=num[i]; } } if(n%2) { big[i]=num[i]; i++; } number=max(small,i); second=secondnumber? second:number; k++; if(i==1) return big[0]; else return fun(second,big,i); } void main() { int num[N],second,i,large; cout请输入N个数endl; for(i=0;iN;i++) cinnum[i]; second=num[0]num[1]? num[1]:num[0]; k++; large=fun(second,num,N); cout最大值是:largeendl次大值是:secondendl其中比较次数为:kendl; } ◎最初数据 a[1] a[2] a[3] a[4] a[5] 4 3 6 9 8 ◎运行过程中的数据变化与结果 Second:3 big: 8; 9; 6 small: 4; 3 second: 4 big: 8; 9 samll: 6 second:6 big: 9 small: 8 second:8 big: 9 2.求数列的最大子段和(要求时间复杂为nlogn) ◎分析:给出n个整数(亦正亦负)组成的序列a[1],a[2],a[3],…,a[n],求该序列中a[i]+a[i+1]+…+a[j]的子段和的最大值。当最大子段和为负数时,规定此数列的最大子段和为0. ◎算法和思路: 依据上面的描述,所求的点i最大路径和c[i]应该为:Max{a[i], c[i - 1] + a[i]} int maxSubSum(int P[]) { int i; int maxsum = 0; int c = 0; for(i = 0; i MAX; i++) { if(c 0) c += P[i]; else c = P[i]; if(c maxsum) maxsum = c; } return maxsum; } ◎主函数: int main() { int A[MAX]; int i,sum;

文档评论(0)

zhuliyan1314 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档