分治算法实验报告.docx

上传人:b****1 文档编号:234708 上传时间:2022-10-07 格式:DOCX 页数:4 大小:31.58KB
下载 相关 举报
分治算法实验报告.docx_第1页
第1页 / 共4页
分治算法实验报告.docx_第2页
第2页 / 共4页
分治算法实验报告.docx_第3页
第3页 / 共4页
分治算法实验报告.docx_第4页
第4页 / 共4页
亲,该文档总共4页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

分治算法实验报告.docx

《分治算法实验报告.docx》由会员分享,可在线阅读,更多相关《分治算法实验报告.docx(4页珍藏版)》请在冰豆网上搜索。

分治算法实验报告.docx

算法分析与设计实验报告

第1次实验

姓名

学号

班级

时间

10.17上午

地点

四合院102

实验名称

分治算法实验(用分治法查找数组元素的最大值和最小值)。

实验目的

通过上机实验,要求掌握分治算法的问题描述、算法设计思想、程序设计。

实验原理

在满足分治法的条件下,根据不同的输入用例,能准确的输出用例中的最大值与最小值。

并计算出程序运行所需要的时间。

分治法的基本思想是将一个规模为n的问题分解为k个规模较小的子问题,这些子问题互相独立且与原问题相同。

递归地解这些子问题,然后将各子问题的解合并得到原问题的解。

实验步骤

①先解决小规模的问题,如数组中只有1个元素或者只有两个元素时候

的情况。

②将问题分解,如果数组的元素大于等于3个,将数组分为两个小的数

组。

③递归的解各子问题,将(中分解的两个小的数组再进行以上两个步骤

((最后都化为小规模问题。

④将各子问题的解进行比较最终得到原问题的解。

关键代码

voidSelectMaxMin(int*a,inti,intj,int&max,int&min)

{

if(i==j)

{

max=a[i];

min=a[i];

return;

}

else

{

intmid=(i+j)/2;

intmaxi,maxj,mini,minj;

SelectMaxMin(a,i,(i+j)/2,maxi,mini);

SelectMaxMin(a,((i+j)/2)+1,j,maxj,minj);

if(maxi>maxj)

max=maxi;

else

max=maxj;

if(mini

min=mini;

else

min=minj;

return;

}

}

srand((unsignedint)time(NULL));

cout<<"随机产生的数据(0-100):

";

for(inti=0;i

a[i]=rand()%100;

测试结果

实验心得

由于本次实验的算法思想之前数据结构课程就有了解,相对来说难度不是很大,通过本次实验,加深了对分治法算法的理解,同时再次巩固了之前所学的随机数的产生的使用。

实验中,更加明确了如何分析具体的问题,以及具体写算法思想以及步骤。

要想更好的掌握还得要理论与实践结合!

我懂得,程序、工程都是由一个个细节堆码起来的,不能忽视任何一个小问题,要想熟练地写代码,还是要扎扎实实的练习!

实验得分

助教签名

附录:

完整代码

SelectMaxMin.cpp:

#include

#include

#include

#include

#include

usingnamespacestd;

voidSelectMaxMin(int*a,inti,intj,int&max,int&min)

{

if(i==j)

{

max=a[i];

min=a[i];

return;

}

else

{

intmid=(i+j)/2;

intmaxi,maxj,mini,minj;

SelectMaxMin(a,i,(i+j)/2,maxi,mini);

SelectMaxMin(a,((i+j)/2)+1,j,maxj,minj);

if(maxi>maxj)

max=maxi;

else

max=maxj;

if(mini

min=mini;

else

min=minj;

return;

}

}

intmain()

{

clock_tstart,end,over;

start=clock();

end=clock();

over=end-start;

start=clock();

//freopen("in.txt","r",stdin);

//freopen("out.txt","w",stdout);

intm;

cout<<"Pleaseinputthenumber:

";

cin>>m;

inta[m];

srand((unsignedint)time(NULL));

cout<<"随机产生的数据(0-100):

";

for(inti=0;i

a[i]=rand()%100;

for(inti=0;i

cout<

cout<

intmax,min;

SelectMaxMin(a,0,m-1,max,min);

cout<<"max="<

cout<<"min="<

end=clock();

printf("Thetimeis%6.3f",(double)(end-start-over)/CLK_TCK);

}

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 医药卫生 > 预防医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1