《算法设计与分析》
上机实验报告
专业:计算机科学与技术
班级: 软件07-4班
姓名: 22号
学号: X X
说明
算法设计与分析上机实验是充分掌握理论知识的重要环节,也是锻炼实际操作能力的重要过程和手段,因此,对学生上机实验有以下几点要求:
1、上机前做好充分的预习和准备,认真复习每章重点内容,熟悉所使用的硬件和软件环境。
2、实验前,预习好每次实验内容并预先给出相应的结果和算法,以达到上机检验的目的。
3、注意调试过程及运行结果,不断积累程序编写和程序调试经验。
4、实验结束后,认真完成每次实验报告,包括程序书写格式和结果的正确性。
另外,上机实验成绩的给定主要包括三部分,即上机实验课的出勤,实验的完成情况和实验报告的总结书写情况。
序号
实验题目
成绩
批阅教师签字
1
实验一递归与分治之归并排序和快速排序问题
2
实验二动态规划之多段图问题
3
实验三动态规划之矩阵连乘问题和最长公共子序列问题
4
实验四贪心法之单源最短路径问题
5
实验五回溯法之N皇后问题和图的m着色问题
总成绩
实验一递归与分治之归并排序和快速排序问题
上机实验日期: 2010-3-26 上机指导教师: 刘文强
一、实验目的
;
;
;
、解决问题的能力;
二、实验要求
,事先预习好本次实验内容。
,按要求完成实验内容。
,给出实验总结与分析并及时给出本次实验的实验报告。
三、实验原理
将一个复杂问题分解成若干较小问题进行求解是一个好主意。可以将一个难以求解的复杂问题分解成若干较小规模、相互独立,但类型相同的子问题,然后求解这些子问题;如果子问题还比较复杂而不能直接求解,还可以继续细分,直到子问题足够小,能够直接求解为止;此外,为了得到原始问题的解,必须找到一种途径能将各子问题的解组合正原始问题的一个完整答案,这种问题求解策略称为分治法。
分治法顾名思义就是分而治之。一个问题能够用分治法求解的要素是:
第一,问题能够按照某种方式分解成若干个规模较小、相互独立且与原问题类型相同的子问题;
第二,子问题足够小时可以直接求解;
第三,能够将子问题的解组合成原问题的解;
由于分治法要求分解成同类子问题,并允许不断分解,使问题规模不断减小,最终可用已知的方法求解足够小的问题,因此,分治法求解很自然导致一个递归算法。
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的解。
四、实验内容
算法如下:
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,max1,min1);
if(max<max1)
max=max1;
if(min>min1)
min=min1;
}
请给出实现该算法的主程序和输入输出数据。
主程序
void main ()
{ int n,max,min;
scanf("%d",&n);
for (int i = 1; i <= n;i++)
scanf("%d",&a[i]);
M
计算机-软件-程序-算法-论文 来自淘豆网m.daumloan.com转载请标明出处.