欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > PPT文档下载  

    算法引论及简单算法.ppt

    • 资源ID:6329389       资源大小:208.50KB        全文页数:37页
    • 资源格式: PPT        下载积分:15金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要15金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    算法引论及简单算法.ppt

    补充材料1 算法引论及简单算法,清华大学 自动化系刘连臣2010年11月1日,计算机语言与程序设计基础,1,注 意,算法是程序设计的灵魂,2,与数据结构的区别:考虑问题的角度:数据结构关心不同的数据结构在解题中的作用和效率;算法关心不同设计技术的适用性和效率。考虑问题的高度:数据结构关心的是解具体问题,算法不仅如此,它提供一种解决问题的通用方法。,与其他课程的关系,高级程序设计语言(C语言,等),数据结构,算法设计与分析,系统的设计与实现,3,主要内容,目标:了解算法分析的基本含义。掌握查找算法、排序算法、递推算法等算法理念。,提纲补1.1 算法分析补1.2 查找算法补1.3 排序算法补1.4 递推算法,4,补1.1 算法分析,前面的课程内容以C语言语法为主本补充章介绍一些基本算法大家在编写程序的时候,“八仙过海,各显神通”,解决同一个问题,可以使用各种方法。算法之间存在着“优劣”之分,5,补1.1 算法分析,1、算法分析的目的 通过对算法分析,在把算法变成程序实际运行前,就知道为完成一项任务所设计的算法的好坏,从而运行好算法,改进差算法,避免无益的人力和物力浪费。,6,补1.1 算法分析,2、算法分析的含义算法分析是一种分析技术,它以独立于具体的硬件平台、编译器和编程语言的方式,来描述算法的执行行为,即它关心的是算法,而不是程序。算法分析是一种测量算法的性能的方法,它不关心精确的细节,如在算法的某次运行中总共执行了多少条机器指令,而是想要一个大致的估计,即随着输入数据规模的增大,算法所需工作量以何种速度递增。(关心变化趋势),7,补1.1 算法分析,3、算法复杂性 时间复杂性和空间复杂性,8,补1.1 算法分析,1.有些计算机需要用户提供程序运行时间的上限,一旦达到这个上限,程序将被强制结束。2.正在开发的程序可能需要提供一个满意的实时响应。,为什么要考虑时间复杂性?,9,1.多用户系统中运行时,需指明分配给该程序的内存大小。2.可提前知道是否有足够可用的内存来运行该程序。3.一个问题可能有若干个内存需求各不相同的解决方案,从中择取。4.利用空间复杂性来估算一个程序所能解决问题的最大规模。,考虑程序的空间复杂性的理由:,补1.1 算法分析,10,4.如何进行算法分析?事前分析:就算法本身,通过对其执行性能的理论分析,得出关于算法特性时间和空间的一个特征函数()与计算机软硬件没有直接关系。事后测试:将算法编制成程序后放到计算机上运行,收集其执行时间和空间占用等统计资料,进行分析判断直接与物理实现有关。,补1.1 算法分析,11,1)事前分析目的:试图得出关于算法执行特性的一种形式描 述,以“理论上”衡量算法“好坏”。如何给出反映算法执行特性的描述?最直接方法:统计算法中各种运算的执行情况:运用了哪些运算 每种运算被执行的次数 该种运算执行一次所花费的时间 算法的执行时间=Fi*ti,补1.1 算法分析,12,估算执行时间的方法,选择一种或多种(如加、乘和比较等),然后确定这种(些)操作分别执行了多少次。令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 算法分析,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 算法分析,14,数量级语句的数量级:语句的执行频率。例:1,n,n2 算法的数量级:算法包含所有语句的执行频率之和。算法的数量级从本质上反映了一个算法的执行特性。例:求解同一问题的三个算法分别具有n,n2,n3数量级。若n=10,则可能的执行时间将分别是10,100,1000 个单位时间与环境因素无关。,补1.1 算法分析,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;,16,补1.1 算法分析,线性阶时间复杂度为O(n)算法运行时间随着问题的规模而成线性变化,for(i=0;in;i+)sum=sun+i;算法执行了多少次运算?,i=0;执行了1次in;执行了n+1次i+;执行了n次sum=sun+i;执行了n次共执行了3n+2次运算,时间复杂度就是O(3n+2)实际上,算法的时间复杂度并不精确计算基本操作的执行次数,它主要考虑问题规模的增长率。O(n),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),18,补1.1 算法分析,多项式阶时间复杂度为O(nd)d为固定常数算法运行时间随着问题的规模而成d次多项式阶变化对数阶 O(logn)指数阶 O(log2n)阶乘阶 O(n!),若T(n)=adnd+a1n+a0是一个d次多项 式,则有T(n)=O(nd),19,5、算法分类(计算时间),多项式时间算法:可用多项式(函数)对其计算时间限界的算法。常见的多项式限界函数有:(1)(logn)(n)(nlogn)(n2)(n3)指数时间算法:计算时间用指数函数限界的算法 常见的指数时间限界函数:(2n)(n!)(nn)说明:当n取值较大时,指数时间算法和多项式时间 算法在计算时间上非常悬殊。,补1.1 算法分析,20,计算时间的数量级对算法有效性的影响 数量级的大小对算法的有效性有决定性的影响。例:假设解决同一个问题的两个算法,它们都有n个输入,计算时间的数量级分别是n2和nlogn。则:n=1024:分别需要1048576和10240次运算。n=2048:分别需要4194304和22528次运算。分析:在n加倍的情况下,一个(n2)的算法计算时间增长4倍,而一个(nlogn)算法则只用两倍多一点的时间即可完成。,补1.1 算法分析,21,典型的计算时间函数曲线,结论:在顺序处理机上扩大所处理问题的规模,最有效的途径是降低算法计算复杂度的数量级,而不是(仅仅依靠)提高计算机的速度。,补1.1 算法分析,22,补1.2 查找算法,所谓查找(search),即根据给定的某个值,在一组数据(如一个数组)中,确定有没有出现相同值得数据元素。查找是非常实用的算法。如,查找字典。问题描述,令b表示被查找的数组,n表示数组元素的个数,x表示被查找的目标。问题是“数据x是否出现在数组b当中?”,23,补1.2 查找算法,1、顺序查找方法基本思路:从数组b的第一个元素开始,逐个地与x进行比较,一直到查找成功或者所有的数组元素都已经处理完毕。,参考程序:int search(int b,int n,int x)int k;for(k=0;(kn)算法的复杂度为O(n),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(xbmid)R=mid-1;else L=mid+1;return(-1);算法的复杂度为O(lnN),25,补1.3 排序算法,所谓排序(sort),就是将一个任意的数据元素的序列,重新排列成一个具有某种顺序的序列。排序是非常实用的算法。如,成绩排名等。问题描述,令a表示待排序的数组,n表示数组元素的个数,在排序之前,数组中元素是随机的,而在排序之后,这些数据按照一定的规律存放。,26,补1.3 排序算法,冒泡法基本思路:其原理为从a0开始,依次将其和后面的元素比较,若a0ai,则交换它们,一直比较到an。同理对a1,a2,.an-1处理,即完成排序。,void bubble(int*a,int n)/*定义两个参数:数组首地址与数组大小*/int i,j,temp;for(i=0;iaj)temp=ai;ai=aj;aj=temp;,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;iaj)k=j;/*是k总是指向最小元素*/if(i!=k)/*当k!=i是才交换,否则ai即为最小*/temp=ai;ai=ak;ak=temp;,28,补1.4 递推算法,递推(Recursive Algorithm),即从某个一直得初始条件出发,根据这个已知的事实,并按照一定规律推断出下一个事实。然后再从这个新的已知的事实出发,向下再推断一个事实。递推是计算机数值计算的一个重要方法,可以将复杂的运算简化为若干个重复的简单运算,从而发挥计算机长于重复处理的特点。其实质与差分方程类似,著名的例子为Fibonacci数列。,29,补1.4 递推算法,例:猴子吃桃有一只小猴子,有一天摘了一堆桃子,当天吃掉了一半,后来觉得不过瘾,就又多吃了一只。第二天,小猴子又将剩下的桃子吃掉了一半,并多吃了一个。以后每天都吃了前一天剩下的一半零一个。到了第十天的时候,发现只剩下一只桃子了。请问小猴子第一天一共摘了多少桃子?,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;i=1;i-)A=(A+1)*2 pintf(小猴子第一天共摘了%d 个桃子.n,A);,31,补1.4 递推算法,例:猴子分桃1979年李政道去中国科技大学访问,出了一道题目。5只猴子摘了一堆桃子,等第二天再来分。夜里一只猴子偷偷爬起来,吃掉了一只桃子,然后把剩下的桃子分成5份,取走了自己应得到的一份,然后回家了。过了会儿,第二只猴子也爬了起来,吃掉了一只桃子,然后把剩下的桃子分成5份,取走了自己应得到的一份。第三、四、五只猴子都是这样,吃掉了一只桃子后,正好把剩下的桃子每次都能分成5份。请问最初至少有多少个桃子?每只猴子夜里起床后看到多少只桃子?,32,补1.4 递推算法,解题思路定义peachi(1i 5)表示第i只猴子看到的桃子数。peach2=(peach1-1)*4/5peachi=(peachi-1-1)*4/5(2i 5)如果知道了peach1 或者 peach5中的任意一个,都可以递推出来每只猴子看到的桃子个数。可惜不知道啊。,33,补1.4 递推算法,解题思路但是我们知道:peach1%5=1;peach2%5=1,并且peach2=(peach1-1)*4/5peach3、peach4、peach5也如此可以用枚举法,让peach1=6,来试验是否满足上述条件。然后依次peach1累加5,直到满足上述所有要求。,34,14.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);,35,小结与要求,深入理解算法是程序设计的灵魂的含义。在编写程序解决实际问题之前,必须要有解决问题的思路与想法。对于该方法的基本要求是自己要清楚。不同的方法对应于不同的算法,要知道如何评价一个算法优劣。常用算法的一些基本思路要掌握:常用的查找算法、排序算法、枚举方法、递推方法要掌握,并会解决一些常见问题。,谢谢各位同学!,请提宝贵意见。,

    注意事项

    本文(算法引论及简单算法.ppt)为本站会员(小飞机)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开