算法设计与分析实验报告Word文档格式.docx

上传人:b****4 文档编号:15893303 上传时间:2022-11-16 格式:DOCX 页数:14 大小:109.16KB
下载 相关 举报
算法设计与分析实验报告Word文档格式.docx_第1页
第1页 / 共14页
算法设计与分析实验报告Word文档格式.docx_第2页
第2页 / 共14页
算法设计与分析实验报告Word文档格式.docx_第3页
第3页 / 共14页
算法设计与分析实验报告Word文档格式.docx_第4页
第4页 / 共14页
算法设计与分析实验报告Word文档格式.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

算法设计与分析实验报告Word文档格式.docx

《算法设计与分析实验报告Word文档格式.docx》由会员分享,可在线阅读,更多相关《算法设计与分析实验报告Word文档格式.docx(14页珍藏版)》请在冰豆网上搜索。

算法设计与分析实验报告Word文档格式.docx

空间复杂性分析:

O(n)

六、实验体会

通过写递归与分治策略实验,更加清楚的知道它的运行机理,分治法解题的一般步骤:

(1)分解,将要解决的问题划分成若干规模较小的同类问题;

(2)求解,当子问题划分得足够小时,用较简单的方法解决;

(3)合并,按原问题的要求,将子问题的解逐层合并构成原问题的解。

做实验重在动手动脑,还是要多写写实验,才是硬道理。

七、附录:

(源代码)

#include"

stdio.h"

#defineElemTypeint

intcount(ElemTypea[],inti,intj,ElemTypex)

{

intk=0,mid;

//k用来计数,记录数组中x出现的次数

if(i==j)

{

if(a[i]==x)k++;

returnk;

}

else

mid=(i+j)/2;

k+=count(a,i,mid,x);

k+=count(a,mid+1,j,x);

returnk;

}

ElemTypeMaxitem(ElemTypea[],intn)

ElemTypemax=a[n-1],j;

if(n==1)

max=a[n-1];

returnmax;

j=Maxitem(a,n-1);

if(j>

max)max=j;

voidmain(void)

ElemTypea[]={1,5,2,7,3,7,4,8,9,5,4,544,2,4,123};

ElemTypeb;

ElemTypex;

intn;

b=Maxitem(a,15);

printf("

数组的最大元素为%d\n"

b);

输入想要计数的数组元素:

\n"

);

scanf("

%d"

&

x);

n=count(a,0,14,x);

%d在数组中出现的次数为%d次\n"

x,n);

实验二动态规划——求解最优问题

一、实验目的

1.加深学生对动态规划算法设计方法的基本思想、基本步骤、基本方法的理解与掌握;

2.提高学生利用课堂所学知识解决实际问题的能力;

3.提高学生综合应用所学知识解决实际问题的能力。

二.实验内容

根据实验目的要求和实验条件,由学生运用所学知识,自行选择最优问题,自己设计算法,自行编程实现、自行对实验结果进行分析,自行完成实验项目报告的撰写等。

在教师的指导下,最大限度发挥学生资助学习的积极性,为后续专业课的学习打下坚实基础。

三.实验要求

(1)用动态规划思想求解最优问题;

(2)再选择自己熟悉的程序设计语言实现所有算法;

(3)分析所设计的算法的时间/空间复杂性。

四.实验过程设计(算法设计过程)

实验3.3。

先在a[],b[]数组中选a[0]和b[0]开始,然后分别计算在以a[0]和b[0]开始的总的时间,再比较哪个最短。

五.实验结果分析

六.实验体会

始终觉得用代码写着比用笔直接计算要难点,不过代码解决的事一类问题,只需要输数据就可以。

所以还是代码好,不过要有好的逻辑思维和方法,才能写出好的

七.附录:

#include"

iostream.h"

string.h"

voidmain()

voidsf(inta[],intb[],intn);

inta[100],b[100],n,i;

请输入需要完成的作业数量:

"

n);

请输入A组机器完成作业对应的时间:

for(i=0;

i<

n;

i++)scanf("

a[i]);

