算法概念介绍及举例说明课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《算法概念介绍及举例说明课件.ppt》由用户(三亚风情)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 算法 概念 介绍 举例说明 课件
- 资源描述:
-
1、例子例子:给定两个正整数给定两个正整数m m和和n,n,求它们的最大公因子求它们的最大公因子算法算法:欧几里德算法欧几里德算法输入输入:正整数正整数m m、n n输出:输出:m m和和n n的最大公因子的最大公因子第一章第一章 算法引论算法引论1.1 1.1 算法的基本概念算法的基本概念一、什么是算法及其与程序的区别一、什么是算法及其与程序的区别S1:S1:保证保证m=n,m=n,如果如果mnmn,则,则m m、n n的值互换,否则转的值互换,否则转S2.S2.S2:S2:求余数。令求余数。令r=m mod n,r=m mod n,(0=rn)0=rn)S3:S3:判断余数判断余数r r是否为
2、是否为0 0。如果。如果r r是是0 0,则算法终止,则算法终止,n n为为答案,否则转答案,否则转S4.S4.S4:S4:置换。即置换。即m mn,nn,nr,r,转转S2.S2.什么是算法?什么是算法?它是一组它是一组有穷规则有穷规则的集合,它规定了解决某一特定类的集合,它规定了解决某一特定类型问题的一系列运算。型问题的一系列运算。二、算法的特征二、算法的特征 1 1、确定性、确定性 2 2、能行性、能行性 3 3、输入、输入 4 4、输出、输出 5 5、有穷性、有穷性:一个算法总是在有限步之后结束,且每一步一个算法总是在有限步之后结束,且每一步都可在有穷时间内完成都可在有穷时间内完成.算
3、法与程序的区别:算法与程序的区别:程序:与某种语言有关,能直接在机器上运行。程序:与某种语言有关,能直接在机器上运行。算法:与特定的语言无关,可用任何语言实现算法:与特定的语言无关,可用任何语言实现 ,甚至,甚至可以用自然语言实现,但是一般为了避免二义性,本书可以用自然语言实现,但是一般为了避免二义性,本书采用类采用类C C语言描述。语言描述。有穷性与有效性的关系有穷性与有效性的关系:三、评价算法的标准三、评价算法的标准 有穷性是对算法的基本要求,如果一个算法要能使用,有穷性是对算法的基本要求,如果一个算法要能使用,必须具有有效性。有效性是指算法在必须具有有效性。有效性是指算法在规定的规定的时
4、间里终止。时间里终止。时间复杂性和空间复杂性时间复杂性和空间复杂性1.2 1.2 算法设计的步骤算法设计的步骤一、问题的描述一、问题的描述例例:货郎担问题货郎担问题 设售货员在一天内要到设售货员在一天内要到5 5个城市去推销货物,已知从一个城市去推销货物,已知从一个城市到其他城市的费用,求总费用最少的路线。给出个城市到其他城市的费用,求总费用最少的路线。给出的信息主要有五个城市的关系图及相应的费用矩阵。的信息主要有五个城市的关系图及相应的费用矩阵。二、模型的拟制二、模型的拟制 建模阶段至少要考虑以下两个基本问题:建模阶段至少要考虑以下两个基本问题:1 1)最适合于这个问题的数学结构是什么?)最
5、适合于这个问题的数学结构是什么?2 2)有没有已经解决了的类似问题可供借鉴?)有没有已经解决了的类似问题可供借鉴?在模型建立好了以后,应该依据所选定的模型对在模型建立好了以后,应该依据所选定的模型对问题重新陈述问题重新陈述,并考虑下列问题并考虑下列问题:(1)(1)模型是否清楚地表达了与问题有关的所有重要模型是否清楚地表达了与问题有关的所有重要的信息的信息?(2)(2)模型中是否存在与要求的结果相关的数学量模型中是否存在与要求的结果相关的数学量?(3)(3)模型是否正确反映了输入、输出的关系模型是否正确反映了输入、输出的关系?(4)(4)对这个模型处理起来困难吗?对这个模型处理起来困难吗?32
6、353147214234415721152434724335211 对于货郎担问题,其数学模型是带权图,与此图相关的对于货郎担问题,其数学模型是带权图,与此图相关的是费用矩阵。是费用矩阵。以货郎担问题为例:采用枚举法。以货郎担问题为例:采用枚举法。分析:分析:三、算法的详细设计三、算法的详细设计 算法的详细设计是指设计求解某个具体问题的算法的详细设计是指设计求解某个具体问题的一系列步骤,并且这些步骤可以通过计算机的各种一系列步骤,并且这些步骤可以通过计算机的各种操作来实现。操作来实现。输入:城市数目输入:城市数目n;n;费用矩阵费用矩阵C=(cC=(cijij)n n*n n输出:旅行路线输出
7、:旅行路线TOUR;TOUR;最小费用最小费用MINMINSalesman(n)i 1;tour0;min while i=(n-1)!do pPHRMUTI(n-1,i);/PHRMUTI(n-1,i)是生成是生成1到到n-1的第的第i个排列的子过程个排列的子过程 cost(T(p)EFP(c,T(p);/EFP(c,T)是由费用矩阵是由费用矩阵c及路线及路线T(p)所算得的总费用所算得的总费用 if cost(T(p)=nn=n0 0时,利用时,利用A(n)A(n)的定义和的定义和 一个简单的一个简单的不等式,有不等式,有取取c=|ac=|am m|+|+.+|a.+|a0 0|定理得证定
8、理得证.事实上,只要将事实上,只要将n n0 0取得足够大,可以证明只要取得足够大,可以证明只要c c是比是比|a|am m|大大的任意一个常数,此定理都成立。的任意一个常数,此定理都成立。10100|()|(|/|/)(|)mmmmmmmmA nananaaanannaan定理定理1.1 1.1 若若A(n)=aA(n)=am mn nm m+a+a1 1n+an+a0 0是一个是一个m m次多项式,则次多项式,则A(n)=O(nA(n)=O(nm m)。此定理表明,此定理表明,变量变量n n的固定阶数为的固定阶数为m m的任一多项式,的任一多项式,与此多项式的最高阶与此多项式的最高阶n n
9、m同阶,同阶,因此计算时间为因此计算时间为m m阶的多项阶的多项式的算法,其时间都可用式的算法,其时间都可用O(nO(nm).).例如,若一个算法有数例如,若一个算法有数量级为量级为c c1 1n nm1m1,c,c2 2n nm2m2,c ck kn nmkmk 的的k k个语句,则此算法的数个语句,则此算法的数量级就是量级就是 c c1 1n nm1m1+c+c2 2n nm2m2+c+ck kn nmkmk 由定理由定理1.11.1,它等于,它等于O(nO(nm m),),其中其中m=maxmm=maxmi i|1|1i k n2nlognn=1024104857610240时间(n=1
10、024)1.05s0.01sn=2048419430422528时间(n=2048)4.2s0.02s例子:假设有解决同一个问题的两个算法,它们有例子:假设有解决同一个问题的两个算法,它们有n n个输个输 入,分别要求入,分别要求n n2 2和和nlognnlogn次运算次运算。定义定义1.3 1.3 如果存在两个正常数如果存在两个正常数c c和和n n0 0,对于所有对于所有n nn n0 0,有有|f(n)|c|g(n)|f(n)|c|g(n)|则记为则记为f(n)=(g(n)f(n)=(g(n)。定义定义1.4 1.4 如果存在两个正常数如果存在两个正常数c1,c2,c1,c2,和和n
11、n0 0,对于所有的对于所有的n n n n0 0,有有 则记为则记为f(n)=(g(n)f(n)=(g(n)。12()|()|()|cg nfncg n五、算法分类(按时间)五、算法分类(按时间)多项式时间算法:凡可用多项式时间算法:凡可用多项式多项式来对其计算时间界限的算法。来对其计算时间界限的算法。指数时间算法:计算时间用指数时间算法:计算时间用指数函数指数函数界限的算法。界限的算法。以下六种计算时间的多项式时间算法是最为常见的,其关以下六种计算时间的多项式时间算法是最为常见的,其关系为:系为:O(1)O(logn)O(n)O(nlogn)O(nO(1)O(logn)O(n)O(nlog
12、n)O(n2 2)O(n)O(n3 3)指数时间算法一般有指数时间算法一般有O(2O(2n n)、O(n!)O(n!)和和O(nO(nn n)等。其关系为等。其关系为 O(2O(2n n)O(n!)O(n)O(n!)O(nn n)当数据集的规模很大时,要在现代计算机上运当数据集的规模很大时,要在现代计算机上运行具有比行具有比O O(nlogn)nlogn)复杂度高的算法往往是很困难的。复杂度高的算法往往是很困难的。六、最好、最坏和平均情况六、最好、最坏和平均情况以顺序检索为例以顺序检索为例第二章第二章 分治法分治法2.1 2.1 方法概述方法概述一、基本思想一、基本思想 1 1、设计思想:将整
13、个问题分成若干个小问题后、设计思想:将整个问题分成若干个小问题后,分而治之。分而治之。2 2、适用条件:、适用条件:问题规模很大;问题规模很大;可以分成若干个与原问题性质相同的子问题,并可以可以分成若干个与原问题性质相同的子问题,并可以分别求解。分别求解。子问题的解通过整合可以得到原问题的解。子问题的解通过整合可以得到原问题的解。3 3、设计方法:使用递归策略。、设计方法:使用递归策略。4 4、设计步骤设计步骤(1)(1)分解:分解:将原问题分解为若干个相互独立、与原问题形式相将原问题分解为若干个相互独立、与原问题形式相同的子问题;同的子问题;(2)(2)求解求解:若子问题容易被解决则直接解,
14、否则再继续分解为:若子问题容易被解决则直接解,否则再继续分解为更小的子问题,直到容易解决;更小的子问题,直到容易解决;(3)(3)合并合并:将已求解的各个子问题的解,逐步合并以得到原问:将已求解的各个子问题的解,逐步合并以得到原问题的解。题的解。二、分治法的算法设计模式二、分治法的算法设计模式Divide-and-Conquer(n)Divide-and-Conquer(n)/n/n为问题规模为问题规模1 1if n=n0 if n=n0/n0/n0 为可解子问题的规模为可解子问题的规模2 2then then 3 3 4 4 解子问题解子问题5 5 return(return(子问题的解子问
15、题的解 )6 6 4 4for i for i 1 to k 1 to k/分解为分解为k k个子问题个子问题5 5 do yi do yi Divide-and-Conquer(|Pi|)/Divide-and-Conquer(|Pi|)/递归解决递归解决PiPi6 6 T T MERGE(y1,y2,.,yk)MERGE(y1,y2,.,yk)/合并子问题合并子问题7 7 return Treturn T递归过程递归过程注意:分治法可以用递归实现,也可以用循环实现。注意:分治法可以用递归实现,也可以用循环实现。其中:其中其中:其中|P|P|表示问题表示问题P P的规模;的规模;n0n0为一
16、阈值,表示为一阈值,表示当问题当问题P P的规模不超过的规模不超过n0n0时,问题已容易直接解出,不必时,问题已容易直接解出,不必再继续分解。算法再继续分解。算法MERGE(y1,y2,.,yk)MERGE(y1,y2,.,yk)是该分治法中的是该分治法中的合并子算法,用于将合并子算法,用于将P P的子问题的子问题P1,P2,.,PkP1,P2,.,Pk的相应的的相应的解解y y1 1,y,y2 2,.,y,.,yk k合并为合并为P P的解。的解。:其中,其中,T(n)T(n)是输入规模为是输入规模为n n的的Divide-and-ConquerDivide-and-Conquer的的时间,
17、时间,g(n)g(n)是对足够小的输入规模能直接计算出答案是对足够小的输入规模能直接计算出答案的时间,的时间,f(n)f(n)是是MERGEMERGE的时间。的时间。倘若所分成的两个子问题的输入规模大致相等,则倘若所分成的两个子问题的输入规模大致相等,则Divide-and-ConquerDivide-and-Conquer总的计算时间可以用下面的递推关系总的计算时间可以用下面的递推关系来表示:来表示:(n(n足够小足够小)(否则否则)()2/(2)()(nfnTngnT2.2 2.2 二二 分分 检检 索索一、问题描述一、问题描述 已知一个按非降次序排列的元素表已知一个按非降次序排列的元素表
18、a a1 1,a,a2 2,a an n,要求判定要求判定某给定元素某给定元素x x是否在该表中出现。若是,则找出是否在该表中出现。若是,则找出x x在表中的在表中的位置,并将此下标值赋给变量位置,并将此下标值赋给变量j j;若非,则将;若非,则将j j置成置成0 0。二、问题分析二、问题分析 设该问题用设该问题用I=(n,aI=(n,a1 1,a,a2 2,a an n,x),x)来表示,可以将它分解来表示,可以将它分解成一些子问题,一种可能的做法是,选取一个下标成一些子问题,一种可能的做法是,选取一个下标k k,由此得到,由此得到三个子问题:三个子问题:I I1 1=(k-1,a=(k-1
19、,a1 1,a,a2 2,a ak-1k-1,x),I,x),I2 2=(1,a=(1,ak k,x),x)和和I I3 3=(n-k,=(n-k,a ak+1k+1,a an n,x),x)。对于对于I I2 2,通过比较,通过比较x x和和a ak k容易得到解决。如果容易得到解决。如果x=ax=ak k,则则j=kj=k且且不需再对不需再对I I1 1和和I I3 3求解;否则,在求解;否则,在I I2 2 子问题的子问题的j=0j=0,此时若,此时若xaxaxak k,只有只有I I3 3留待留待求解,在求解,在I I1 1子问题中的子问题中的j=0j=0。在。在a ak k作了比较之
20、后,留待求解的作了比较之后,留待求解的问题(如果有的话)可以再一次使用分治法来求解。如果对问题(如果有的话)可以再一次使用分治法来求解。如果对所求解的问题(或子问题)所选的下标所求解的问题(或子问题)所选的下标k k都是其元素的中间元都是其元素的中间元素下标(例如,对于素下标(例如,对于I I,k=(n+1)/2k=(n+1)/2),则所产生的算法就是则所产生的算法就是通常所说的二分检索。通常所说的二分检索。三、二分检索算法三、二分检索算法 算法算法2.3 2.3 二分检索二分检索 /给定一个按非降次序排列的元素数组给定一个按非降次序排列的元素数组A(1:n),n1,A(1:n),n1,判判
21、断断x x是否出现。若是,置是否出现。若是,置j j,使得,使得x=A(j),x=A(j),若非,若非,j=0/j=0/BINSEARCH(A,n,x)BINSEARCH(A,n,x)1 low 1 low 1 12 high 2 high n n 3 3 while low=highwhile lowhighlowhigh,数组,数组A A中没有找到中没有找到x x,返回,返回j j0 04 do4 do5 5 6 6 /取处于取处于lowlow和和highhigh之间的中间值之间的中间值7 if x=Amid/7 if x=Amid/找到值为找到值为x x的元素,的元素,midmid即为其
22、下标,返回即为其下标,返回midmid8 then8 thenreturn midreturn mid9 else if x Amid9 else if x Amid/如果如果x Amidx Amid,则,则x x可能位于可能位于lowlow与与midmid之间,之间,1010 /否则否则x x可能位于可能位于midmid与与highhigh之间之间1111 then high then high mid-1 mid-11212 else low else low mid+1 mid+113 13 14 retrun 014 retrun 0 ()/2midlowhigh非递归形式非递归形式四
23、、算法的证明四、算法的证明假定在假定在A9A9中顺序存放着以下中顺序存放着以下9 9个元素:个元素:-15-15,-6-6,0 0,7 7,9 9,2323,5454,8282,101101。要求检索下列。要求检索下列x x的值:的值:101101,-14-14和和8282是否是否在在A A中出现。中出现。X=101low high midX=-14low high midX=82low high mid19519519569714269789811199921找不到898找到找到A(1)(2)(3)(4)(5)(6)(7)(8)(9)元素-15-6079235482101比较次数323413
24、234从算法中可以看到从算法中可以看到,所有的运算基本上都是进行比较和所有的运算基本上都是进行比较和数据传送,前两条是赋值语句数据传送,前两条是赋值语句,频率计数均为频率计数均为1 1。在。在whilewhile循循环中,我们集中考虑循环的次数,而其他运算的频率计数显环中,我们集中考虑循环的次数,而其他运算的频率计数显然与这些元素比较运算的频率计数具有相同的数量级,找到然与这些元素比较运算的频率计数具有相同的数量级,找到这九个元素中的每一个所需的元素循环的次数如下:这九个元素中的每一个所需的元素循环的次数如下:(1)(log n)(log n)(log n)(log n)(log n)不成功检
25、索成功检索平均情况不成功检索成功检索最坏情况不成功检索成功检索最佳情况 分析:对于分析:对于A A中的中的n n个数,如果个数,如果x x在在A A中出现,则是成功检索,所中出现,则是成功检索,所以成功检索共有以成功检索共有n n种情况,而不成功的检索,种情况,而不成功的检索,x x将取将取n+1n+1个区间中的个区间中的不同值,因此在计算出不同值,因此在计算出x x在这在这2n+12n+1种情况下的执行时间后,就可以种情况下的执行时间后,就可以求出其在各种情况下的时间复杂性了。求出其在各种情况下的时间复杂性了。例子:例子:A:(1)(2)(3)(4)(5)(6)(7)(8)(9)元素:元素:
展开阅读全文