算法设计与分析实验报告

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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

{

for(j=0;j

{

if(a[i]

{

d=a[i];

a[i]=a[j];

a[j]=d;

d=b[i];

b[i]=b[j];

b[j]=d;

}

}

}

for(i=0;i

{

low=i;

high=i;

while(a[i]==a[i+1])

{

i++;

high=i;

}

if(low!=high)

{

for(k=low;k<=high;k++)

{

for(j=k;j<=high;j++)

{

if(b[k]

{

d=b[k];

相关文档
最新文档