算法设计与分析PPT课件.ppt

上传人:wj 文档编号:250535 上传时间:2022-10-07 格式:PPT 页数:390 大小:4.10MB
下载 相关 举报
算法设计与分析PPT课件.ppt_第1页
第1页 / 共390页
算法设计与分析PPT课件.ppt_第2页
第2页 / 共390页
算法设计与分析PPT课件.ppt_第3页
第3页 / 共390页
算法设计与分析PPT课件.ppt_第4页
第4页 / 共390页
算法设计与分析PPT课件.ppt_第5页
第5页 / 共390页
点击查看更多>>
下载资源
资源描述

算法设计与分析PPT课件.ppt

《算法设计与分析PPT课件.ppt》由会员分享,可在线阅读,更多相关《算法设计与分析PPT课件.ppt(390页珍藏版)》请在冰豆网上搜索。

算法设计与分析PPT课件.ppt

算法设计与分析算法设计与分析2课程目的算法分析行一全面的对设计与进个较为介,使大家具有行的算法绍进简单设计分析的基本能力与先修课程程序言设计语据数结构高等数学离散数学率概论3主要内容介绍第1章算法引论第2章递归与分治策略第3章动态规划第4章贪心算法第5章回溯法第6章分支限界法第7章概率算法第8章NP完全性理论4教学用书教学用书王晓东算法设计与分析清华大学出版社5T.Cormen,C.LLeiserson,R.RRivest,andC.SteinIntroductiontoAlgorithms,2ndEd.MITPressandMcGraw-HillBookCompany,2001考教学参书6D.E.KnuthTheArtofComputerProgramming,Vol.1and3,ThirdEdition,AddisonWesley,1997.7第1章算法引论程序=算法+据数结构1.1算法程序与一.算法在算机科中的重要地位计学8二.算法的基本概念一有的有序集合一算法。

个穷规则称为个1.定义.2.算法的特征.入:

有零或多外部量作算法的入。

输个个为输出:

算法生至少一量作出。

输产个为输确定性:

成算法的每指令晰、无歧。

组条清义有限性:

算法中每指令的行次有限。

条执数可行性:

行每指令的也有限。

执条时间9例.求正整数m、n的最大公因。

数解一.

(1)求余:

用数m除以n,得余数r(0rn)。

(2)判余:

若余断数数r=0,出输n,束。

结否,(则转3)。

(3)更新被除和除:

数数mn,nr,转

(1)。

10解二.始开入输m、nr=m%nr=0?

mn,nr出输n是否11解三.Euclid(intm,intn)intr;while(n!

=0)r=m%n;m=n;n=r;printf(“%d”,m)123.算法的描述方法.

(1)自然言语

(2)流程图(3)程序言设计语13三.算法设计与分析的步骤1.的描述问题.2.模型的选择.3.算法和正确性明设计证.4.算法的分析.5.算法的实现.141.2算法复杂性分析算法性是算法行所需要的算机源的量,复杂运计资需要源的量时间资称为时间复杂性,需要的空源的间资量称为空间复杂性。

量只依于算法要解的这个应该赖问的模、算法的入和算法本身的函。

如果分用题规输数别n、I和A表示算法要解的模、算法的入和算法问题规输本身,而且用C表示性,那,有复杂么应该C=F(n,I,A)。

一般把性和空性分,分用时间复杂间复杂开并别T和S来表示,有:

则T=T(n,I)和S=S(n,I)。

(通常,让A含在性函名中)隐复杂数当15最坏情下的度:

