- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
算法设计与分析(作业一)
算法设计与分析
实验报告
学 院 信息科学与技术学院
专业班级 软件工程3班
学 号
姓 名 王建君
指导教师 尹治本
2014年10月
实验一 同时求最大元与次大元
问题提出
在N个元素中同时求出最大元与次大元。
求解思路
利用分治法解决问题。将一个规模为n的问题分解为k个规模较小的子问题,这些子问题互相独立且与原问题相同。递归地解这些子问题,然后将各个子问题解合并得到原问题的解。
算法复杂度
当n=1时,不需要比较就可知最大元和次大元均为该数本身。当n=2时,一次比较就可以找出两个元素的最大元和次大元。 当n2时,可以把n个数据元素分为大致相等的两半,一半有n/2个数据元素,而另一半有n/2个数据元素。先分别找出各自组中的最大元和最小元,然后将两个最大元进行比较,就可得n个元素的最大元; 将两个最小元中的大元与两个最大元中的小元进行比较,就可得n个元素的次大元。在规模为n的数据元素集合中找出最大元和次大元,至少需要5n/2-4次比较,即5n/2-4是找最大次大元算法的下界,得算法复杂度。
源代码
#includestdio.h
#includestdlib.h
#define N 10 //宏定义元素的个数
int max(int a,int b)
{
if(ab)
return a;
else
return b;
}
int min(int a,int b)
{
if(ab)
return a;
else
return b;
}
void Search(int a[],int *max0,int *second0,int n)
{
int g[30];
int i,m;
int max1,max2,second1,second2;
if(n==1)
{
*max0=a[0];
*second0=a[0];
}
else if(n==2)
{
*max0=max(a[0],a[1]);
*second0=min(a[0],a[1]);
}
else
{
m=n/2;
for(i=0;im;i++)
g[i]=a[i];
Search(g,max1,second1,m);
for(i=0;in-m;i++)
g[i]=a[i+m];
Search(g,max2,second2,n-m);
*max0=max(max1,max2);
*second0=max(min(max1,max2),max(second1,second2));
}
}
int main()
{
int a[N];
int i,max,second;
system(title 软件3班 王建君分治法求最大元与次大元);
printf(请输入%d个数字:\n,N);
for(i=0;iN;i++)
scanf(%d,a[i]);
Search(a,max,second,N);
printf(最大元为%d\n次大元为%d\n,max,second);
return 0;
}
结果分析
运算结果截图如下
依次输入10个数字 12、3、4、9、6、87、34、23、4、2后求得最大元为87,次大元为34。
实验二 实现两个大整数的乘法
问题提出
实现两个大整数的乘法。
求解思路
利用分治法解决问题。将一个规模为n的问题分解为k个规模较小的子问题,这些子问题互相独立且与原问题相同。递归地解这些子问题,然后将各个子问题解合并得到原问题的解。
算法复杂度
设X和Y都是n位的二进制整数,现在要计算它们的乘积XY,我们将n位的二进制整数X和Y各分为2段,每段的长为n/2位(为简单起见,假设n是2的幂),如下图所示:
由此,X=A2n/2+B ,Y=C2n/2+D,这样,X和Y的乘积可表示为:XY=AC2n+[(A-B)(D-C)+AC+BD]2n/2+BD 。它仅需做3次n/2位整数的乘法(AC,BD和(A-B)(D-C)),6次加、减法和2次移位,由此可得算法复杂度为:
用解
您可能关注的文档
最近下载
- AutoFormR6实例讲解-拉伸.ppt
- 食品安全主体责任日管控记录表、周排查记录表、月调度记录表(1).docx VIP
- 金元浦-中国文化概论(第四版)第十三章.ppt VIP
- 二杨梅素基二硒醚在肿瘤方面的药物应用.pdf VIP
- 2025年新能源汽车建设项目可行性研究报告(编制大纲).docx
- 一种固定式高倍数泡沫产生器.pdf VIP
- 初中-历史-人教部编版-第19课法国大革命和拿破仑帝国_2020430155529.ppt VIP
- 【MOOC】《中国马克思主义与当代》(北京科技大学)中国大学MOOC慕课答案.docx VIP
- 1.2互联网应用的基本特征(教学课件)-第1册信息科技同步教学(河北大学版2024新教材).pptx VIP
- 某文旅项目施工合同模板.pdf VIP
文档评论(0)