算法引论及简单算法.pptx

上传人:莉*** 文档编号:74015738 上传时间:2023-02-24 格式:PPTX 页数:37 大小:244.65KB
返回 下载 相关 举报
算法引论及简单算法.pptx_第1页
第1页 / 共37页
算法引论及简单算法.pptx_第2页
第2页 / 共37页
点击查看更多>>
资源描述

《算法引论及简单算法.pptx》由会员分享,可在线阅读,更多相关《算法引论及简单算法.pptx(37页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、1注 意第1页/共37页2与数据结构的区别:与数据结构的区别:考虑问题的考虑问题的角度角度:数据结构关心不同的数据结构在解题中的作用和效率;算法关:数据结构关心不同的数据结构在解题中的作用和效率;算法关心不同设计技术的适用性和效率。心不同设计技术的适用性和效率。考虑问题的考虑问题的高度高度:数据结构关心的是解具体问题,算法不仅如此,它提供一种解:数据结构关心的是解具体问题,算法不仅如此,它提供一种解决问题的通用方法。决问题的通用方法。与其他课程的关系高级程序设计语言(C语言,等)数据结构 算法设计与分析 系统的设计与实现 第2页/共37页3主要内容目标:了解算法分析的了解算法分析的基本含义基本

2、含义。掌握。掌握查找算法查找算法、排序算法排序算法、递推算法递推算法等算法理念。等算法理念。提纲补补1.1 1.1 算法分析算法分析补补1.2 1.2 查找算法查找算法补补1.3 1.3 排序算法排序算法补补1.4 1.4 递推算法递推算法第3页/共37页4补1.1 算法分析o前面的课程内容以C语言语法为主o本补充章介绍一些基本算法o大家在编写程序的时候,“八仙过海,八仙过海,各显神通各显神通”,解决同一个问题,可以使用各种方法。o算法之间存在着“优劣”之分第4页/共37页5补1.1 算法分析1、算法分析的目的 通过对算法分析,在把算法变成程序实际运行前,就知道为完成一项任务所设计的算法的好坏

3、,从而运行好算法,改进差算法,避免无益的人力和物力浪费。第5页/共37页6补1.1 算法分析2、算法分析的含义算法分析是一种分析技术,它以独立于具体的硬件平台、编译器和编程语言的方式,来描述算法的执行行为,即它关心的是算法,而不是程序。算法分析是一种测量算法的性能的方法,它不关心精确的细节,如在算法的某次运行中总共执行了多少条机器指令,而是想要一个大致的估计,即随着输入数据规模的增大,算法所需工作量以何种速度递增。(关心变化趋势)第6页/共37页7补1.1 算法分析3、算法复杂性 时间复杂性和空间复杂性第7页/共37页8补1.1 算法分析1.有些计算机需要用户提供程序运行时间的上限,一旦达到这

4、个上限,程序将被强制结束。2.正在开发的程序可能需要提供一个满意的实时响应。为什么要考虑时间复杂性?第8页/共37页91.1.多用户系统中运行时,需指明分配给该程序的内存大小。2.2.可提前知道是否有足够可用的内存来运行该程序。3.3.一个问题可能有若干个内存需求各不相同的解决方案,从中择取。4.4.利用空间复杂性来估算一个程序所能解决问题的最大规模。考虑程序的空间复杂性的理由:补1.1 算法分析第9页/共37页104.如何进行算法分析?事前分析:就算法本身,通过对其执行性能的理论分析,得出关于算法特性时间和空间的一个特征函数()与计算机软硬件没有直接关系。事后测试:将算法编制成程序后放到计算

5、机上运行,收集其执行时间和空间占用等统计资料,进行分析判断直接与物理实现有关。补1.1 算法分析第10页/共37页111)事前分析目的:试图得出关于算法执行特性的一种形式描 述,以“理论上”衡量算法“好坏”。如何给出反映算法执行特性的描述?最直接方法:统计算法中各种运算的执行情况:运用了哪些运算 每种运算被执行的次数 该种运算执行一次所花费的时间 算法的执行时间=Fi*ti补1.1 算法分析第11页/共37页12估算执行时间的方法估算执行时间的方法 选择一种或多种(如加、乘和比较等),然后确定这种(些)选择一种或多种(如加、乘和比较等),然后确定这种(些)操作分别执行了多少次。操作分别执行了多

6、少次。令令n代表程序实例特征,则执行时间计算公式为:代表程序实例特征,则执行时间计算公式为:TP(n)=c1ADD(n)+c2SUB(n)+c3MUL(n)+c4DIV(n)+c1、c2、c3、c4分别表示一次加、减、乘、除操作所需的时间。函数ADD(n)、SUB(n)、MUL(n)、DIV(n)分别表示程序P中,所使用的加、减、乘、除操作的次数。这种方法是否成功取决这种方法是否成功取决于识别关键操作的能力,于识别关键操作的能力,这些关键操作对时间复这些关键操作对时间复杂性的影响最大。杂性的影响最大。一条语句在整个程序运行时实际执行时间=频率计数*每执行一次该语句所需的时间补1.1 算法分析第

