算法设计与分析实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验报告题目
实验一递归与分治策略
一、实验目的
1.加深学生对分治法算法设计方法的基本思想、基本步骤、基本方法的理解与掌握;
2.提高学生利用课堂所学知识解决实际问题的能力;
3.提高学生综合应用所学知识解决实际问题的能力。
二、实验内容
设计一个递归和分治算法,找出数组的最大元素,找出x在数组A中出现的次数。
三、实验要求
(1)用分治法求解…问题;
(2)再选择自己熟悉的其它方法求解本问题;
(3)上机实现所设计的所有算法;
四、实验过程设计(算法设计过程)
1.设计一个递归算法,找出数组的最大元素。
2.设计一个分治算法,找出x在数组A中出现的次数。
3.写一个主函数,调用上述算法。
五、实验结果分析
(分析时空复杂性,设计测试用例及测试结果)
时间复杂性:最好情况下,O(n)
最坏情况下:O(nlog(n)
空间复杂性分析:O(n)
六、实验体会
通过写递归与分治策略实验,更加清楚的知道它的运行机理,分治法解题的一般步骤:(1)分解,将要解决的问题划分成若干规模较小的同类问题;(2)求解,当子问题划分得足够小时,用较简单的方法解决;(3)合并,按原问题的要求,将子问题的解逐层合并构成原问题的解。做实验重在动手动脑,还是要多写写实验,才是硬道理。
七、附录:(源代码)
#include"stdio.h"
#define ElemType int
int count(ElemType a[],int i,int j,ElemType x)
{
int k=0,mid; //k用来计数,记录数组中x出现的次数if(i==j)
{
if(a[i]==x) k++;
return k;
}
else
{
mid=(i+j)/2;
k+=count(a,i,mid,x);
k+=count(a,mid+1,j,x);
}
return k;
}
ElemType Maxitem(ElemType a[],int n)
{
ElemType max=a[n-1],j;
if(n==1)
{
max=a[n-1];
return max;
}
else
{
j=Maxitem(a,n-1);
if(j>max) max=j;
return max;
}
}
void main(void)
{
ElemType a[]={1,5,2,7,3,7,4,8,9,5,4,544,2,4,123};
ElemType b;
ElemType x;
int n;
b=Maxitem(a,15);
printf("数组的最大元素为%d\n",b);
printf("输入想要计数的数组元素:\n");
scanf("%d",&x);
n=count(a,0,14,x);
printf("%d在数组中出现的次数为%d次\n",x,n);
}
实验二动态规划——求解最优问题
一、实验目的
1.加深学生对动态规划算法设计方法的基本思想、基本步骤、基本方法的理解与掌握;
2.提高学生利用课堂所学知识解决实际问题的能力;
3.提高学生综合应用所学知识解决实际问题的能力。
二.实验内容
根据实验目的要求和实验条件,由学生运用所学知识,自行选择最优问题,自己设计算法,自行编程实现、自行对实验结果进行分析,自行完成实验项目报告的撰写等。在教师的指导下,最大限度发挥学生资助学习的积极性,为后续专业课的学习打下坚实基础。
三.实验要求
(1)用动态规划思想求解最优问题;
(2)再选择自己熟悉的程序设计语言实现所有算法;
(3)分析所设计的算法的时间/空间复杂性。
四.实验过程设计(算法设计过程)
实验3.3。先在a[],b[]数组中选a[0]和b[0]开始,然后分别计算在以a[0]和b[0]开始的总的时间,再比较哪个最短。
五.实验结果分析
六.实验体会
始终觉得用代码写着比用笔直接计算要难点,不过代码解决的事一类问题,只需要输数据就可以。所以还是代码好,不过要有好的逻辑思维和方法,才能写出好的
七.附录:(源代码)
#include "stdio.h"
#include "iostream.h"
#include "string.h"
void main()
{
void sf(int a[],int b[],int n);
int a[100],b[100],n,i;
printf("请输入需要完成的作业数量:");
scanf("%d",&n);
printf("请输入A组机器完成作业对应的时间:");
for(i=0;i printf("请输入B组机器完成作业对应的时间:"); for(i=0;i f(a,b,n); } void f(int a[],int b[],int n) { int max(int a,int b); int i,j,d,low,high,k,A,B,v[100]; for(i=0;i {