算法设计与分析 第一章ppt
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
算法的特征
1.有穷性
一个算法须在执行有限个运算步后终止,每一步必须 在有限时间内完成.实际应用中,算法的有穷性应该包括 执行时间的合理性. 程序是算法的程序设计语言的具体实现.可不满足性质1. 一个算法面向一个问题,而不是仅仅求解一个问题的实例
操作系统程序:是一个在无限循环中执 行的程序,而不是一个算法。
i 1 k
当问题的规模 n和算法确定后,T是输入变元 i 的函数.
23
> 算法复杂性分析 > 算法概述 算法设计与分析 >算法概述 >复杂性的计量
说明:
我们不可能对规模为n的每一种合法输
入I都计算ei次,因为输入可能是无穷集合,
我们只能对规模为n的问题的某类具有代表
性的合法输入统计相应的ei.
24
2. 不要产生错误界限。 例如 n2+100n+6,当 n<3 时,n2+100n+6<106n,由此 就认为 n2+100n+6=O(n). 3. f(n)=O(g(n))不能写成 g(n)=O(f(n)) 因为两者并不等价。实际上,这里的等号并不是通常 相等的含义。
30
>算法概述 算法设计与分析 >算法概述
17
> 算法复杂性分析 > 算法概述 算法设计与分析 >算法概述
考虑时间复杂性的理由
某些计算机用户需要提供程序运行时间的上限 (用户可接受的); 所开发的程序需要提供一个满意的实时反应。
18
> 算法复杂性分析 > 算法概述 算法设计与分析 >算法概述
算法分析:(渐进算法分析):对执行算法所消 耗或占用的资源进行估算,给出算法耗费的 限界函数. 需解决两个问题: 如何度量复杂性? 如何分析复杂性?
行结果是不确定的.
8
>算法概述 算法设计与分析 >算法概述
3.能行性
算法中的每个步骤是能实现的, 如 x/0; 负数开方… 算法的执行结果达到预期目的,正确,有效.
4.输入
有0个或多个输入项.
5.输出
算法产生至少有一个输出项
9
算法设计与分析>算法概述
2.算法设计过程(程序设计过程)
1.问题的陈述 理解问题,并用科学规范的语言把所求解问题进行准 确的描述,包括所有已知条件和输出要求.
A B C
是
条件成立?
否
条件成立? 是 否
A
B
A
14
>算法概述 算法设计与分析 >算法概述
5. 算法分类
从解法上 数值型算法:算法中的基本运算为算术运算. 非数值型算法:算法中的基本运算为逻辑运算.
从处理方式上 串行算法:串行计算机上执行的算法. 并行算法:并行计算机上执行的算法.
本课程主要介绍非数值型的串行算法.
如果存在一个函数 T(n) 使得当n ,有 ~ (T(n) - T(n) ) / T(n)0 ~ 称 T(n) 是T(n)当 n 时的渐进性态 或 渐进复杂性
~
27
> 算法复杂性分析 >渐进性态 > 算法概述 算法设计与分析 >算法概述
~ ~ 在数学上,T(n)与 T(n) 有相同的最高阶项.可取 T(n) 为 略去T(n)的低阶项后剩余的主项. 例如 T(n)=3n2+4nlogn+7, 则 ~ T( n ) 可以是3n2
两个矩阵相乘, 表中排序,
n:数组中分量的个数
n:矩阵的维数 n:数组中分量的个数
遍历一棵树,
n:树中节点数
20
算法设计与分析>算法概述
5*5的矩阵相乘与10*10矩阵的矩阵相乘所需时间 空间均不相同; <问题规模不同> 找c在数组A中的位置,c=A(1),与c=A(100),所需时间 显然也不同 <输入数不同> 顺序查找还是折半查找速度也是不一样的. <算法不同>
2.建立数学模型
通过对问题分析,找出其中所有操作对象以及对象之 间的关系,并用数学语言加以描述. 对非数值型解法来说,
数学模型通常是链表,树,图,集合等数据结构.
10
算法设计与分析>算法概述
3.算法设计 根据数据模型, 给出求解问题的一系列步骤, 且这些步骤可通过计算机的各种操作来实现. 4.算法的正确性证明 算法的正确性:对一切合法的输入,算法均能 在有限次的计算后产生正确的输出. 5.算法的程序实现 将一个算法描述正确地编写成机器语言程序.
3.算法的描述
描述算法的方式一般有三种:自然语言,流程图, 伪代码语言。 伪代码描述介于自然语言与程序 设计语言之间。
13
>算法概述 算法设计与分析 >算法概述
4. 算法结构
任何算法都可由顺序结构、选择结构、循环结构这 三块“积木”通过组合和嵌套表达出来,遵循这种方 法的程序设计,即为结构化程序设计。
>渐进性态
运算规则
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. f=O( f )
例如
பைடு நூலகம்
3n=O(n),
n+1024=O(n),
2n2+11n-10=O(n2)
n2=O(n3) ?
√
n3=O(n2) ?
≠
29
> 算法复杂性分析 >渐进性态 > 算法概述 算法设计与分析 >算法概述
三点注意:
1. 用来作比较的函数 g(n)应该尽量接近 f(n).
例如 3n+2=O(n2) 松散的界限;3n+2=O(n) 较好的界限
~ 当n充分大时用 T(n)代替T(n)作为算法复杂性的度量,
以简化分析 比较两个算法时,如果他们的阶不同,就可分出效率高 ~ 低。故此时只需关心 T( n ) 最高限的阶即可。可忽略最高 项系数或低阶项。
28
> 算法复杂性分析 >渐进性态 > 算法概述 算法设计与分析 >算法概述
2.渐进性态的阶
4
>算法概述 算法设计与分析 >算法概述
计算机算法与人工算法
例如 求定积分: s= 人工处理步骤为
找出f(x)的源函数F(x)
利用牛-莱公式:s=F(b)-F(a)
计算机算法:计算定积分采用数值积分的方
法,得到一个近似解.
•有些问题没有计算机算法. •有些问题计算机算法与人工算法不同.
5
算法设计与分析>算法概述
15
> 算法复杂性分析 > 算法概述 算法设计与分析 >算法概述
1.2 算法的复杂性分析
算法的复杂性:指执行算法所消耗或占用的资 源的数量 一个算法所需资源越多,我们就说它的复杂性 越高,反之则低. 空间复杂性
算法的复杂性
时间复杂性
16
算法设计与分析>算法概述
考虑空间复杂性的理由
在多用户系统中运行时,需指明分给该程序 的内存大小; 需预先知道计算机系统是否有足够的内存来 运行该程序; 一个问题可能有若干个不同的内存解决方案 ,从中择取; 用空间复杂性估计一个程序可能解决的问题 的最大规模。
11
>算法概述 >问题的求解过程 算法设计与分析 >算法概述
6.算法分析
对执行该算法所消耗的计算机资源进行估算,
对数值型算法还需分析算法的稳定性和误差等
问题.
计算机资源中最重要的是时间和空间资源,
执行一个算法程序需要的时间和占用的内存空 间分别称为算法的时间复杂度和空间复杂性 .
12
>算法概述 算法设计与分析 >算法概述
= P( I )
I Dn
t e (n, I )
i 1 i i
k
25 P(I): 出现输入为I的概率
其中 Dn :规模为n的所有合法输入的集合
> 算法复杂性分析 >渐进性态 > 算法概述 算法设计与分析 >算法概述
当一个问题的输入规模很大时,算法的结构又很复杂时, 采用前面介绍的精确分析就显得过于繁琐,为降低算法分 析的代价,同时又保证估算的精确度,引入一个简化的计 算模型来评估算法的开销.称为渐进分析.渐进分析是对 问题的规模充分大的算法开销的估算。
~ 1. T(n)的渐进复杂性(渐进表达式) T(n) : (T(n) - ~ T(n)) / T(n)0,n 时
2.渐进阶: O, ,
26
> 算法复杂性分析 >渐进性态 > 算法概述 算法设计与分析 >算法概述
2.复杂性的渐进性态
1.渐进性态
设T(n)为算法A的时间复杂性函数(输入值固定. 如Tmax, Tmin, Tavg ), 则它是n 的单增函数。
算法的定义因看待的角度不同而不同
哲学家:算法是解决一个问题的抽象行为序 列。
码农:算法是一个计算过程,它接受一些输 入,并产生某些输出。 高大上:算法是解决一个精确定义的计算问 题的工具。
核心:算法是解决问题的办法和法则,算法必 须能够让人一步一步照着执行。
6
>算法概述 算法设计与分析 >算法概述
19
> 算法复杂性分析 > 算法概述 算法设计与分析 >算法概述 >复杂性的计量
1.复杂性的计量
算法的复杂性: 算法运行所需的时间和空间的数量.
它与算法求解问题的规模n,算法的输入数I 及算法本身有关.
问题的规模n:指问题的输入数据或初始数据的量.
在不同的问题中, n有不同的表现形式:
例如 在数组中找分量c,
算法设计与分析 >目录
第一章 第二章 第三章 第四章 第五章 第六章 第七章
算法概述 递归与分治策略 动态规划 贪心算法 回朔法 分支限界法 随机化算法
1
算法设计与分析 >第一章 目录
1.1 算法与程序
1.2 算法复杂度分析
1.3 NP完全性理论
2
>算法概述 算法设计与分析 >算法概述
1.1 算法与程序 1 算法定义及其特性
> 算法复杂性分析 > 算法概述 算法设计与分析 >算法概述 >复杂性的计量
最好情况:Tmin(n) = min T(n,I)=
I Dn k
min
I Dn
t
i 1
k
i
ei(n, I )
Dn中达到Tmin (n) 的一个输入.
~ ~ = ti ei(n, I ) = T(n, I )
设f(n)和 g (n) 是定义在正整数集上的正函数,
(1)大O表示法 (算法运行时间的上限 )
若正常数c和 自然数N0 使得当 n N0 时,有f(n) cg (n) 则称函数 f(n)在n充分大时有上界, 且 g(n)是它一个上界. 记为 f(n) =O(g (n)) , 也称 f(n) 的阶不高于g (n) 的阶.
算法: 是将问题的输入转化为输出的一系列 计算或操作步骤. “算法是任何定义好的计算程式,它取某些值 或值的集合作为输入,并产生某些值或值的集 合作为输出。”
3
>算法概述 算法设计与分析 >算法概述
算法描述举例
例:求两个不全为0的非负整数m, n的最大公约数 gcd(m,n)的欧几里德算法描述: 1.如果n=0,返回m的值作为结果,过程结束; 否则,进入第二步; 2.用n去除m,将余数赋给 r; 3.将n的值赋给m,将r的值赋给n,返回第一步。
将算法A 隐含在函数名中,不同函数名代表不同算法,
则简化为
T=T( n, I ) S=S( n, I )
22
> 算法复杂性分析 > 算法概述 算法设计与分析 >算法概述 >复杂性的计量
仅以时间复杂性为例将复杂性函数具体化.
设一台抽象计算机提供的元运算有k种, 记作 O1 ,…,Ok ; 设这些元运算每执行一次所需时间分别为 t1 ,…, tk ; 设在算法A中用到Oi的次数为 ei , i =1,…,k, 则 ei = ei ( n, I ) T=T(n,I)= t i ei (n,I)
算法效率与计算机的性能有关,但此因素对所有算法 的影响相同。
21
算法设计与分析>算法概述
令 n: 问题规模 I: 输入数据 A: 算法本身 C: 算法的 复杂性, 则 C=f ( n, I, A ) 将时间复杂性和空间复杂性分别考虑,并用T和S表示. 则有:
T=T(n, I, A)
S=S (n, I, A)
i 1 k
max 最坏情况:Tmax(n) = max T(n,I) = I Dn I D
n
t e (n, I )
i 1 i i
* = ti ei(n, I )=T(n, I * ) i 1
k
Dn中达到Tmax (n) 的一个输入.
平均情况:Tavg(n) =
I DN
P( I ) T(n, I)
7
>算法概述 算法设计与分析 >算法概述
2.确定性
算法的每一步骤必须有确定的含义,对每一种可能出 现的情况,算法都应给出确定的操作,不能有多义性.
例如 计算分段函数 f(x) =
1 x>100 0 x<10
算法描述:输入变量x,
若x大于100的数,输出1; 若x小于10的数,输出0. 输入10<=x<=100,则算法在异常情况下,执