算法设计实验报告模板Word文档下载推荐.docx
- 文档编号:19620305
- 上传时间:2023-01-08
- 格式:DOCX
- 页数:14
- 大小:58.66KB
算法设计实验报告模板Word文档下载推荐.docx
《算法设计实验报告模板Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《算法设计实验报告模板Word文档下载推荐.docx(14页珍藏版)》请在冰豆网上搜索。
iostream>
usingnamespacestd;
#defineMAXCOUNT100
#defineTRUE1
#defineFALSE0
typedefintTime;
typedefstruct
{
Timestart;
Timefinish;
intindex;
boolabc;
}HuoDong;
HuoDongr[MAXCOUNT+1];
intlength;
}HDS;
intPartition(HDS&
L,intlow,inthigh)
intshuzhou;
L.r[0]=L.r[low];
shuzhou=L.r[low].finish;
while(low<
high)
while(low<
high&
&
L.r[high].finish>
=shuzhou)
--high;
L.r[low]=L.r[high];
L.r[low].finish<
++low;
L.r[high]=L.r[low];
}
L.r[low]=L.r[0];
returnlow;
voidQuickSort(HDS&
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)
intcount=0;
for(inti=1;
if(L.r[i].abc==true)
cout<
<
"
第个"
L.r[i].index<
活动被选中"
endl;
count++;
cout<
可以安排的活动总数为:
count<
intmain()
intn;
HDSL;
请输入可选择的活动个数(注意:
最大数目不能超过100个!
):
cin>
>
n;
if(n>
100)
你输入的活动个数太大!
returnFALSE;
L.length=(n+1);
请输入各个活动开始的时间:
"
请输入第个"
活动开始的时间:
;
cin>
L.r[i].start;
L.r[i].index=i;
请输入各个活动结束的时间"
活动结束的时间:
L.r[i].finish;
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<
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>
x[i]=0;
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;
X.r+=w[i];
X.Backtrack
(1);
delete[]X.x;
returnX.bestw;
intmain()
请输入集装箱数:
请输入第一艘轮船载重量:
c;
w=newint[n+1];
w[0]=0;
请输入重量:
w[i];
bestx=newint[n+1];
bestx[i]=0;
intm=MaxLoading(w,c,n,bestx);
最大装载数量:
m<
return0;
3.多机调度
iomanip>
typedefstructJob
intID;
inttime;
}Job;
typedefstructJobNode
JobNode*next;
}JobNode;
typedefstructHeader
ints;
}Header;
intSelectMin(Header*M,intm)
intk=0;
m;
if(M[i].s<
M[k].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<
right))
i++;
while((job[j].time<
(j>
left))
j--;
if(i<
=j)
itemp=job[j];
job[j]=job[i];
job[i]=itemp;
while(i<
=j);
if(left<
j)
QuickSort(job,left,j);
if(right>
i)
QuickSort(job,i,right);
voiddisplay(Header*M,intm)
JobNode*p;
for(inti=0;
\n第"
台机器上处理的工作序号;
if(M[i].next==0)
continue;
p=M[i].next;
do{
p->
ID<
'
'
p=p->
next;
}while(p!
=0);
voidoutSort(Job*job,intn)
\n按工作时间由大到小为:
\n时间:
\t"
setw(4)<
job[i].time;
\n序号:
job[i].ID;
voidsolve(Header*head,Job*job,intn,intm)
intk;
m&
JobNode*jobnode=newJobNode;
jobnode->
time=job[i].time;
ID=job[i].ID;
next=0;
head[i].s=jobnode->
time;
head[i].next=jobnode;
if(n<
=m)
head[i].s=0;
head[i].next=0;
if(n>
m)
k=SelectMin(head,m);
p=head[k].next;
head[k].s+=jobnode->
while(p->
next!
=0)
p->
next=jobnode;
intm,n;
\t\t《多机调度问题》\n"
请输入机器台数m:
Header*head=newHeader[m];
请输入作业个数n:
Job*job=newJob[n];
\n请按序号输入每个作业调度所需时间time:
job[i].ID=i;
QuickSort(job,0,n-1);
outSort(job,n);
solve(head,job,n,m);
display(head,m);
endl<
实验中遇到的问题及解决方法:
(包括本实验中遇到的问题、具体的解决方法、还没有解决的问题、实验收获等)
(要仔细写实验反思,这将有助于你不断进步!
)
实验心得:
通过活动安排问题,最优装载问题,多机调度的编写让我理解了贪心算法的概念和掌握贪心算法的基本要素以及理解了贪心算法的基本理论。
在编写代码时,我也遇到了很多问题,比如动态数组的构建数组数据的传递等等。
我通过翻书和查资料最后还是一一解决了。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 算法 设计 实验 报告 模板