- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
17
> 算法复杂性分析 > 算法概述 算法设计与分析 >算法概述
考虑时间复杂性的理由
某些计算机用户需要提供程序运行时间的上限 (用户可接受的); 所开发的程序需要提供一个满意的实时反应。
18
> 算法复杂性分析 > 算法概述 算法设计与分析 >算法概述
算法分析:(渐进算法分析):对执行算法所消 耗或占用的资源进行估算,给出算法耗费的 限界函数. 需解决两个问题: 如何度量复杂性? 如何分析复杂性?
~ 当n充分大时用 T(n)代替T(n)作为算法复杂性的度量,
以简化分析 比较两个算法时,如果他们的阶不同,就可分出效率高 ~ 低。故此时只需关心 T( n ) 最高限的阶即可。可忽略最高 项系数或低阶项。
28
> 算法复杂性分析 >渐进性态 > 算法概述 算法设计与分析 >算法概述
2.渐进性态的阶
7
>算法概述 算法设计与分析 >算法概述
2.确定性
算法的每一步骤必须有确定的含义,对每一种可能出 现的情况,算法都应给出确定的操作,不能有多义性.
例如 计算分段函数 f(x) =
1 x>100 0 x<10
算法描述:输入变量x,
若x大于100的数,输出1; 若x小于10的数,输出0. 输入10<=x<=100,则算法在异常情况下,执
例如
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) 较好的界限
>渐进性态
运算规则
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 )
设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) 的阶.
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)
19
> 算法复杂性分析 > 算法概述 算法设计与分析 >算法概述 >复杂性的计量
1.复杂性的计量
算法的复杂性: 算法运行所需的时间和空间的数量.
它与算法求解问题的规模n,算法的输入数I 及算法本身有关.
问题的规模n:指问题的输入数据或初始数据的量.
在不同的问题中, n有不同的表现形式:
例如 在数组中找分量c,
算法效率与计算机的性能有关,但此因素对所有算法 的影响相同。
21
算法设计与分析>算法概述
令 n: 问题规模 I: 输入数据 A: 算法本身 C: 算法的 复杂性, 则 C=f ( n, I, A ) 将时间复杂性和空间复杂性分别考虑,并用T和S表示. 则有:
T=T(n, I, A)
S=S (n, I, A)
15
> 算法复杂性分析 > 算法概述 算法设计与分析 >算法概述
1.2 算法的复杂性分析
算法的复杂性:指执行算法所消耗或占用的资 源的数量 一个算法所需资源越多,我们就说它的复杂性 越高,反之则低. 空间复杂性
算法的复杂性
时间复杂性
16
算法设计与分析>算法概述
考虑空间复杂性的理由
在多用户系统中运行时,需指明分给该程序 的内存大小; 需预先知道计算机系统是否有足够的内存来 运行该程序; 一个问题可能有若干个不同的内存解决方案 ,从中择取; 用空间复杂性估计一个程序可能解决的问题 的最大规模。
~ 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 的单增函数。
如果存在一个函数 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
将算法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)
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
>算法概述 算法设计与分析 >算后,T是输入变元 i 的函数.
23
> 算法复杂性分析 > 算法概述 算法设计与分析 >算法概述 >复杂性的计量
说明:
我们不可能对规模为n的每一种合法输
入I都计算ei次,因为输入可能是无穷集合,
我们只能对规模为n的问题的某类具有代表
性的合法输入统计相应的ei.
24
3.算法的描述
描述算法的方式一般有三种:自然语言,流程图, 伪代码语言。 伪代码描述介于自然语言与程序 设计语言之间。
13
>算法概述 算法设计与分析 >算法概述
4. 算法结构
任何算法都可由顺序结构、选择结构、循环结构这 三块“积木”通过组合和嵌套表达出来,遵循这种方 法的程序设计,即为结构化程序设计。
算法的定义因看待的角度不同而不同
哲学家:算法是解决一个问题的抽象行为序 列。
码农:算法是一个计算过程,它接受一些输 入,并产生某些输出。 高大上:算法是解决一个精确定义的计算问 题的工具。
核心:算法是解决问题的办法和法则,算法必 须能够让人一步一步照着执行。
6
>算法概述 算法设计与分析 >算法概述
两个矩阵相乘, 表中排序,
n:数组中分量的个数
n:矩阵的维数 n:数组中分量的个数
遍历一棵树,
n:树中节点数
20
算法设计与分析>算法概述
5*5的矩阵相乘与10*10矩阵的矩阵相乘所需时间 空间均不相同; <问题规模不同> 找c在数组A中的位置,c=A(1),与c=A(100),所需时间 显然也不同 <输入数不同> 顺序查找还是折半查找速度也是不一样的. <算法不同>
算法: 是将问题的输入转化为输出的一系列 计算或操作步骤. “算法是任何定义好的计算程式,它取某些值 或值的集合作为输入,并产生某些值或值的集 合作为输出。”
3
>算法概述 算法设计与分析 >算法概述
算法描述举例
例:求两个不全为0的非负整数m, n的最大公约数 gcd(m,n)的欧几里德算法描述: 1.如果n=0,返回m的值作为结果,过程结束; 否则,进入第二步; 2.用n去除m,将余数赋给 r; 3.将n的值赋给m,将r的值赋给n,返回第一步。
4
>算法概述 算法设计与分析 >算法概述
计算机算法与人工算法
例如 求定积分: s= 人工处理步骤为
找出f(x)的源函数F(x)
利用牛-莱公式:s=F(b)-F(a)
计算机算法:计算定积分采用数值积分的方
法,得到一个近似解.
•有些问题没有计算机算法. •有些问题计算机算法与人工算法不同.
5
算法设计与分析>算法概述
算法的特征
1.有穷性
一个算法须在执行有限个运算步后终止,每一步必须 在有限时间内完成.实际应用中,算法的有穷性应该包括 执行时间的合理性. 程序是算法的程序设计语言的具体实现.可不满足性质1. 一个算法面向一个问题,而不是仅仅求解一个问题的实例