7、12页/共37页13频率计数:算法中语句或运算的执行次数。例:x=x+y for(i=1;i=n;i+)for(i=1;i=n;i+)x=x+y;for(j=1;j=n;j+)x=x+y;(a)(b)(c)分析:(a):x=x+y执行了1次 (b):x=x+y执行了n次 (c):x=x+y执行了n2次 注:在事前分析中,只限于确定与所使用机器及其他环境因素无关的频率计数,依此建立一种理论上分析模型。补1.1 算法分析第13页/共37页14数量级语句的数量级:语句的执行频率。例:1,n,n2 算法的数量级:算法包含所有语句的执行频率之和。算法的数量级从本质上反映了一个算法的执行特性。例:求解同一

8、问题的三个算法分别具有n,n2,n3数量级。若n=10,则可能的执行时间将分别是10,100,1000 个单位时间与环境因素无关。补1.1 算法分析第14页/共37页15补1.1 算法分析5、算法复杂性的等级常量阶时间复杂度为O(1)算法运行时间不随着问题的规模而变化如:简单的赋值语句,x=y;算术运算,x=y*5+z%3;固定次数的循环语句等for(i=0;i10;i+)for(j=0;j20;j+)aij=0;第15页/共37页16补1.1 算法分析线性阶时间复杂度为O(n)算法运行时间随着问题的规模而成线性变化for(i=0;in;i+)sum=sun+i;算法执行了多少次运算?i=0;

9、执行了1次in;执行了n+1次i+;执行了n次sum=sun+i;执行了n次共执行了3n+2次运算时间复杂度就是O(3n+2)实际上,算法的时间复杂度并不精确计算基本操作的执行次数,它主要考虑问题规模的增长率。O(n)第16页/共37页17补1.1 算法分析平方阶时间复杂度为O(n2)算法运行时间随着问题的规模而成平方变化for(i=0;in;i+)for(j=0;jn;j+)sum=sun+aij;/执行n2次printf(“%dn”,sum);/执行n次时间复杂度就是O(n2)第17页/共37页18补1.1 算法分析多项式阶时间复杂度为O(nd)d为固定常数算法运行时间随着问题的规模而成d

