- 1、本文档共10页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
算法期末作业报告 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;
您可能关注的文档
- 食品中三聚氰胺的检测方法.ppt
- 食品追溯溯源系统方案.ppt
- 食用菌多糖的研究进展.ppt
- 使用JAVA理解程序逻辑.doc
- 世纪西方现代派绘画美术.ppt
- 世界的气候--气温和降水复习课.ppt
- 世界地理 区域地理 中亚.ppt
- 世界地理分区和主要国家导学案.doc
- 世界各地名胜古迹.ppt
- 世界各国标志性建筑物.doc
- 2025年微电网储能技术配置模型与能源互联网发展研究.docx
- 2025年微电网储能技术配置对电网运行优化的影响.docx
- 2025年基因编辑技术对抗肿瘤转移的预防策略研究报告.docx
- 旅游基础设施建设项目投资计划书(参考模板).docx
- 2025年微电网储能技术配置对电力系统安全性的影响.docx
- 2025年微电网储能系统在智能电网中的关键配置与调度优化.docx
- 2025年微电网储能系统安全防护与应急响应策略研究报告.docx
- 旅游基础设施建设项目可行性研究报告.docx
- 线上健身平台健身教练职业发展与市场前景研究报告.docx
- 2025年微电网应用下储能技术优化配置策略研究报告.docx
文档评论(0)