《算法设计与分析》实验指导及报告书.docx
《《算法设计与分析》实验指导及报告书.docx》由会员分享,可在线阅读,更多相关《《算法设计与分析》实验指导及报告书.docx(8页珍藏版)》请在冰豆网上搜索。
《算法设计与分析》实验指导及报告书
常熟理工学院
《算法设计与分析》实验指导与报告书
______学年第____学期
专业:
___________________________________________
学号:
___________________________________________
姓名:
___________________________________________
实验地点:
___________________________________________
指导教师:
___________________________________________
计算机科学与工程学院
2013
实验目录
实验一求最大公约数3
实验二斐波那契数列7
实验三串匹配问题9
实验四堆的创建与堆排序11
实验五霍纳法则13
实验六Warshall算法和Floyed算法15
实验七动态规划方法解背包问题17
实验八解非线性方程的算法19
实验一求最大公约数
实验目的与任务
⑴复习数据结构课程的相关知识,实现课程间的平滑过渡;
⑵掌握并应用算法的数学分析和后验分析方法;
⑶理解这样一个观点:
不同的算法能够解决相同的问题,这些算法的解题思路不同,复杂程度不同,解题效率也不同。
预习内容:
第一章绪论1.1算法的概念
实验内容及要求
⑴至少设计出三个版本的求最大公约数算法;
⑵对所设计的算法采用大O符号进行时间复杂性分析;
⑶上机实现算法,并用计数法和计时法分别测算算法的运行时间;
备注:
说明:
为了度量算法的运行时间,可以借助于clock()函数或者time()函数完成
它们的使用方法参见如下实例:
/*clock版本*/
#include
#include
#include
intmain(void)
{
doublet1,t2;
inti,j;
doublek;
t1=clock();
/*在下方添加待测试运行时间的代码;*/
for(i=0;i<10000;i++)
for(j=0;j<10000;j++)
k=0.123*j+3.567*i;
t2=clock();
printf("Ittakes%lf\n",(t2-t1)/CLK_TCK);
/*其中CLK_TCK是时钟周期,是一个常量,
clock()函数计算出来的是硬件滴答的数目,不是毫秒。
在TC2.0中硬件每18.2个滴答是一秒,*/
return0;
}
/*time版本*/
#include
#include
#include
intmain(void)
{
time_tstart,end;
inti,j;
doublek;
start=time(NULL);
/*在下方添加待测试运行时间的代码;*/
for(i=0;i<10000;i++)
for(j=0;j<10000;j++)
k=0.123*j+3.567*i;
end=time(NULL);
printf("Thetimewas:
%f\n",difftime(end,start));
return0;
}
⑷通过分析对比,得出自己的结论。
提示:
下列程序可实现求出n的质因数的个数number.并可求出n的质因数。
for(i=2;i<=n;i++)
{
while(n>=i)
{
if(n%i==0)
{
number++;
n=n/i;
}
elsebreak;
}
}/*计算n有多少个质因数*/
实验结果(可续页)
教师评分
实验二斐波那契数列
实验目的与任务
⑴深入理解斐波那契数列;
(2)理解递归的思想;
预习内容
斐波那契数列;
实验内容及要求
⑴上机实现斐波那契数列的四种算法,并用计时法测算四种算法的运行时间;
⑵对所设计的算法采用大O符号进行时间复杂性分析;
⑶通过对四种算法分析对比,得出自己的结论
实验结果(可续页)
教师评分
实验三串匹配问题
实验目的与任务
⑴深刻理解并掌握蛮力法的设计思想;
(2)理解这样一个观点:
用蛮力法设计的算法,一般来说,经过适度的努力后,都可以对算法的第一个版本进行一定程度的改良,改进其时间性能。
(了解空间换时间权衡的思想)
预习内容
BruteForce算法,Horspool算法.(P1977.2串匹配中的输入增强技术)
实验内容及要求
⑴实现BruteForce算法;⑵实现BM算法的简化算法:
Horspool算法;⑶对上个算法进行时间复杂性分析,并设计实验程序验证分析结果。
实验结果(可续页)
教师评分
实验四堆的创建与堆排序
实验目的与任务
1、深刻理解变换(变治法)的思想。
预习内容
堆的定义。
堆创建的算法与堆排序算法。
实验内容及要求
1、代码实现堆的创建。
2、代码实现堆排序算法。
3、分析堆排序算法的时间复杂度并与合并排序,快速排序算法进行比较,最后得出自己的结论。
实验结果(可续页)
教师评分
实验五霍纳法则
实验目的与任务
(1)深刻理解变治法的思想。
预习内容
霍纳法则,二进制幂
实验内容及要求
(1)代码实现霍纳法则算法。
并实现求任给一个多项式除以(x-c)的商和余数。
(2)代码实现计算
的从左至右二进制幂算法。
(3)分析霍纳法则与蛮力计算多项式的算法时间复杂度,并进行比较。
实验结果(可续页)
教师评分
实验六Warshall算法和Floyed算法
实验目的与任务
⑴利用warshall算法计算有向图传递闭包和利用Floyed算法计算全部最短路径。
(2)深刻理解并掌握动态规划法的设计思想;
预习内容
warshall算法与Floyed算法
实验内容及要求
⑴上机实现算法,并用计数法和计时法分别测算算法的运行时间;
⑵对所设计的算法采用大O符号进行时间复杂性分析;
⑶通过对warshall算法与Floyed算法分析对比,找出的他们的相似处。
实验结果(可续页)
教师评分
实验七动态规划方法解背包问题
实验目的与任务
1、深刻理解动态规划法的思想。
预习内容
动态规划的方法求解背包问题。
实验内容及要求
(1)代码实现动态规划算法求背包问题的算法。
(2)根据实现的代码给填写动态规划表,并根据根表回溯求出最优解。
(3)分析此算法的时间复杂度。
实验结果(可续页)
教师评分
实验八解非线性方程的算法
实验目的与任务
理解NP困难问题,了解其中一些问题的近似算法
预习内容
解非线性方程的算法平分法,试位法,牛顿法
实验内容及要求
(1)代码实现平分法求方程近似解的算法
(2)代码实现试位法,牛顿法求方程近似解的算法
(3)分析三种算法的时间复杂度,比较三种算法的优缺点。
实验结果(可续页)
教师评分