算法设计实验报告模板.docx
- 文档编号:6606553
- 上传时间:2023-01-08
- 格式:DOCX
- 页数:14
- 大小:58.66KB
算法设计实验报告模板.docx
《算法设计实验报告模板.docx》由会员分享,可在线阅读,更多相关《算法设计实验报告模板.docx(14页珍藏版)》请在冰豆网上搜索。
算法设计实验报告模板
《算法设计与分析》实验报告
班级:
xxxxx_姓名:
_xxxxx学号:
_xxxxxxxxx__日期xxxx-xx-xx
学院
主讲教师
专业
课程名称
评语
xxxxxxxxxxx
xxxx
xxxxxxxx
xxxxxxxxxx
实验三、贪心算法
实验目的:
1、理解贪心算法的概念;
2、掌握贪心算法的基本要素;
3、理解贪心算法与动态规划算法的差异;
4、理解贪心算法的一般理论。
实验项目:
1、活动安排问题;
2、最优装载问题;
3、多机调度。
实验步骤
(请附上编写的程序及其运行结果截图!
!
):
1.活动安排问题
代码:
#include
usingnamespacestd;
#defineMAXCOUNT100
#defineTRUE1
#defineFALSE0
typedefintTime;
typedefstruct
{
Timestart;
Timefinish;
intindex;
boolabc;
}HuoDong;
typedefstruct
{
HuoDongr[MAXCOUNT+1];
intlength;
}HDS;
intPartition(HDS&L,intlow,inthigh)
{
intshuzhou;
L.r[0]=L.r[low];
shuzhou=L.r[low].finish;
while(low { while(low --high; L.r[low]=L.r[high]; while(low ++low; L.r[high]=L.r[low]; } L.r[low]=L.r[0]; returnlow; } voidQuickSort(HDS&L,intlow,inthigh) { intshuzhou; if(low { shuzhou=Partition(L,low,high); QuickSort(L,low,(shuzhou-1)); QuickSort(L,(shuzhou+1),high); } } voidGreedySelector(HDS&L) { intn=L.length-1; L.r[1].abc=true; intj=1; for(inti=2;i<=n;i++) { if(L.r[i].start>=L.r[j].finish) { L.r[i].abc=true; j=i; } else L.r[i].abc=false; } } voidListr(HDSL) { intn=L.length-1; intcount=0; for(inti=1;i<=n;i++) { if(L.r[i].abc==true) { cout<<"第个"< count++; } } cout<<"可以安排的活动总数为: "< } intmain() { intn; HDSL; cout<<"请输入可选择的活动个数(注意: 最大数目不能超过100个! ): "< cin>>n; if(n>100) { cout<<"你输入的活动个数太大! ! ! "< returnFALSE; } L.length=(n+1); cout<<"请输入各个活动开始的时间: "< for(inti=1;i<=n;i++) { cout<<"请输入第个"< "; cin>>L.r[i].start; L.r[i].index=i; cout< } cout<<"请输入各个活动结束的时间"< for(inti=1;i<=n;i++) { cout<<"请输入第个"< "< cin>>L.r[i].finish; cout< } QuickSort(L,1,n); GreedySelector(L); Listr(L); returnTRUE; } 运行结果: 2.最优装载问题 代码: #include usingnamespacestd; classLoading { friendintMaxLoading(int[],int,int,int[]); private: //intBound(inti); voidBacktrack(intt); intn;//集装箱数 int*x;//当前解 int*bestx;//当前最优解 int*w;//集装箱重量数组 intc;//第一艘轮船的载重量 intcw;//当前重量 intbestw;//当前最优载重量 intr;//剩余集装箱重量 }; voidLoading: : Backtrack(inti) { if(i>n) { if(cw>bestw) { for(intj=1;j<=n;j++) bestx[j]=x[j]; bestw=cw; } return; } r-=w[i]; if(cw+w[i]<=c) { x[i]=1; cw+=w[i]; Backtrack(i+1); cw-=w[i]; } if(cw+r>bestw) { x[i]=0; Backtrack(i+1); } r+=w[i]; } intMaxLoading(intw[],intc,intn,intbestx[]){ LoadingX; X.x=newint[n+1]; X.w=w; X.c=c; X.n=n; X.bestx=bestx; X.bestw=0; X.cw=0; X.r=0; for(inti=1;i<=n;i++) X.r+=w[i]; X.Backtrack (1); delete[]X.x; returnX.bestw; } intmain() { int*w; int*bestx; intn; intc; cout<<"请输入集装箱数: "; cin>>n; cout<<"请输入第一艘轮船载重量: "; cin>>c; w=newint[n+1]; w[0]=0; cout<<"请输入重量: "< for(inti=1;i<=n;i++) cin>>w[i]; bestx=newint[n+1]; for(inti=1;i<=n;i++) bestx[i]=0; intm=MaxLoading(w,c,n,bestx); cout<<"最大装载数量: "< return0; } 运行结果: 3.多机调度 代码: #include #include usingnamespacestd; typedefstructJob { intID; inttime; }Job; typedefstructJobNode intID; inttime; JobNode*next; }JobNode; typedefstructHeader { ints; JobNode*next; }Header; intSelectMin(Header*M,intm) { intk=0; for(inti=1;i { if(M[i].s k=i; } returnk; } voidQuickSort(Job*job,intleft,intright) { intmiddle=0,i=left,j=right; Jobitemp; middle=job[(left+right)/2].time; do { while((job[i].time>middle)&&(i i++; while((job[j].time j--; if(i<=j) { itemp=job[j]; job[j]=job[i]; job[i]=itemp; i++; j--; } } while(i<=j); if(left QuickSort(job,left,j); if(right>i) QuickSort(job,i,right); } voiddisplay(Header*M,intm) { JobNode*p; for(inti=0;i { cout<<"\n第"< if(M[i].next==0) continue; p=M[i].next; do{ cout< p=p->next; }while(p! =0); } } voidoutSort(Job*job,intn) { cout<<"\n按工作时间由大到小为: \n时间: \t"; for(inti=0;i cout< cout<<"\n序号: \t"; for(inti=0;i cout< } voidsolve(Header*head,Job*job,intn,intm) { intk; for(inti=0;i { JobNode*jobnode=newJobNode; jobnode->time=job[i].time; jobnode->ID=job[i].ID; jobnode->next=0; head[i].s=jobnode->time; head[i].next=jobnode; } if(n<=m) { for(inti=0;i { head[i].s=0; head[i].next=0; } } if(n>m) { for(inti=0;i { JobNode*p; JobNode*jobnode=newJobNode; jobnode->time=job[i].time; jobnode->ID=job[i].ID; jobnode->next=0; k=SelectMin(head,m); p=head[k].next; head[k].s+=jobnode->time; while(p->next! =0) p=p->next; p->next=jobnode; } } } intmain() { intm,n; cout<<"\t\t《多机调度问题》\n"; cout<<"请输入机器台数m: "; cin>>m; Header*head=newHeader[m]; cout<<"请输入作业个数n: "; cin>>n; Job*job=newJob[n]; cout<<"\n请按序号输入每个作业调度所需时间time: "; for(inti=0;i { cin>>job[i].time; job[i].ID=i; } QuickSort(job,0,n-1); outSort(job,n); solve(head,job,n,m); display(head,m); cout< return0; } 运行结果: 实验中遇到的问题及解决方法: (包括本实验中遇到的问题、具体的解决方法、还没有解决的问题、实验收获等) (要仔细写实验反思,这将有助于你不断进步! ) 实验心得: 通过活动安排问题,最优装载问题,多机调度的编写让我理解了贪心算法的概念和掌握贪心算法的基本要素以及理解了贪心算法的基本理论。 在编写代码时,我也遇到了很多问题,比如动态数组的构建数组数据的传递等等。 我通过翻书和查资料最后还是一一解决了。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 算法 设计 实验 报告 模板