- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
计算机-软件-程序-算法-论文
《算法设计与分析》
上机实验报告
专 业:计算机科学与技术
班 级: 软件07-4班
姓 名: 22号
学 号: X X
说 明
算法设计与分析上机实验是充分掌握理论知识的重要环节,也是锻炼实际操作能力的重要过程和手段,因此,对学生上机实验有以下几点要求:
1、上机前做好充分的预习和准备,认真复习每章重点内容,熟悉所使用的硬件和软件环境。
2、实验前,预习好每次实验内容并预先给出相应的结果和算法,以达到上机检验的目的。
3、注意调试过程及运行结果,不断积累程序编写和程序调试经验。
4、实验结束后,认真完成每次实验报告,包括程序书写格式和结果的正确性。
另外,上机实验成绩的给定主要包括三部分,即上机实验课的出勤,实验的完成情况和实验报告的总结书写情况。
序号 实验题目 成绩 批阅教师签字 1 实验一 递归与分治之归并排序和快速排序问题 2 实验二 动态规划之多段图问题 3 实验三 动态规划之矩阵连乘问题和最长公共子序列问题 4 实验四 贪心法之单源最短路径问题 5 实验五 回溯法之N皇后问题和图的m着色问题 总成绩
实验一 递归与分治之归并排序和快速排序问题
上机实验日期: 2010-3-26 上机指导教师: 刘文强
一、实验目的
1.掌握递归与分治策略的基本思想;
2.掌握用递归与分治策略来设计算法的基本方法和步骤;
3.学会使用递归与分治策略来解决一些实际问题;
4.进一步加强分析问题、解决问题的能力;
二、实验要求
1.实验前做好充分准备,事先预习好本次实验内容。
2.实验时记录实验结果,按要求完成实验内容。
3.实验结束后,给出实验总结与分析并及时给出本次实验的实验报告。
三、实验原理
1.递归与分治策略的基本思想
将一个复杂问题分解成若干较小问题进行求解是一个好主意。可以将一个难以求解的复杂问题分解成若干较小规模、相互独立,但类型相同的子问题,然后求解这些子问题;如果子问题还比较复杂而不能直接求解,还可以继续细分,直到子问题足够小,能够直接求解为止;此外,为了得到原始问题的解,必须找到一种途径能将各子问题的解组合正原始问题的一个完整答案,这种问题求解策略称为分治法。
分治法顾名思义就是分而治之。一个问题能够用分治法求解的要素是:
第一,问题能够按照某种方式分解成若干个规模较小、相互独立且与原问题类型相同的子问题;
第二,子问题足够小时可以直接求解;
第三,能够将子问题的解组合成原问题的解;
由于分治法要求分解成同类子问题,并允许不断分解,使问题规模不断减小,最终可用已知的方法求解足够小的问题,因此,分治法求解很自然导致一个递归算法。
2.分治法的算法设计模式
divide-and-conquer(p)
{
if(|p|=n0)
adhoc(p);
divide p into smaller subinstances p1,p2,…pk;
for(i=1;i=k;i++)
yi=divide-and-conquer(pi);
return merge(y1,y2,…yk);
}
其中|p|表示问题p的规模。n0为一阈值,表示当问题p的规模不超过n0时,问题已容易解出,不必再继续分解。adhoc(p)是该分治法中的基本子算法,用于直接解小规模的问题p。当问题p的规模不超过n0时,直接用算法adhoc(p)求解。算法merge(y1,y2,…yk)是该分治法中的合并子算法,用于将p的子问题p1,p2,…pk的解y1,y2,…yk合并为p的解。
四、实验内容
1.请编程实现找最大最小元素问题的分治算法
算法如下:
void MaxMin(int i,int j,int max,int min)
{ if(i==j) max=min=a[i];
else if(i==j-1)
{ if(a[i]a[j])
{ max=a[i]; min=a[j];}
else
{ max=a[j]; min=a[i];}
}
else
{ int mid=((i+j)/2(; int max1,min1;
MaxMin(i,mid,max,min);
MaxMin(mid+1,j,m
原创力文档


文档评论(0)