况时间复杂),(max)(maxInTnTnDI),(*1Inetkiii),(*InT近度:

渐时间复杂平均情下的性:

况时间复杂nDIInTIPnT),()()(avgnDIkiiiInetIP),()(1设Dn是模规为n的合法入的集合;输I*是Dn中使T(n,I*)到达Tmax(n)的合法入;而输P(I)是在算法的用中出入应现输I的率。

概则n时,T(n)的主要部分算法共有k种基本步骤,第i种步骤所需时间ti,出现次数ei.用问题体积n表示的运行时间T(n)称为时间复杂度)(nT16算法复杂度的重要性假设计算机每秒可作1000次基本运算17有效算法最佳算法计算问题的分类1.无法出算法的写问题.2.有多式算法的项问题.3.介于上述之的两问题间问题.18例之值。

求0111)(axaxaxaxPnnnnn解用最直的方法观2)1()121()(nnnnnT用Horner算法01321)()(axaxaxaaxaxPnnnnnnnT)(Horner(intan+1,realx)intp=an;for(i=1;i=n;i+)p=p*x+an-i;returnp;19表示算法渐近复杂度的数学符号:

近意下的:

渐义记号O、o设f(n)和g(n)是定在正集上的正函。

义数数O的定义:

如果存在正的常数C和自然数N0,使得当nN0有时f(n)Cg(n),函则称数f(n)当n充分大上有时界,且g(n)是的一上界,它个记为f(n)=O(g(n)。

即f(n)的不高于阶g(n)的。

阶根据O的定,义容易明有如下算:

证它运规则

(1)O(f)+O(g)=O(max(f,g);

(2)O(f)+O(g)=O(f+g);(3)O(f)O(g)=O(fg);(4)如果g=O(f),则O(f)+O(g)=O(f);(5)O(Cf)=O(f),其中C是一正的常;个数(6)f=O(f)。

20的定义:

如果存在正的常数C和自然数N0,使得当nN0时有f(n)Cg(n),函则称数f(n)当n充分大下有界,且时g(n)是的一下界,它个记为f(n)=(g(n)。

即f(n)的不低于阶g(n)的。

阶的定义:

定义f(n)=(g(n)且当仅当f(n)=O(g(n)且f(n)=(g(n)。

此时称f(n)与g(n)同。

阶o的定义:

于任意定的对给0,都存在正整数N0,使得当nN0有时f(n)/g(n),函则称数f(n)当n充分大的比时阶g(n)低,记为f(n)=o(g(n)。

例如,4nlogn+7=o(3n2+4nlogn+7)。

21第第22章递归与章递归与分治策略分治策略凡治众如治寡,分数是也。

-孙子兵法222.1递归的概念递归的概念直接或接地用自身的小模式的算法间调较称为递归算法递归算法。

用函自身的小模式出其定的函数较给义数称为递归函数递归函数。

由分治法生的子往往是原的小模产问题问题较式,子的度也原度的小模问题复杂问题复杂较式,就使用技行算法分析提供了这为递归术进方便。

分治像一生兄弟,常同用在与递归对孪经时应算法之中,由此生多高效算法。

设计并产许23例例11阶乘函数阶乘函数阶乘函数可递归地定义为:

00)!

1(1!

nnnnn边界条件边界条件递归方程递归方程界件方程是函的二要素,函边条与递归递归数个递归只有具了要素,才能在有限次算后得出数备这两个计果。

结下面看几例来个实:

factorial(intn)if(n=0)return1;elsereturnfactorial(n-1);T(n)=T(n-1)+1,T(n)=O(n)24nnn)1(321!

乘函可以找到相的非方式定:

阶数应递归义factorial(intn)inti,p=1;for(i=1;i=n;i+)p=p*i;returnp;循环n次,故T(n)=n25Illustration例2Fibonacci数列26Fibonacci列的前数10项为1,1,2,3,5,8,13,21,34,55,可以地定:

它递归义为边界条件边界条件递归方程递归方程第n个Fibonacci数可递归地计算如下:

fibonacci(intn)if(n1),和A(1,1)=2,得A(n,1)=2*nm=2时,A(n,2)=A(A(n-1,2),1)=2A(n-1,2),和A(1,2)=A(A(0,2),1)=A(1,1)=2,故A(n,2)=。

m=3时,类似的可以推出m=4时,A(n,4)的增长速度非常快,以至于没有适当的数学式子来表示这一函数。

个nnA2222)3,(1,20)1),1(),

(2)0,

(1),0

(2)0,1(mnnmmmnAAmnAnnAmAAn230定义单变量的Ackerman函数A(n)为,A(n)=A(n,n)。

定义其拟逆函数(n)为:

(n)=minkA(k)n。

即(n)是使nA(k)成立的最小的k值。

(n)在复杂度分析中常遇到。

对于通常所见到的正整数n,有(n)4。

但在理论上(n)没有上界,随着n的增加,它以难以想象的慢速度趋向正无穷大。

个65536222)4,4(A31例例44排列的生成问题排列的生成问题设计一个递归算法生成n个元素r1,r2,rn的全排列。

设R=r1,r2,rn是要行排列的进n元素,个Ri=Rri。

集合X中元素的全排列记为perm(X)。

(ri)perm(X)表示在全排列perm(X)的每一排列前加上前个缀ri得到的排列。

R的全排列可定如下:

归纳义当n=1,时perm(R)=(r),其中r是集合R中唯一的元素;当n1,时perm(R)由(r1)perm(R1),(r2)perm(R2),(rn)perm(Rn)成。

构32perm(list,intk,intm)/产生前缀是产生前缀是list0:

k-1,后缀是后缀是listk:

m的所有排列的所有排列/perm(list,0,n-1)产生产生list0:

n-1的去全排列的去全排列if(k=m)/单元素排列单元素排列for(inti=0;i=m;i+)coutlisti;coutendl;else/多元素序列,递归产生排列多元素序列,递归产生排列for(inti=k;im1;正整数n的最大加数n1不大于m的分由划n1=m的分和划n1m-1的分成。

划组(3)q(1,m)=1,m1;3711,1),()1,()1,

(1),

(1),(mnmnmnmnmmnqmnqnnqnnqmnq然,正整显数n的分划数p(n)=q(n,n)。

q(intn,intm)if(m=1|n=1)return1;elseif(n0)hanoi(n-1,a,c,b);move(a,b);hanoi(n-1,c,b,a);)2()

(1)1

(2)(nOnTnTnT40例例.描述描述n=3n=3时时,hanoi(n,a,b,c)的运行过程。

的运行过程。

层次栈状态塔状态13,a,b,ccba32122,a,c,b3,a,b,ccba13231,a,b,c2,a,c,b3,a,b,c层次栈状态塔状态cba21322,a,c,b3,a,b,ccba23131,c,a,b2,a,c,b3,a,b,c2,a,c,b3,a,b,c241层次栈状态塔状态层次栈状态塔状态13,a,b,ccba22,b,a,c3,a,b,c321cba23131,b,c,a2,b,a,c3,a,b,ccba31222,b,a,c3,a,b,ccba32131,a,b,c2,b,a,c3,a,b,c42cba32122,b,a,c3,a,b,c层次栈状态塔状态cba3213,a,b,c1层次栈状态塔状态cba321栈空043递归小结递归小结优点:

优点:

结构清晰,可读性强,而且容易用数学归纳法来证明算法的正确性,因此它为设计算法、调试程序带来很大方便。

缺点:

缺点:

递归算法的运行效率较低,无论是耗费的计算时间还是占用的存储空间都比非递归算法要多。

44递归小结递归小结解决方法:

解决方法:

在递归算法中消除递归调用,使其转化为非递归算法。

1.采用一个用户定义的栈来模拟系统的递归调用工作栈。

该方法通用性强,但本质上还是递归,只不过人工做了本来由编译器做的事情,优化效果不明显。

2.用递推来实现递归函数。

3.通过Cooper变换、反演变换能将一些递归转化为尾递归,从而迭代求出结果。

后两种方法在时空复杂度上均有较大改善,但其适用范围有限。

45nT(n/2)T(n/2)T(n/2)T(n/2)T(n/2)T(n/2)T(n/2)T(n/2)T(n)=分将问题为a子,个问题对这a子分求解。

如个问题别果子的模仍然不小,每子再分问题规够则个问题划为a子,如此的行下去,直到模足小个问题递归进问题规够,很容易求出其解止。

为2.22.2分治法的基本思分治法的基本思想想46求出的小模的的解合一更大模的的将规问题并为个规问题解,自底向上逐步求出原的解。

来问题分治算法的程序具有的特点递归nT(n)=n/2T(n/4)T(n/4)T(n/4)T(n/4)T(n/4)T(n/4

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 人文社科 > 法律资料

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1