算法分析与设计实验报告
第 1 次实验
姓名 学号 班级
时间 10.17 上午 地点 四合院 102
实验名称 分治算法实验(用分治法查找数组元素的最大值和最小值)。
实验目的 通过上机实验,要求掌握分治算法的问题描述、算法设计思想、程序设计。
在满足分治法的条件下,根据不同的输入用例,能准确的输出用例中的
最大值与最小值。并计算出程序运行所需要的时间。
实验原理 分治法的基本思想是将一个规模为 n 的问题分解为k 个规模较小的子问
题,这些子问题互相独立且与原问题相同。递归地解这些子问题,然后将各
子问题的解合并得到原问题的解。
① 先解决小规模的问题,如数组中只有 1 个元素或者只有两个元素时候
的情况。
② 将问题分解,如果数组的元素大于等于 3 个,将数组分为两个小的数
实验步骤 组。
③ 递归的解各子问题,将 (中分解的两个小的数组再进行以上两个步骤
((最后都化为小规模问题。
④ 将各子问题的解进行比较最终得到原问题的解。
void SelectMaxMin(int *a,int i,int j,int &max,int &min)
{
if(i==j)
{
max= a[i];
min =a[i];
return;
}
else
{
int mid=(i+j)/2;
int maxi,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((unsigned int)time(NULL));
cout << "随机产生的数据(0-100):";
for(int i=0; i
a[i] = rand()%100;
测试结果
由于本次实验的算法思想之前数据结构课程就有了解,相对来
说难度不是很大,通过本次实验,加深了对分治法算法的理解,同
时再次巩固了之前所学的随机数的产生的使用。实