算法设计与分析的实验报告.docx
- 文档编号:3801555
- 上传时间:2022-11-25
- 格式:DOCX
- 页数:17
- 大小:145.65KB
算法设计与分析的实验报告.docx
《算法设计与分析的实验报告.docx》由会员分享,可在线阅读,更多相关《算法设计与分析的实验报告.docx(17页珍藏版)》请在冰豆网上搜索。
算法设计与分析的实验报告
实验一递归与分治策略
一、实验目的
1.加深学生对分治法算法设计方法的基本思想、基本步骤、基本方法的理解与掌握;
2.提高学生利用课堂所学知识解决实际问题的能力;
3.提高学生综合应用所学知识解决实际问题的能力。
二、实验内容
1、
①设a[0:
n-1]是已排好序的数组。
请写二分搜索算法,使得当搜索元素x不在数组中时,返回小于x的最大元素位置i和大于x的最小元素位置j。
当搜索元素在数组中时,i和j相同,均为x在数组中的位置。
②写出三分搜索法的程序。
三、实验要求
(1)用分治法求解上面两个问题;
(2)再选择自己熟悉的其它方法求解本问题;
(3)上机实现所设计的所有算法;
四、实验过程设计(算法设计过程)
1、已知a[0:
n-1]是一个已排好序的数组,可以采用折半查找(二分查找)算法。
如果搜索元素在数组中,则直接返回下表即可;否则比较搜索元素x与通过二分查找所得最终元素的大小,注意边界条件,从而计算出小于x的最大元素的位置i和大于x的最小元素位置j。
2、将n个元素分成大致相同的三部分,取在数组a的左三分之一部分中继续搜索x。
如果x>a[2(n-1)/3],则只需在数组a的右三分之一部分中继续搜索x。
上述两种情况不成立时,则在数组中间的三分之一部分中继续搜索x。
五、实验结果分析
二分搜索法:
三分搜索法:
时间复杂性:
二分搜索每次把搜索区域砍掉一半,很明显时间复杂度为O(logn)。
(n代表集合中元素的个数)
三分搜索法:
O(3log3n)
空间复杂度:
O
(1)。
六、实验体会
本次试验解决了二分查找和三分查找的问题,加深了对分治法的理解,收获很大,同时我也理解到学习算法是一个渐进的过程,算法可能一开始不是很好理解,但是只要多看几遍,只看是不够的还要动手分析一下,这样才能学好算法。
七、附录:
(源代码)
二分搜索法:
#include
#include
intbinarySearch(inta[],intx,intn)
{
intleft=0;intright=n-1;inti,j;
while(left<=right)
{
intmiddle=(left+right)/2;
if(x==a[middle]){i=j=middle;return1;}
if(x>a[middle])left=middle+1;
elseright=middle-1;
}
i=right;j=left;
return0;
}
intmain()
{inta[10]={0,1,2,3,4,5,6,7,8,9};
intn=10;
intx=9;
if(binarySearch(a,x,n))
cout<<"找到"< else cout<<"找不到"< return0; } 实验二动态规划——求解最优问题 一、实验目的 1.加深学生对动态规划算法设计方法的基本思想、基本步骤、基本方法的理解与掌握; 2.提高学生利用课堂所学知识解决实际问题的能力; 3.提高学生综合应用所学知识解决实际问题的能力。 二、实验内容 1、用两台处理机A和B处理n个作业。 设第i个作业交给机器A处理时所需要的时间是a[i],若由机器B来处理,则所需要的时间是b[i]。 由于各作业的特点和机器的性能关系,很可能对于某些i,有a[i]>=b[i],而对于某些就j,j! =i,有a[i] 既不能将一个作业分开由两台机器处理,也没有一台机器能同时处理2个作业。 设计一个动态规划算法,使得这两台机器处理完这n个作业的时间最短(从任何一台机器开工到最后一台机器停工的总的时间)。 研究一个实例: (a[1],a[2],a[3],a[4],a[5],a[6])=(2,5,7,10,5,2);(b[1],b[2],b[3],b[4],b[5],b[6])=(3,8,4,11,3,4)。 2、长江游艇俱乐部在长江上设置了n个游艇出租站1,2……n。 游客可在游艇出租站租用游艇,并在下游的任何一个游艇出租站归还游艇。 游艇出租站i到游艇出租站j之间的租金r(i,j)1<=i 设计一个算法,计算出游艇1到游艇n所需最少租金。 三、实验要求 (1)用动态规划思想求解最优问题; (2)再选择自己熟悉的程序设计语言实现所有算法; (3)分析所设计的算法的时间/空间复杂性。 四、实验过程设计(算法设计过程) 1、对于给定的2台处理机A和B处理n个作业,找出一个最优调度方案,使2台机器处理完这n个作业的时间最短。 2、对于给定的游艇出租站i到游艇出租站j之间的租金为r(i,j),1<=i 五、实验结果分析 独立任务最优调度问题: 租用游艇问题: 时间复杂性: 独立任务最优调度问题: O(n*Sum) 六、实验体会 对于算法来说,没有最好,只有更好,算法的结果不一定是最佳答案,但至少是最接近最佳答案的。 在权衡算法时间复杂度和空间复杂度的情况下,找到一个在时间和空间都能接受的算法才是上上之策。 七、附录: (源代码) 独立任务最优调度问题: usingSystem; namespacezydd { classProgram { staticvoidDlrwZydd(int[]a,int[]b,intn,int[]least,string[]result) { for(inti=0;i { least[i]=99; } intaSum=0,bSum=0; for(inti=0;i { aSum+=a[i]; bSum+=b[i]; } intSum=1+Math.Min(aSum,bSum); int[,]timeA=newint[n,Sum]; int[,]timeB=newint[n,Sum]; int[,]timeMax=newint[n,Sum]; char[,]who=newchar[n,Sum]; char[]tempRlt=newchar[n]; for(inti=0;i<=a[0];i++) { timeA[0,i]=i;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 算法 设计 分析 实验 报告
![提示](https://static.bdocx.com/images/bang_tan.gif)