算法设计与分析

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

本科实验报告

课程名称:算法设计与分析

实验项目:归并排序、作业调度、多段图、n皇后

实验地点:行远楼C124 专业班级: 13级学号:

学生姓名:

指导教师:王幸民

2015年4月11日

实验一分治法归并排序

一、实验目的和要求

1.掌握合并排序的基本思想

2.掌握合并排序的实现方法

3.学习分析算法的时间复杂度

4.学会用分治法解决实际问题

二、实验内容和原理

随机产生一个整形数据,然后用合并排序将该数组做升序排列,要求输出升序前和升序后的数据

三、主要仪器设备

程序设计语言:c++

编程工具:VC++6.0

四、操作方法与实验步骤

#include

#define max 100

using namespace std;

int a[max],temp[max];

void guibingSort(int l,int r){

if(l==r) return;

int mid=(l+r)/2;

guibingSort(l,mid);

guibingSort(mid+1,r);

int i=1,j=mid+1,k=1;

while(i<=mid&&j<=r){

if(a[i]>a[j]) temp[k++]=a[j++];

else temp[k++]=a[i++];

}

while(i<=mid) temp[k++]=a[i++];

while(j<=r) temp[k++]=a[j++];

for(i=l;i<=r;i++) a[i]=temp[i];

}

int main(){

int n;

cout<<"请输入数组规模:";

cin>>n;

cout<<"请输入"<

for(int i=1;i<=n;i++)

scanf("%d",&a[i]);

cout<<"排序前为"<

for(i=1;i<=n;i++)

printf("%d ",a[i]);

cout<

guibingSort(1,n);

cout<<"排序后为"<

for(i=1;i<=n;i++)

printf("%d ",a[i]);

cout<

return 0;

}

五、实验结果与分析

六、实验总结

通过本次实验的学习进一步对分治法的加强了理解,同时对数据结构的一些算法有更深的掌握,同时认识到自己对某些基础算法掌握的并不是很牢固,要加强自己的动手实践能力!

实验二贪心法作业调度

一、实验目的

1.掌握贪心算法的基本思想

2.掌握贪心算法的典型问题求解

3.进一步多级调度的基本思想和算法设计方法

4.学会用贪心法分析和解决实际问题

二、实验内容

设计贪心算法实现作业调度,要求按作业调度顺序输出作业序列。有6个独立作业{0,1,2,3,4,5}由3台机器{M0,M1,M2}加工处理,各作业所需处理时间分别为{34,22,67,51,10,90},求该条件下的作业调度方案。

三、实验环境

程序设计语言:c++

编程工具:microsoft visual studio 2010

四、方法描述和程序代码

#include

#define N 10

using namespace std;

void muitMachine(int m,int n){

int i,j,k,temp;

int S[N][N];

int rear[N/2];

int t[8]={4,2,4,5,6,4,5,7};

int d[8];

for(i=0;i<8;i++)

printf("%d\t",t[i]);

cout<

for(j=1;j<8;j++){ for(i=0;i<8-j;i++)

if(t[i]

temp=t[i];

t[i]=t[i+1];

t[i+1]=temp;

}

}

for(i=0;i<4;i++){

S[i][0]=i;

rear[i]=0;

d[i]=t[i];

}

for(i=4;i<8;i++){

for(j=0,k=1;k<4;k++)

if(d[k]

rear[j]++;

S[j][rear[j]]=i; ]

d[j]+=t[i];

}

for(i=0;i<4;i++){

cout<<"机器"<

for(j=0;S[i][j]>=0;j++)

cout<<"作业"<

cout<

}

}

int main(){

muitMachine(4,8);

return 0;

}

五、实验结果截图

六、实验总结

此次实验让我对贪心算法的思想有了初步的了解,并且学会了用贪心算法解决

一些实际问题。两个程序中都运用了循环语句,在编写代码时,在循环语句的设置中遇到许多问题,经过调试最终解决。所以,以后应当多做一些循环语句的练习。通过实践加强编程的熟练程度

实验三动态规划法求多段图问题

一、实验目的

1、掌握动态规划算法的基本思想

2、掌握多段图的动态规划算法

3、选择邻接表或邻接矩阵方式来存储图

4、分析算法求解的复杂度。

二、实验内容

设G=(V,E)是一个带权有向图,其顶点的集合V被划分成k>2个不相交的子集Vi,1

三、实验环境

程序设计语言:c++

编程工具:microsoft visual studio 2010

相关文档
最新文档