算法设计与分析实验报告Word文档格式.docx
- 文档编号:13779374
- 上传时间:2022-10-13
- 格式:DOCX
- 页数:37
- 大小:116.31KB
算法设计与分析实验报告Word文档格式.docx
《算法设计与分析实验报告Word文档格式.docx》由会员分享,可在线阅读,更多相关《算法设计与分析实验报告Word文档格式.docx(37页珍藏版)》请在冰豆网上搜索。
2.5实验结果……………………………………………………………………18
实验三动态规划…………………………………………………………………20
3.1实验要求……………………………………………………………………20
3.2实验容……………………………………………………………………20
3.3核心算法……………………………………………………………………20
3.4程序代码……………………………………………………………………21
3.5实验结果……………………………………………………………………24
实验四深度优先搜索……………………………………………………………26
4.1实验要求……………………………………………………………………26
4.2实验容……………………………………………………………………26
4.3核心算法……………………………………………………………………26
4.4程序代码……………………………………………………………………27
4.5实验结果……………………………………………………………………28
实验五回溯法………………………………………………………………………30
5.1实验要求……………………………………………………………………30
5.2实验容……………………………………………………………………30
5.3核心算法……………………………………………………………………30
5.4程序代码……………………………………………………………………31
5.5实验结果……………………………………………………………………33
实验一分治法
一.实验要求
1.了解用分治法求解的问题:
当要求解一个输入规模为n,且n的取值相当大的问题时,
如果问题可以分成k个不同子集合,得到k个不同的可独立求解的子问题,其中1<
k≤n,而且子问题与原问题性质相同,原问题的解可由这些子问题的解合并得出。
那末,对于这类问题分治法是十分有效的。
2.掌握分治法的一般控制流程。
DanC(p,q)
globaln,A[1:
n];
integerm,p,q;
//1£
p£
q£
n
ifSmall(p,q)thenreturnG(p,q);
elsem=Divide(p,q);
//p£
m<
q
returnCombine(DanC(p,m),DanC(m+1,q));
endif
endDanC
3.实现典型的分治算法的编程与上机实验,验证算法的时间复杂性函数。
二.实验容
1.编程实现归并排序算法和快速排序算法,程序中加入比较次数的计数功能,输出排序结果和比较次数。
2.输入10组相同的数据,验证排序结果和完成排序的比较次数。
3.与复杂性函数所计算的比较次数比较。
4.用表格列出比较结果。
5.给出文字分析。
三.程序算法
1.归并排序算法
procedureMERGESORT(low,high)
//A(low;
high)是一个全程数组,它含
有high-low+1≥0个待排序的元素//
integerlow,high;
iflow<
high;
thenmid←,//求这个集合的分割点//
callMERGESORT(low,mid)//将一个子集合排序//
callMERGESORT(mid+1,high)//将另一个子集合排序
callMERGE(low,mid,high)//归并两个已排序的子集合//
endMERGESORT
归并两个已排序的集合
procedureMERGE(low,mid,high)
//A(low:
high)是一个全程数组//
//辅助数组B(low;
high)//
integerh,i,j,k;
h←low;
i←low;
j←mid+1;
whileh≤midandj≤highdo//当两个集合都没取尽时//
ifA(h)≤A(j)thenB(i)←A(h);
h←h+1
elseB(i)←A(j);
j←j+1
i←i+1
repeat
ifh>
midthen
fork←jtohighdo//处理剩余的元素//
B(i)←A(k);
i←i+1
elsefork←htomiddo
将已归并的集合复制到A
endMERGE
2.快速排序算法
QuickSort(p,q)
//将数组A[1:
n]中的元素
A[p],A[p+1],¼
A[q]按不降次序排列,
并假定A[n+1]是一个确定的、且大于
A[1:
n]中所有的数。
//
intp,q;
globaln,A[1:
ifp<
qthen
j=Partition(p,q+1);
//划分后j成为划分元素的位置
QuickSort(p,j-1);
QuickSort(j+1,q);
endQuickSort
procedurePARTITION(m,p)
//退出过程时,p带着划分元素所在的下标位置。
integerm,p,i;
globalA(m:
p-1)
v←A(m);
i←m//A(m)是划分元素//
loop
loopi←i+1untilA(i)≥vrepeat//i由左向右移//
loopp←p-1untilA(p)≤vrepeat//p由右向左移//
ifi<
p
thencallINTERCHANGE(A(i),A(p))//A(i)和A(p)换位//
elseexit
A(m)←A(p);
A(p)←v//划分元素在位置p//
EndPARTITION
四.程序代码
1.归并排序
#include<
iostream.h>
iomanip.h>
stdlib.h>
time.h>
#defineM11
typedefintKeyType;
typedefintElemType;
structrec{
KeyTypekey;
ElemTypedata;
};
typedefrecsqlist[M];
classguibing{
public:
guibing(sqlistb)
{
for(inti=0;
i<
M;
i++)
r[i]=b[i];
}
voidoutput(sqlistr,intn)
{
for(inti=0;
n;
cout<
<
setw(4)<
r[i].key;
cout<
endl;
}
voidxuanze(sqlistb,intm,intn)
inti,j,k;
for(i=m;
n-1;
{
k=i;
for(j=i;
j<
j++)
if(b[k].key>
b[j].key)k=j;
if(k!
=i)
{
rectemp=b[k];
b[k]=b[i];
b[i]=temp;
}
}
voidmerge(intl,intm,inth,sqlistr2)
xuanze(r,l,m);
xuanze(r,m,h);
output(r,M);
k=i=l;
for(j=m;
m&
&
h;
k++)
if(r[i].key<
=r[j].key)
{
r2[k]=r[i];
i++;
}
else
r2[k]=r[j];
j++;
output(r2,M);
while(j<
h)
r2[k]=r[j];
j++;
k++;
while(i<
=m)
r2[k]=r[i];
i++;
output(r2,M);
private:
sqlistr;
};
voidmain()
cout<
"
guibingfa1运行结果:
\n"
;
sqlista,b;
inti,j=0,k=M/2,n=M;
srand(time(0));
for(i=0;
a[i].key=rand()%80;
b[i].key=0;
guibinggx(a);
排序前数组:
gx.output(a,M);
数组排序过程演示:
gx.merge(j,k,n,b);
排序后数组:
gx.output(b,M);
cin.get();
2.快速排序
#defineMAXI10
typedefrecsqlist[MAXI];
classkuaisu
{
kuaisu(sqlista,intm):
n(m)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 算法 设计 分析 实验 报告