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