算法分析与设计》实验指导与报告书准确1.docx
- 文档编号:6525221
- 上传时间:2023-01-07
- 格式:DOCX
- 页数:14
- 大小:153.40KB
算法分析与设计》实验指导与报告书准确1.docx
《算法分析与设计》实验指导与报告书准确1.docx》由会员分享,可在线阅读,更多相关《算法分析与设计》实验指导与报告书准确1.docx(14页珍藏版)》请在冰豆网上搜索。
算法分析与设计》实验指导与报告书准确1
常熟理工学院
《算法分析与设计》实验指导与报告书
2011-2012学年第2学期
专业:
软件工程(服务外包)091
学号:
Y12309103
姓名:
吕晓瑜
实验地点:
N6-113
指导教师:
____________刘在德_________
计算机科学与工程学院
2011.02
实验目录
实验1求最大公约数2
实验2斐波那契数列3
实验3最近对问题4
实验4堆排序5
实验5霍纳法则和二进制幂6
实验6字符串匹配问题7
实验7Warshall算法和Floyd算法8
实验8最优二叉查找树9
实验9Huffman编码*10
实验10求解非线性方程*11
实验11投资问题*12
注:
(1)实验4和实验5为变治法应用,二选一;
(2)实验7和实验8为动态规划法应用,二选一;
(3)带*号的实验为选做实验,根据课时及学生实验完成情况机动安排。
实验1求最大公约数
实验目的
(1)求两个自然数m和n的GCD(GreatestCommonDivisor);
(2)掌握并应用算法的数学分析和后验分析方法;
(3)理解这样一个观点:
不同的算法能够解决相同的问题,但这些算法的思路不同,时间复杂性也不同。
预习内容
P21.1什么是算法
实验内容
(1)设计出3个版本的求最大公约数的算法;
(2)采用C/C++实现算法,利用计数法记录基本语句的执行次数;
(3)采用大O符号分析3种算法的时间复杂性;
(4)通过分析对比,得出结论。
实验结果(可续页)
欧几里得最大公约数算法:
#include
intmain()
{
inta,b,c;
printf("Pleaseinputtwointegers:
");
scanf("%d%d",&a,&b);
if(a
{
c=a;
a=b;
b=c;
}
while(a%b!
=0)
{
c=a%b;
a=b;
b=c;
}
printf("%d",b);
return0;
}
连续整数检测算法最大公约数算法:
#include
intmain()
{
inta,b,t;
printf("Pleaseinputtwointegers:
");
scanf("%d%d",&a,&b);
if(a
t=a;
else
t=b;
while(t>=1)
{
if((a%t==0)&&(b%t==0))
break;
t--;
}
printf("%d",t);
return0;
}
相减循环:
#include
intmain()
{
intm,n;
printf("Pleaseinputtwointegers:
");
scanf("%d%d",&m,&n);
while(m!
=n)
if(m>n)m=m-n;
elsen=n-m;
printf("%d",m);
return0;
}
教师评分
实验2斐波那契数列
实验目的
(1)求斐波那契数列;
(2)区分递归和递推思想。
预习内容
P602.5例题:
斐波那契数列
实验内容
(1)至少设计出3个版本的求斐波那契数列的算法;
(2)采用C/C++实现算法;
(3)采用大O符号分析3种算法的时间复杂性;
(4)通过分析对比,得出结论。
实验结果(可续页)
递归方法实现:
#include
intmain(void)
{
longlonginta=0,b=1,c;
inti,n;
printf("Howmanynumbersdoyouwant:
");
scanf("%d",&n);
for(i=1;i<=n;i++)
{
c=a+b;
printf("%d:
%Ld\n",i,c);
b=a;
a=c;
}
return0;
}
用迭代方法实现:
#include
intf(intn);
intmain()
{
intn;
scanf("%d",&n);
f(n);
}
intf(intn)
{
inti,f1=1,f2=1,f3;
if(n<=0)
{
printf("输入错误.\n");
}
elseif(n==1||n==2)
{
printf("1");
}
else
{
for(i=0;i { f3=f1+f2; f2=f1; f1=f3; } printf("%d\n",f1); } } 利用数组实现: #include #include #include voidmain() { inta[47]; inti,n; a[0]=0; a[1]=1; for(i=2;i<47;i++) a[i]=a[i-1]+a[i-2]; while(scanf("%d",&n)! =EOF) printf("%d\n",a[n]); } 教师评分 实验3最近对问题 实验目的 (1)设p1=(x1,y1),p2=(x2,y2),…,pn=(xn,yn)是平面上n个点构成的集合S,设计算法找出集合S中距离最近的点对; (2)进一步掌握递归算法的设计思想以及递归程序的调试技术; (3)理解此观点: 分治和递归经常同时应用在算法设计中。 预习内容 P1134.6.1最近对问题 实验内容 (1)用分治法求解最近对问题; (2)采用C/C++实现算法,利用计数法记录基本语句的执行次数; (3)分析算法的时间复杂性,并与蛮力法比较,得出结论。 实验结果(可续页) 分治法求最近对: 蛮力法求最近对: #include #include intmain() { intn,i,j,k=0; floata[5000],b[5000],c[5000],min; printf("请输入点的数目: "); scanf("%d",&n); printf("请输入点的坐标: "); for(i=0;i scanf("%f%f",&a[i],&b[i]); min=(a[0]-a[1])*(a[0]-a[1])+(b[0]-b[1])*(b[0]-b[1]); for(j=0;j for(i=j+1;i { c[k]=(a[j]-a[i])*(a[j]-a[i])+(b[j]-b[i])*(b[j]-b[i]); c[k]=sqrt(c[k]); if(c[k] {min=c[k];} k++; } min=(int)(min*100)+0.5; min=min/100; printf("%.2f\n",min); return0; } 教师评分 实验4堆排序 实验目的 (1)实现堆的创建和堆排序; (2)理解变治法的思想。 预习内容 P1696.4堆和堆排序 实验内容 (1)采用C/C++实现堆创建算法; (2)采用C/C++实现堆排序算法; (3)分析堆排序算法的时间复杂度,并与合并排序、快速排序比较,得出结论。 实验结果(可续页) 教师评分 实验5霍纳法则和二进制幂 实验目的 (1)实现计算多项式的霍纳法则; (2)实现从左至右和从右至左二进制幂算法; (3)理解变治法的思想。 预习内容 P1766.5霍纳法则和二进制幂 实验内容 (1)采用C/C++实现计算多项式的霍纳法则; (2)采用C/C++实现计算an的从左至右和从右至左二进制幂算法; (3)分析霍纳法则的时间复杂度,并与蛮力法比较,得出结论。 实验结果(可续页) 教师评分 实验6字符串匹配问题 实验目的 (1)给定一段文本,在该文本中查找并定位任意给定字符串; (2)深刻理解并掌握时空权衡的设计思想。 预习内容 P1947.2字符串匹配中的输入增强技术 实验内容 (1)采用C/C++实现BM算法的简化算法: Horspool算法; (2)利用计数法记录基本语句的执行次数; (3)分析Horspool算法的时间复杂度,并与蛮力法比较,得出结z论。 实验结果(可续an 教师评分 实验7Warshall算法和Floyd算法 实验目的 (1)实现计算有向图传递闭包的warshall算法; (2)利用Floyd算法计算图的完全最短路径; (3)深刻理解并掌握动态规划法的设计思想。 预习内容 P2168.2Warshall算法和Floyd算法 实验内容 (1)采用C/C++实现算法,利用计数法记录基本语句的执行次数; (2)采用大O符号分析2种算法的时间复杂性; (3)通过对2种算法的分析对比,找出的它们的相似处。 实验结果(可续页) 教师评分 实验8最优二叉查找树 实验目的 (1)实现最优二叉查找树的动态规划算法; (2)深刻理解并掌握动态规划法的设计思想。 预习内容 P2238.3最优二叉查找树 实验内容 (1)采用C/C++实现最优二叉查找树的动态规划算法; (2)根据实现的代码给出至少含5个键的最优二叉树的主表和根表,并根据根表画出最优二叉查找树; (3)分析算法的时间复杂度。 实验结果(可续页) 教师评分 实验9Huffman编码* 实验目的 (1)设需要编码的字符集为{d1,d2,…,dn},出现的概率为{w1,w2,…,wn},应用Huffman树构造最短的变长编码方案; (2)了解前缀编码的概念,理解数据压缩的基本方法; (3)掌握贪心法的设计思想并熟练运用。 预习内容 P2509.4哈夫曼树 实验内容 (1)设计贪心算法求解Huffman编码方案; (2)采用C/C++实现算法; (3)分析算法的时间复杂性。 实验结果(可续页) 教师评分 实验10求解非线性方程* 实验目的 (1)采用平分法、试位法和牛顿法求解非线性方程; (2)理解近似算法求解某些问题的思路。 预习内容 P34212.4解非线性方程的算法 实验内容 (1)采用C/C++实现求方程近似解的平分法、试位法和牛顿法; (2)分析三种算法的时间复杂度,比较三种算法的优缺点。 实验结果(可续页) 教师评分 实验11投资问题* 实验目的 (1)有n项可投资的项目,每个项目需要资金si,可获利润为vi,现有可用资金总数为M,为获得最大利润,应选择那些投资项目? (2)了解实际问题与理论的异同; (3)掌握实际问题的求解步骤。 预习内容 实验内容 (1)抽象出问题的模型; (2)设计出2种算法解决投资问题; (3)采用C/C++实现算法; (4)分析算法的时间复杂度。 实验结果(可续页) 教师评分
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 算法 分析 设计 实验 指导 报告书 准确
![提示](https://static.bdocx.com/images/bang_tan.gif)