请输入B组机器完成作业对应的时间:

b[i]);

f(a,b,n);

voidf(inta[],intb[],intn)

intmax(inta,intb);

inti,j,d,low,high,k,A,B,v[100];

i++)

for(j=0;

j<

j++)

{

if(a[i]<

a[j])

{

d=a[i];

a[i]=a[j];

a[j]=d;

d=b[i];

b[i]=b[j];

b[j]=d;

}

}

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;

{

if(b[k]<

b[j])

{

d=b[k];

b[k]=b[j];

b[j]=d;

}

}

A=0;

B=0;

j=0;

while(j<

=i)

A=A+a[j];

j++;

n)

B=B+b[j];

v[i]=max(A,B);

i=1;

d=v[0];

while(i<

if(v[i]<

d)

d=v[i];

最短作业时间为:

%d\n"

d);

intmax(inta,intb)

if(a>

b)

returna;

else{

returnb;

实验三贪心算法——“0/1背包”及“有限期作业调度”

1.进一步理解算法设计的基本步骤及各步的主要内容、基本要求

2.加深对贪婪法算法设计方法的理解与应用

3.掌握将算法转化为计算机上机程序的方法

4.培养学生应用所学知识解决实际问题的能力。

(1)给定n种物品和一个背包。

物品I的重量是wi,其价值为pi,背包的容量为M。

应如何选择装入背包的物品(每件物品可以全装也可以只装一部分),使得装入背包中物品的总价值最大?

(2)给定n个作业j1,j2,…,jn。

对每个作业ji,有一个与之联系的限期di>

0和收益pi≥0,di,pi均为整数,1≤I≤n。

对作业ji,只有在限期di内完成,才能得到收益pi。

假定只有一台处理机为这批服务业服务,处理机每次只能处理一个作业,并且完成一作业需一个单位时间。

所谓一个可行解,是这批作业的一个子集J,J中每一作业均能在限期di内完成。

调度的总收益是子集J中各作业收益之和。

具有最大收益的的可行解和为最优解。

如何求其最优解?

(1)设计用贪婪法求解“背包问题”及“带有限期的计算机作业调度问题”的算法;

(2)上机实现所设计的算法;

后面人的等到时间等于前面人的服务时间,要总的等待时间最短,就要前面的服务时间最短,就需要先让服务时间段的人先进行服务。

1.先按原来的顺序服务时间服务,得到一个等待时间

2.升序排列后,得到一个等待时间

五.结果分析

这是总的实验思路。

贪心算法就是要尽可能的提高效率,得到想要的效益。

七.附录(源代码)

main()

inti,j,n,a[100],d=0,k=0;

请输入顾客的总人数:

依次输入每个顾客的服务时间:

d=0;

for(intj=0;

i;

d=d+a[j];

//第j个人的等待时间

k=k+d;

//总的等待时间

此时等待的总时间为:

k);

for(intj=i;

if(a[i]>

按升序排列后的数组为:

i++)printf("

a[i]);

k=0;

\n此时等待的总时间为:

 

实验四回溯法——“N皇后”问题

1.掌握能用回溯法求解的问题应满足的条件;

2.加深对回溯法算法设计方法的理解与应用;

3.锻炼学生对程序跟踪调试能力;

4.通过本次实验的练习培养学生应用所学知识解决实际问题的能力。

由N2个方块排成N行N列的正方形,称为N元棋盘,在N元棋盘上放置N个皇后,如果某两个皇后位于N元棋盘的同一行或同一列或同一斜线(斜率为±

1)上,则称它们在互相攻击,试设计算法找出使N个皇后互不攻击的所有布局。

(1)用回溯法算法设计方法求解N元皇后问题

(2)找出N皇后问题的互不攻击的所有解

(3)皇后数N由键盘动态输入

(4)上机实现所设计的算法;

(5)分析所设计的算法的时间/空间复杂性。

(1)分析N皇后问题的约束条件,并将其显示化,选择存储结构建立相应的数学模型;

(2)根据所建立的数学模型,设计求解该

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 军事

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1