2算法第二章导引详解_第1页
2算法第二章导引详解_第2页
2算法第二章导引详解_第3页
2算法第二章导引详解_第4页
2算法第二章导引详解_第5页
已阅读5页,还剩42页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

其次章导引与基本数据结构书目2.1算法2.2分析算法2.3用SPARKS语言写算法2.4基本数据结构(略)2.1算法什么是算法算法的重要特性计算过程与算法的区分问题的求解过程算法学习的基本内容什么是算法算法是解决一确定类问题的随意一种特殊的方法。数值计算方法非数值计算方法算法的非形式描述:算法就是一组有穷的规则,它规定了解决某一特定类型问题的一系列运算。求解数值问题,插值计算、数值积分等。求解非数值问题,主要进行推断比较。算法(Algorithm)的五个重要特性确定性:每一种运算必须要有精确定义,无二义性。例如:(1)5/0;(2)6或7与x相加。能行性:运算都是基本运算,原理上能由人用纸和笔在有限时间完成。输入:有0个或多个输入。输出:一个或多个输出。有穷性:在执行了有穷步运算后终止。仅仅有穷还不够,还要在现代计算机上有效才行。计算过程与算法的区分计算过程可以不满足算法的性质(5)有穷性。例如操作系统,当没有任务时,操作系统并不终止,而是处于等待状态,直到有新的任务启动,因而不是一个算法。程序=算法+数据结构(ByNiklausWirth)问题的求解过程证明正确性分析算法理解问题选择数据结构和算法设计策略设计算法设计程序算法学习的基本内容如何设计算法如何表示算法如何确认算法如何分析算法如何测试程序如何设计算法面对具体问题,运用一些基本设计策略被实践证明是有用的一些基本设计策略计算机科学、运筹学、电器工程等领域设计出很多精致有效的好算法驾驭这些策略,设计出更多的好算法如何表示算法设计的算法要用恰当的方式地表示出来接受结构程序设计的方式SPARKS程序设计语言——简洁明白如何确认算法算法确认(algorithmvalidation)——证明该算法对全部可能的合法输入,都能给出正确答案算法确认的目的——确保该算法能正确无误地工作穷举法推理——数学归纳法、反证法构造性证明测试如何分析算法分析执行一个算法时,占用CPU时间完成运算;占用存储器的存储空间,存放程序和数据。既对一个算法须要多少计算时间和存储空间,做定量分析。如何测试程序

调试——调试只能指出有错误,而不能指出它们不存在错误。源于程序正确性的证明还没有取得突破性进展。时空分布图用各种给定数据执行调试后的程序测定计算时间和空间印证之前的分析是否正确指出实现最优化的有效逻辑位置2.2分析算法算法分析目的算法分析的准备工作计算时间的渐进表示一些证明方法作时空性能分布图算法分析的目的算法分析(analysisofalgorithms)是对一个算法须要多少计算时间和存储空间作定量的分析。——确定算法在什么样的环境下能够有效地运行。分析在最好、最坏和平均状况下的执行状况。——对同一问题不同算法的有效性作出比较。时间困难性的形式化定义算法的时间困难性T(n);算法的空间困难性S(n);其中n是问题的规模。最坏状况下:Tmax(n)=max{T(I)|size(I)=n}最好状况下:Tmin(n)=min{T(I)|size(I)=n}平均状况下:Tavg(n)=其中I是问题的规模为n的实例,p(I)是实例I出现的概率。算法运行假定的计算机类型要求独立于具体的软硬件环境单纯分析算法。假定运用一台通用计算机依次处理每条指令;存储容量足够大;存取时间恒定。算法分析过程确定算法所涉及的运算分析算法语句的执行次数分析算法的执行时间的渐进表示确定出能反映算法在各种状况下工作的数据集作时空性能分布图事前分析准备工作事后测试全面分析的两个阶段准备工作(一)首先确定运用哪些运算以及执行这些运算所用的时间。基本运算由一些更基本的随意长序列的运算所组成的困难运算基本运算时间囿界于常数的运算加、减、乘、除整数算术运算浮点算术、字符比较、对变量赋值、过程调用等每种运算所用时间虽然不同,但都只花费一个固定量的时间困难运算由一些更基本的随意长序列的运算组成如:两个字符串的比较运算一系列字符比较指令一个字符的比较时间——囿界于常数字符串比较的时间总量则取决于字符串的长度准备工作(二)其次是要确定出能反映算法在各种状况下工作的数据集。编造出能产生最好、最坏和有代表性状况的数据配置通过运用这些数据来运行算法,以更了解算法的性能。算法分析最重要和最富于创建性的工作。全面分析算法的两个阶段事前分析(apriorianalysis)确定每条语句的执行次数。求出该算法的一个时间限界函数(一些关于参数的函数)。事后测试(aposteriortesting)作时空性能分布图。算法的执行时间同一条语句在一个算法中的执行次数(frequencycount)称为频率计数语句的时间总量=频率计数×执行一次该语句所须要的时间算法的执行时间就是构成算法的全部语句的执行时间总量之和由算法就可干脆确定,与所用的机器无关,且独立于程序设计语言。依靠机器、程序设计语言、编译程序例:计算语句xz+y在下面三个程序段中的频率计数beginxz+yendFC:1beginfori1tondo

xz+yendFC:nbeginfori1tondoforj1tondo

