算法设计与分析 全套课件PPT推荐.ppt
《算法设计与分析 全套课件PPT推荐.ppt》由会员分享,可在线阅读,更多相关《算法设计与分析 全套课件PPT推荐.ppt(378页珍藏版)》请在冰豆网上搜索。
,巢湖学院计算机科学与技术系,问题求解(ProblemSolving),理解问题,精确解或近似解选择数据结构算法设计策略,设计算法,巢湖学院计算机科学与技术系,1.从机器语言到高级语言的抽象,1.2、表达算法的抽象机制,高级程序设计语言的主要好处是:
(4)把繁杂琐碎的事务交给编译程序,所以自动化程度高,开发周期短,程序员可以集中时间和精力从事更重要的创造性劳动,提高程序质量。
(1)高级语言更接近算法语言,易学、易掌握,一般工程技术人员只需要几周时间的培训就可以胜任程序员的工作;
(2)高级语言为程序员提供了结构化程序设计的环境和工具,使得设计出来的程序可读性好,可维护性强,可靠性高;
(3)高级语言不依赖于机器语言,与具体的计算机硬件关系不大,因而所写出来的程序可植性好、重用率高;
巢湖学院计算机科学与技术系,2.抽象数据类型,1.2、表达算法的抽象机制,抽象数据类型是算法的一个数据模型连同定义在该模型上,并作为算法构件的一组运算。
抽象数据类型带给算法设计的好处有:
(1)算法顶层设计与底层实现分离;
(2)算法设计与数据结构设计隔开,允许数据结构自由选择;
(3)数据模型和该模型上的运算统一在ADT中,便于空间和时间耗费的折衷;
(4)用抽象数据类型表述的算法具有很好的可维护性;
(5)算法自然呈现模块化;
(6)为自顶向下逐步求精和模块化提供有效途径和工具;
(7)算法结构清晰,层次分明,便于算法正确性的证明和复杂性的分析。
巢湖学院计算机科学与技术系,1.3、算法复杂性分析,算法复杂性是算法运行所需要的计算机资源的量,需要时间资源的量称为时间复杂性T(N),需要的空间资源的量称为空间复杂性S(N)。
这个量应该只依赖于算法要解的问题的规模、算法的输入和算法本身的函数。
如果分别用N、I和A表示算法要解问题的规模、算法的输入和算法本身,而且用C表示复杂性,那么,应该有C=F(N,I,A)。
一般把时间复杂性和空间复杂性分开,分别用T和S来表示则有:
T=T(N,I)和S=S(N,I)。
(通常,让A隐含在复杂性函数名当中),巢湖学院计算机科学与技术系,1.3、算法复杂性分析,最坏情况下的时间复杂性:
最好情况下的时间复杂性:
平均情况下的时间复杂性:
其中DN是规模为N的合法输入的集合;
I*是DN中使T(N,I*)达到Tmax(N)的合法输入;
是中使T(N,)达到Tmin(N)的合法输入;
而P(I)是在算法的应用中出现输入I的概率。
巢湖学院计算机科学与技术系,1.3、算法复杂性分析,算法复杂性在渐近意义下的阶:
渐近意义下的记号:
O、o设f(N)和g(N)是定义在正数集上的正函数。
(1)渐近上界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(f*g);
(4)如果g(N)=O(f(N),则O(f)+O(g)=O(f);
(5)O(Cf(N)=O(f(N),其中C是一个正的常数;
(6)f=O(f)。
巢湖学院计算机科学与技术系,1.3、算法复杂性分析,
(2)渐近下界的定义:
如果存在正的常数C和自然数N0,使得当NN0时有f(N)Cg(N),则称函数f(N)当N充分大时下有界,且g(N)是它的一个下界,记为f(N)=(g(N)。
即f(N)的阶不低于g(N)的阶。
(3)同阶的定义:
定义f(N)=(g(N)当且仅当f(N)=O(g(N)且f(N)=(g(N),即(g(n)=f(n)|存在正常数c1,c2和正整数n0使得对所有nn0有:
c1g(n)f(n)c2g(n),此时称f(N)与g(N)同阶。
定理1:
(g(n)=O(g(n)(g(n),巢湖学院计算机科学与技术系,1.3、算法复杂性分析,(4)低阶o的定义:
对于任意给定的0,都存在正整数N0,使得当NN0时有f(N)/Cg(N),则称函数f(N)当N充分大时的阶比g(N)低,记为f(N)=o(g(N)。
(有的书称之为非紧上界)例如,4NlogN+7=o(3N2+4NlogN+7)。
(5)非紧下界记号(g(n)=f(n)|对于任何正常数c0,存在正数和n00使得对所有nn0有:
0cg(n)f(n)。
注意:
f(n)(g(n)g(n)o(f(n),巢湖学院计算机科学与技术系,渐近分析记号在等式和不等式中的意义,f(n)=(g(n)的确切意义是:
f(n)(g(n)。
一般情况下,等式和不等式中的渐近记号(g(n)表示(g(n)中的某个函数。
例如:
2n2+3n+1=2n2+(n)表示2n2+3n+1=2n2+f(n),其中f(n)是(n)中某个函数。
等式和不等式中渐近记号O,o,和的意义是类似的。
巢湖学院计算机科学与技术系,渐近分析中函数比较,f(n)=O(g(n)ab;
f(n)=(g(n)ab;
f(n)=(g(n)a=b;
f(n)=o(g(n)ab;
巢湖学院计算机科学与技术系,渐近分析记号的若干性质,
(1)传递性:
f(n)=(g(n),g(n)=(h(n)f(n)=(h(n);
f(n)=O(g(n),g(n)=O(h(n)f(n)=O(h(n);
f(n)=o(g(n),g(n)=o(h(n)f(n)=o(h(n);
(2)反身性:
f(n)=(f(n);
f(n)=O(f(n);
f(n)=(f(n).(3)对称性:
f(n)=(g(n)g(n)=(f(n).(4)互对称性:
f(n)=O(g(n)g(n)=(f(n);
f(n)=o(g(n)g(n)=(f(n);
巢湖学院计算机科学与技术系,(5)算术运算:
O(f(n)+O(g(n)=O(maxf(n),g(n);
O(f(n)+O(g(n)=O(f(n)+g(n);
O(f(n)*O(g(n)=O(f(n)*g(n);
O(cf(n)=O(f(n);
g(n)=O(f(n)O(f(n)+O(g(n)=O(f(n)。
渐近分析记号的若干性质,巢湖学院计算机科学与技术系,规则O(f(n)+O(g(n)=O(maxf(n),g(n)的证明:
对于任意f1(n)O(f(n),存在正常数c1和自然数n1,使得对所有nn1,有f1(n)c1f(n)。
类似地,对于任意g1(n)O(g(n),存在正常数c2和自然数n2,使得对所有nn2,有g1(n)c2g(n)。
令c3=maxc1,c2,n3=maxn1,n2,h(n)=maxf(n),g(n)。
则对所有的nn3,有f1(n)+g1(n)c1f(n)+c2g(n)c3f(n)+c3g(n)=c3(f(n)+g(n)c32maxf(n),g(n)=2c3h(n)=O(maxf(n),g(n).,渐近分析记号的若干性质,巢湖学院计算机科学与技术系,算法渐近复杂性分析中常用函数,
(1)单调函数单调递增:
mnf(m)f(n);
单调递减:
严格单调递增:
mf(n).
(2)取整函数x:
不大于x的最大整数;
x:
不小于x的最小整数;
巢湖学院计算机科学与技术系,取整函数的若干性质,x-1xxxx+1;
n/2+n/2=n;
对于n0,a,b是大于0的整数,有:
n/a/b=n/ab;
a/b(a+(b-1)/b;
a/b(a-(b-1)/b;
f(x)=x,g(x)=x为单调递增函数。
巢湖学院计算机科学与技术系,(3)多项式函数p(n)=a0+a1n+a2n2+adnd;
ad0;
p(n)=(nd);
f(n)=O(nk)f(n)多项式有界;
f(n)=O
(1)f(n)c;
kdp(n)=O(nk);
kdp(n)=(nk);
kdp(n)=o(nk);
kdp(n)=(nk).,算法渐近复杂性分析中常用函数,巢湖学院计算机科学与技术系,算法渐近复杂性分析中常用函数,(4)指数函数对于正整数m,n和实数a0:
a0=1;
a1=a;
a-1=1/a;
(am)n=amn;
(am)n=(an)m;
aman=am+n;
a1an为单调递增函数;
a1nb=o(an),巢湖学院计算机科学与技术系,算法渐近复杂性分析中常用函数,(5)对数函数logn=log2n;
lgn=log10n;
lnn=logen;
logkn=(logn)k;
loglogn=log(logn);
fora0,b0,c0,巢湖学院计算机科学与技术系,|x|1forx-1,foranya0,logbn=o(na),算法渐近复杂性分析中常用函数,(5)对数函数,巢湖学院计算机科学与技术系,算法渐近复杂性分析中常用函数,(6)阶层函数Stirlingsapproximation,巢湖学院计算机科学与技术系,算法分析中常见的复杂性函数,巢湖学院计算机科学与技术系,小规模数据,巢湖学院计算机科学与技术系,中等规模数据,巢湖学院计算机科学与技术系,
(1)选择语句:
(1.1)if语句:
(1.2)?
语句:
if(expression)statement;
elsestatement;
exp1?
exp2:
exp3y=x9?
100:
200;
等价于:
if(x9)y=100;
elsey=200;
用c+描述算法的常用语句,巢湖学院计算机科学与技术系,switch(expression)case1:
statementsequence;
break;
case2:
default:
(1.3)switch语句:
用c+描述算法的常用语句,巢湖学院计算机科学与技术系,(2.1)for循环:
for(init;
condition;
inc)statement;
(2.2)while循环:
while(condition)statement;
(2.3)do-while循环:
dostatement;
while(condition);
用c+描述算法的常用语句,
(2)迭代语句,巢湖学院计算机科学与技术系,(3.1)return语句:
returnexpression;
(3.2)goto语句:
gotolabel;
label:
用c+描述算法的常用语句,(3)跳转语句:
巢湖学院计算机科学与技术系,算法分析方法举例,例:
顺序搜索算法,templateintseqSearch(Type*a,in