- 1、本文档共16页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
算法设计及实验报告
实验报告1递归算法
一、实验目的
掌握递归算法的基本思想;
掌握该算法的时间复杂度分析;
二、实验环境
电脑一台,TurboC运行环境
三、实验内容、步骤和结果分析
以下是四个递归算法的应用例子:用C语言实现
1.阶乘:
main()
{inti,k;{inti,k;
k=factorial(i);
}
intfactorial(intn)
{ints;
if(n==0)s=1;
elses=n*factorial(n-1);//执行n-1次
returns;
}
阶乘的递归式很快,是个线性时间,因此在最坏情况下时间复杂度为O(n)。
2.Fibonacci数列:
main()
{inti,m;{inti,m;
m=fb(i);
}
intfb(intn)
{ints;
if(n=1)return1;
elses=fb(n-1)+fb(n-2);
returns;
}
Fibonacci数列则是T(n)=T(n-1)+T(n-2)+O(1)的操作,也就是T(n)=2T(n)+O(1),由
n
递归方程式可以知道他的时间复杂度T(n)是O(2),该数列的规律就是不停的赋
值,使用的内存空间也随着函数调用栈的增长而增长。
3.二分查找(分治法)
#includestdio.h
#defineconst8
main()
{inta[]={0,1,2,3,4,5,6,7,8,9};
intn=sizeof(a);
ints;
s=BinSearch(a,const,n);
}
BinSearch(inta[],intx,intn)
{intleft,right,middle=0;
left=0;right=n-1;
whlie(left=right)
{middle=(left+right)/2;
if(x==a[middle])returnmiddle;
if(xa[middle])left=middle+1;
elseright=middle-1;
}
return-1;
}
二分搜索算法利用了元素间的次序关系,采用分治策略,由上程序可知,每执行
一次while循环,数组大小减少一半,因此在最坏情况下,while循环被执行了
O(logn)次。而循环体内部只需运算O(1)的时间,因此该算法在最坏情况下
的时间复杂度为O(logn+1),即O(logn)。
4.合并排序(分治法)
MergeSort(intlow,inthigh,int*array)
{
intmiddle=(high+low)/2;//将数组划分为2分
if(lowhigh)
{
MergeSort(low,middle,array);//对前一部分进行递归处理
MergeSort(middle+1,high,array);//对后一部分进行递归处理
HeBing(low,middle,middle+1,high,array);//将排序后的,前后两部分,
进行合并
}
returntrue;
}
HeBing(intlow1,inthigh1,intlow2,inthigh2,int*array)
{
int*temp,
i=low1,
j=low2,
k=0;
temp=(int*)malloc((high2-low1+1)*sizeof(int));//temp用于临时存储
合并后的数组
while(i=high1j=high2)//对两个有序数组进行合并
{
if(array[i]array[j])
{
te
您可能关注的文档
- 计算机网络习题.pdf
- 英语教学计划表内容6篇.pdf
- 经方炙甘草汤.pdf
- 箱涵施工方案77841 .pdf
- 管理人员访谈提纲[共5篇].pdf
- 简单介绍科学家的事迹5篇.pdf
- 第八章 风机和鼓风机.pdf
- 第五代移动通信(19532).pdf
- 第三章基因的本质知识汇总山东省生物人教版必修二合格考.pdf
- 第三方物流习题集.pdf
- 一节应付职工薪酬基-础完结讲.pdf
- 多元方法nag mv fac得分g03ccc1目大物实验报告cl05.pdf
- 津汕项目部七段安全文明生产管理制度.pdf
- 讲稿介绍exam points整合版.pdf
- 2022年一二级建造师继续教育选修课后与考试答案版.pdf
- 初中英语_九年级英语Unit4教学设计学情分析教材分析课后反思.pdf
- 新课标要求下的信息技术与语文课程整合.pdf
- 2022-2023年临床医学期末复习-系统解剖学(本科临床定向专业)考试精选专练V(带答案)试卷号;.pdf
- 唐诗宋词三百首过关测试题题库与答案.pdf
- 書法經(613)书法人不得不知的草隶鼻祖和楷模《石门颂》.pdf
文档评论(0)