xz+yendFC:n2语句的数量级是指执行它的频率算法的数量级是指算法的全部语句的执行频率之和确定一个算法的数量级特殊重要,因为它在本质上反映了算法所需的计算时间。算法的数量级计算时间的基本特性描述算法数量级的多项表达式最高次项最高次项的系数最高次项的次数×××√精确分析出算法数量级的多项式表达式是很困难的,因此我们对事前分析的计算时间进行渐进表示。计算时间的渐进表示定义2.1:f(n)=O(g(n))定义2.2:f(n)=Ω(g(n))定义2.3:f(n)=Θ(g(n))定理2.1变量和函数的含义n表示问题规模,输入或输出量;两者之和;其中之一的某种测度。f(n)表示算法的计算时间。g(n)是在事前分析中确定的某个形式简洁的函数。f(n)与机器和语言有关,而g(n)是独立于机器和语言的。定义2.1假如存在两个正常数c和n0,对于全部的n≥n0,有|f(n)|≤c|g(n)|,则记作:f(n)=O(g(n))。当n充分大时,f(n)有上界,一个常数倍的g(n)是f(n)的一个上界,f(n)的数量级就是g(n)。f(n)的阶不高于g(n)的阶。在确定f(n)的数量级时,总是试图求出最小的g(n)。有关证明中,找出c和n0是关键。推断f(n)=O(g(n))?f(n)=3n,

g(n)=nf(n)=n+1024,

g(n)=1025nf(n)=2n2+11n-10,

g(n)=3n2f(n)=n2,

g(n)=n3f(n)=n3,

g(n)=n2O性质对于非负的f(n)和g(n),依据定义2.1,有如下性质:1.O(f(n))+O(g(n))=O(max(f(n),g(n));2.O(f(n))+O(g(n))=O(f(n)+g(n));3.O(f(n))O(g(n))=O(f(n)g(n));4.假如g(n)=O(f(n)),则O(f(n))+O(g(n))=O(f(n));5.O(cf(n))=O(f(n)),其中c是一个正的常数;6.f(n)=O(f(n))。定理2.1若A(n)=amnm+…+a1n+a0是一个m次多项式,则A(n)=O(nm)。证明:取n0=1,当n≥n0时由A(n)的定义和不等式关系|A+B|≤|A|+|B|有

|A(n)|=|amnm+…+a1n+a0|≤|am|nm+…+|a1|

n+|a0| =(|am|+|am-1|/n…+|a0|/nm)

nm

≤(|am|+|am-1|…+|a0|)

nm取c=|am|+|am-1|…+|a0|,有|A(n)|≤cnm即:A(n)=O(nm),定理得证。定理2.1表明,变量n的最高阶数为m的任一多项式,与nm同阶。因此一个计算时间为m阶多项式的算法,其时间都可以用O(nm)来表示。

若一个算法有数量级为c1nm1,c2nm2,…cknmk的

k个语句,则算法的数量级及计算时间就是

c1nm1+c2nm2+…+cknmk=O(nm)

其中m=max{mi|1≤i≤k}定理2.1:若A(n)=amnm+…+a1n+a0是一个m次多项式,则A(n)=O(nm)。数量级对算法有效性的影响P25-26从计算时间上算法可以分为两类:

多项式时间算法(polynomialtimealgorithm):

用多项式来对其计算时间限界的算法

O(1)<O(logn)<O(n)<O(nlogn)<O(n2)<O(n3)

指数时间算法(exponentialtimealgorithm):

计算时间用指数函数限界的算法

O(2n)<O(n!)<O(nn)不同时间困难性函数的对比定义2.2当n充分大时,f(n)有下界,一个常数倍的g(n)是f(n)的一个下界。f(n)的阶不低于g(n)的阶。在确定f(n)的下界时,总是试图求出最大的g(n)。有关证明中,找出c和n0是关键。假如存在两个正常数c和n0,对于全部的n≥n0,有|f(n)|≥c|g(n)|,则记作:f(n)=Ω(g(n))。性质对于非负的f(n)和g(n),依据定义2.2,有如下性质:1.(f(n))+(g(n))=(min(f(n),g(n));2.(f(n))+(g(n))=(f(n)+g(n));3.(f(n))(g(n))=(f(n)g(n));4.假如g(n)=(f(n)),则(f(n))+(g(n))=(f(n));5.(cf(n))=(f(n)),其中c是一个正的常数;6.f(n)=(f(n))。定义2.3一个算法的f(n)=Θ(g(n))意味着该算法在最好和最坏状况下的计算时间就一个常数因子范围内而言是相同的。假如存在正常数c1,c2和n0,对于全部的n≥n0,有c1|g(n)|≤|f(n)|≤c2|g(n)|,则记作:f(n)=Θ(g(n))。渐近表示函数的若干性质传递性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)=(g(n)),g(n)=(h(n))

f(n)=(h(n));反身性f(n)=(f(n));f(n)=O(f(n));f(n)=(f(n))。常用的整数求和公式通式:一些数学证明方法干脆证明:PQ间接证明:反证法举反例数学归纳法:初始归纳:i=1结论成立;归纳假设:若i=n-1时成立;归纳证明:证明i=n时成立。作时空性能分布图事后测试是在对算法进行设计、确认、事前分析和调试之后要做的工作,与所用计算机亲密相关。以时间分布图为例:算法时间的精确测量 分布图的做法->数据集与时间困难度有关时钟不精确造成的噪声增大规模重复执行2.3用SPARKS语言写算法P28-33作业1证明:n2=O(n3);证明:2n2+11n-10=O(n2);证明:O的以下两特性质O(f(n))O(g(n))=O(f(n)g(n));O(cf(n))=O(f(n)),其中c是一个正的常数;证明:n3O(n2)作业15.如果g(n)=

(f(n)),则

(f(n))+

(g(n))

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论