算法分析与设计》实验指导与报告书准确1Word下载.docx

上传人:b****6 文档编号:19538980 上传时间:2023-01-07 格式:DOCX 页数:14 大小:153.40KB
下载 相关 举报
算法分析与设计》实验指导与报告书准确1Word下载.docx_第1页
第1页 / 共14页
算法分析与设计》实验指导与报告书准确1Word下载.docx_第2页
第2页 / 共14页
算法分析与设计》实验指导与报告书准确1Word下载.docx_第3页
第3页 / 共14页
算法分析与设计》实验指导与报告书准确1Word下载.docx_第4页
第4页 / 共14页
算法分析与设计》实验指导与报告书准确1Word下载.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

算法分析与设计》实验指导与报告书准确1Word下载.docx

《算法分析与设计》实验指导与报告书准确1Word下载.docx》由会员分享,可在线阅读,更多相关《算法分析与设计》实验指导与报告书准确1Word下载.docx(14页珍藏版)》请在冰豆网上搜索。

算法分析与设计》实验指导与报告书准确1Word下载.docx

实验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<

stdio.h>

intmain()

{

inta,b,c;

printf("

Pleaseinputtwointegers:

"

);

scanf("

%d%d"

&

a,&

b);

if(a<

b)

{

c=a;

a=b;

b=c;

}

while(a%b!

=0)

c=a%b;

%d"

b);

return0;

}

连续整数检测算法最大公约数算法:

inta,b,t;

&

a,&

t=a;

else

t=b;

while(t>

=1)

if((a%t==0)&

&

(b%t==0))

break;

t--;

t);

相减循环:

#include<

intm,n;

%d%d"

m,&

n);

while(m!

=n)

if(m>

n)m=m-n;

elsen=n-m;

m);

教师评分

实验2斐波那契数列

(1)求斐波那契数列;

(2)区分递归和递推思想。

P602.5例题:

斐波那契数列

(1)至少设计出3个版本的求斐波那契数列的算法;

(2)采用C/C++实现算法;

递归方法实现:

intmain(void)

longlonginta=0,b=1,c;

inti,n;

Howmanynumbersdoyouwant:

for(i=1;

i<

=n;

i++)

c=a+b;

printf("

%d:

%Ld\n"

i,c);

b=a;

a=c;

用迭代方法实现:

intf(intn);

intn;

f(n);

intf(intn)

inti,f1=1,f2=1,f3;

if(n<

=0)

输入错误.\n"

elseif(n==1||n==2)

1"

for(i=0;

n-2;

f3=f1+f2;

f2=f1;

f1=f3;

%d\n"

f1);

利用数组实现:

stdlib.h>

math.h>

voidmain()

inta[47];

a[0]=0;

a[1]=1;

for(i=2;

47;

a[i]=a[i-1]+a[i-2];

while(scanf("

n)!

=EOF)

a[n]);

实验3最近对问题

(1)设p1=(x1,y1),p2=(x2,y2),…,pn=(xn,yn)是平面上n个点构成的集合S,设计算法找出集合S中距离最近的点对;

(2)进一步掌握递归算法的设计思想以及递归程序的调试技术;

(3)理解此观点:

分治和递归经常同时应用在算法设计中。

P1134.6.1最近对问题

(1)用分治法求解最近对问题;

(3)分析算法的时间复杂性,并与蛮力法比较,得出结论。

分治法求最近对:

蛮力法求最近对:

intn,i,j,k=0;

floata[5000],b[5000],c[5000],min;

请输入点的数目:

"

请输入点的坐标:

n;

%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<

n-1;

j++)

for(i=j+1;

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)

{min=c[k];

k++;

min=(int)(min*100)+0.5;

min=min/100;

%.2f\n"

min);

实验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编码方案;

(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)分析算法的时间复杂度。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 小学教育

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1