10、次多项式阶变化对数阶 O(logn)指数阶 O(log2n)阶乘阶 O(n!)若T(n)=adnd+a1n+a0是一个d次多项 式,则有T(n)=O(nd)第18页/共37页195、算法分类(计算时间)多项式时间算法:可用多项式(函数)对其计算时间限界的算法。常见的多项式限界函数有:(1)(1)(logn)(logn)(n)(n)(nlogn)(nlogn)(n(n2 2)(n(n3 3)指数时间算法:计算时间用指数函数限界的算法 常见的指数时间限界函数:(2(2n n)(n(n!)(n(nn n)说明:当n n取值较大时,指数时间算法和多项式时间 算法在计算时间上非常悬殊。补1.1 算法分析

11、第19页/共37页20 计算时间的数量级对算法有效性的影响 数量级的大小对算法的有效性有决定性的影响。例:假设解决同一个问题的两个算法,它们都有n个输入,计算时间的数量级分别是n2和nlogn。则:n=1024:分别需要1048576和10240次运算。n=2048:分别需要4194304和22528次运算。分析:在n加倍的情况下,一个(n(n2 2)的算法计算时间增长4 4倍,而一个(nlogn)(nlogn)算法则只用两倍多一点的时间即可完成。补1.1 算法分析第20页/共37页21典型的计算时间函数曲线结论:结论:在顺序处在顺序处理机上扩大所处理机上扩大所处理问题的规模,理问题的规模,最

12、有效的途径是最有效的途径是降低算法计算复降低算法计算复杂度的数量级,杂度的数量级,而不是(仅仅依而不是(仅仅依靠)提高计算机靠)提高计算机的速度。的速度。补1.1 算法分析第21页/共37页22补1.2 查找算法所谓查找(search),即根据给定的某个值,在一组数据(如一个数组)中,确定有没有出现相同值得数据元素。查找是非常实用的算法。如,查找字典。问题描述,令b表示被查找的数组,n表示数组元素的个数,x表示被查找的目标。问题是“数据x是否出现在数组b当中?”第22页/共37页23补1.2 查找算法1、顺序查找方法基本思路:从数组b的第一个元素开始,逐个地与x进行比较,一直到查找成功或者所有

13、的数组元素都已经处理完毕。参考程序:int search(int b,int n,int x)int k;for(k=0;(kn)&(bk!=x);k+)if(kn)return(k);else return(-1);算法的复杂度为O(n)第23页/共37页24补1.2 查找算法2、折半查找方法(对于有序数组)参考程序:int search(int b,int n,int x)int L,R,mid;L=0;R=n-1;while(L=R)mid=(L+R)/2;if(x=bmid)return(mid);else if(xai,则交换它们,一直比较到an。同理对a1,a2,.an-1处理,即

14、完成排序。void bubble(int*a,int n)/*定义两个参数:数组首地址与数组大小*/int i,j,temp;for(i=0;in-1;i+)for(j=i+1;jaj)temp=ai;ai=aj;aj=temp;第26页/共37页27补1.3 排序算法选择法 基本思路:选择法循环过程与冒泡法一致,它还定义了记号k=i,然后依次把ak同后面元素比较,若akaj,则使k=j.最后看看k=i是否还成立,不成立则交换ak,ai,这样就比冒泡法省下许多无用的交换,提高了效率。void choise(int*a,int n)int i,j,k,temp;for(i=0;in-1;i+)k

15、=i;/*给记号赋值*/for(j=i+1;jaj)k=j;/*是k总是指向最小元素*/if(i!=k)/*当k!=i是才交换,否则ai即为最小*/temp=ai;ai=ak;ak=temp;第27页/共37页28补1.4 递推算法递推(Recursive Algorithm),即从某个一直得初始条件出发,根据这个已知的事实,并按照一定规律推断出下一个事实。然后再从这个新的已知的事实出发,向下再推断一个事实。递推是计算机数值计算的一个重要方法,可以将复杂的运算简化为若干个重复的简单运算,从而发挥计算机长于重复处理的特点。其实质与差分方程类似,著名的例子为Fibonacci数列。第28页/共37

16、页29补1.4 递推算法例:猴子吃桃有一只小猴子,有一天摘了一堆桃子,当天吃掉了一半,后来觉得不过瘾,就又多吃了一只。第二天,小猴子又将剩下的桃子吃掉了一半,并多吃了一个。以后每天都吃了前一天剩下的一半零一个。到了第十天的时候,发现只剩下一只桃子了。请问小猴子第一天一共摘了多少桃子?第29页/共37页30补1.4 递推算法解题思路T10=T9-T9/2-1 即 T9=(T10+1)*2T8=(T9+1)*2T7=(T8+1)*2 T1=(T2+1)*2定义A为桃子的个数,第10天为1个,第9天为4个,第8天为10个。#include void main()int A,i;A=1;for(i=9

17、;i=1;i-)A=(A+1)*2 pintf(小猴子第一天共摘了%d 个桃子.n,A);第30页/共37页31补1.4 递推算法例:猴子分桃1979年李政道去中国科技大学访问,出了一道题目。5只猴子摘了一堆桃子,等第二天再来分。夜里一只猴子偷偷爬起来,吃掉了一只桃子,然后把剩下的桃子分成5份,取走了自己应得到的一份,然后回家了。过了会儿,第二只猴子也爬了起来,吃掉了一只桃子,然后把剩下的桃子分成5份,取走了自己应得到的一份。第三、四、五只猴子都是这样,吃掉了一只桃子后,正好把剩下的桃子每次都能分成5份。请问最初至少有多少个桃子?每只猴子夜里起床后看到多少只桃子?第31页/共37页32补1.4

18、 递推算法解题思路定义peachi(1i 5)表示第i只猴子看到的桃子数。peach2=(peach1-1)*4/5peachi=(peachi-1-1)*4/5(2i 5)如果知道了peach1 或者 peach5中的任意一个,都可以递推出来每只猴子看到的桃子个数。可惜不知道啊。第32页/共37页33补1.4 递推算法解题思路但是我们知道:peach1%5=1;peach2%5=1,并且peach2=(peach1-1)*4/5peach3、peach4、peach5也如此可以用枚举法,让peach1=6,来试验是否满足上述条件。然后依次peach1累加5,直到满足上述所有要求。第33页/共

19、37页3414.4 递推算法#include void main()int i,peach6=0;/peach0不使用,为了计算方便 peach1=6;while(1)for(i=2;i=5;i+)peachi=(peachi-1-1)*4/5;if(peachi%5!=1)break;if(i=5)peach1+=5;else break;printf(最初至少有%d个桃子n,peach1);for(i=1;i=5;i+)printf(第%d 只小猴子夜里看到了%d 只桃子。n,i,peachi);第34页/共37页35小结与要求1.1.1.1.深入理解深入理解算法是程序设计的灵魂算法是程序

20、设计的灵魂的含义。的含义。2.2.2.2.在在编编写写程程序序解解决决实实际际问问题题之之前前,必必须须要要有有解解决决问问题题的的思思路路与与想想法法。对对于于该该方方法法的的基基本本要要求求是是自自己己要清楚要清楚。3.3.3.3.不不同同的的方方法法对对应应于于不不同同的的算算法法,要要知知道道如如何何评评价价一个算法优劣一个算法优劣。4.4.4.4.常常用用算算法法的的一一些些基基本本思思路路要要掌掌握握:常常用用的的查查找找算算法法、排排序序算算法法、枚枚举举方方法法、递递推推方方法法要要掌掌握握,并并会解决一些常见问题。会解决一些常见问题。第35页/共37页谢谢各位同学!请提宝贵意见。第36页/共37页37感谢您的观看!第37页/共37页

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 应用文书 > PPT文档

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com