算法效率分析基础概要PPT课件
第二章算法效率分析基础
414
基本的效率类型
•常量(1)、对数(logn)、线性 (n)、nlogn、平方(n2)、立 方(n3)、指数(2n)、阶乘(n!)
515
非递归算法的数学分析
Example 1:讨论下面这个算法(从n个元 素中查找最大元素问题)的效率。
•算法 MaxElement(A[0..n-1]
•//求给定数组中的最大元素 •//输入:实数数组A[0..n-1] •//输出:A中的最大元素
•maxval A[0] •for i 1 to n-1 do • if A[i] > maxval • maxval A[i] •return maxval
• 考虑: 1. 循环中的操作有比较和赋值,取
哪一个作为基本操作? 2. 输入规模是多少?
•基本操作为:比较运算 •输入规模就是数组长度n •算法的效率为:
记为t(n) ∈ Θ(g(n))
•n2+3n+2∈Θ (n2) •n(n-1)/2∈Θ (n2) •4n2+5 ∈Θ (n2)
212
渐进符号的有用特性
定理 如果t1(n) ∈O(g1(n))并且t2(n) ∈O(g2(n)),则 t1(n)+ t2(n) ∈O(max{(g1(n), g2(n)})
99
符号O
定义1 对于足够大的n,t(n)的上界由g(n)的常数倍来确定 ,即:
•t(n) ≤ cg(n),c为常数 记为t(n) ∈O(g(n))
•n ∈O(n2) •100n+5 ∈O(n2) •n(n-1)/2 ∈O(n2)
010
符号Ω
定义2 对于足够大的n,t(n)的下界由g(n)的常数倍来确定 ,即:
818
算法设计与分析-第2章-算法分析基础PPT课件
2k
1 5(
n 2k 1
)2
L 2×5´( 2n)2
5n2
T (n)
7n
k 1 5
i0
n 2i
2
7n
5n2 (2
2
1
k 1
)
10 n2 3n 10 n2 O (n2 )
• 例: Merge-sort排序算法的复杂性递归方程为
T(n)=(1)
if n=1
T(n)=2T(n/2)+(n) if n>1
T(n) = ?
.
27
2.5 递归算法的分析
三、递推关系式的求解-- 扩展递归技术
步骤: 循环地展开递推关系式, 把递推关系式转化为求和表达式, 然后可使用求和技术解之。
能解决输入规模为多大的问题?
设在新机器上用 t 秒时间能解决输入规模为 N 的问题,则
由于此时
f (N)
N,2 新机器的运行速度/每语句为: t新
t0 , 64
代入关系式
f (N ) *t新 t ,得
N2
*
t0 64
t
n2
* t0
解,得
N 8n
思考:以上说明了什么问题?
.
14
2.2 算法的渐进分析
.
28
2.5 递归算法的分析
求以下递推式的时间复杂性
7
T (n)
2T (n
2)
5n2
解:设 n=2k
T (n) 2T (n 2) 5n2
n1 n>1
2(2T (n 4)( n 4)2 ) 5(n 2)2 ) 5n2
2k T (1)
间就一个常因子范围内而言是相同的。
算法效率分析基础讲义.pptx
较大的增长次数的部分所决定的,即它的效率较差
的部分.
24
2.2.6 利用极限比较增长次数
虽然符号O, Ω和Θ的正式定义对于证明它们的抽
象性质是不可缺少的,但我们很少直接用它们来比
较两个特定函数的增长次数。有一种较为简便的比
较方法,它是基于对所计论的两个函数的比率求极
限。有3种极限情况会发生:
0
n
lim
• SequentialSearch(A[0..n-1], x)
//输入:数组A[0..n-1],和查找关键字x //输出:返回第一个匹配x 的元素下标 //如果没有匹配的,返回-1
• i=0;
什么是基本运算
• while i<n and A[i]≠ x do i=i+1;
• If i<n then return i
23
2.2.5渐进符号的有用特性
定理 如果t1(n) ∈O(g1(n)) 并且t2(n) ∈O(g2(n)), 则
t1(n)+ t2(n)∈O(max{g1(n), g2(n)}) (对于Ω和Θ符号, 类似的断言也为真)
对于两个连续执行部分组成的算法,应该如何应用
这个特性呢?它意味着该算法的整体效率是由具有
• 算法的时间效率和空间效率都用输入规模的函数进 行度量。
• 我们用算法基本操作的执行次数来度量算时间效率。 通过计算算法消耗的额外存储单元的数量来度量空 间效率。
• 在输入规模相同的情况下,有些算法的效率会的显 著差异。对于这样的算法,我们需要区分最差效率, 平均效率和最优效率。
• 本框架主要关心,当算法的输入规模趋向于无限大
2.1.2 运行时间的度量单位
可以采用秒,分,小时吗?
算法分析基础ppt课件
精品
14
1. 3 二分搜索及其时间复杂度
• 线性搜索 及其算法分析 • 二分搜索
同数据结构,略。但要求作为例子或问题求解。
2020/6/13
精品
15
比较次数分析
• While中,j次循环时剩余元素数目 Floor(n/2j-1)
• 循环停止条件:找到x,或 当前查找范 围的数组长度为1。
• 最大搜索次数:满足Floor(n/2j-1)=1 时的j 值
2020/6/13
精品
7
1.2 历史背景
20世纪,早期, 30年代 能否用有效的过程来求解问题受到关注
问题分类为:可解、不可解(存在有效过程来求解问题) 计算模型:存在模型,用此模型能建立一求解某问题的算法,--入- -可解的类 模型列举:歌德尔的递归函数,Church的Lamda演算,Post的波斯特机, Turing机。 Church论断:所有4个模型等效。如果一个问题在某一模型上可解,那么 在其他模型上都是可解的。=>“几乎所有”问题都是不可解的。
2.算法的时间复杂性 (1)最坏情况下的时间复杂性
Tmax(n) = max{ T(I) | size(I)=n } (2)最好情况下的时间复杂性
Tmin(n) = min{ T(I) | size(I)=n } (3)平均情况下的时间复杂性
Tavg(n) = p(I)T(I) siz(eI)n
其中I是问题的规模为n的实例,p(I)是实 例I出现的
➢每个领域: 依赖 有效算法设计 ➢运行时间: 由例子到理论 ➢时间是衡量算法有效性的最好测度
➢算法的几个方面:
➢输入 ➢有限指令集 ➢输出 (存在? Y/N)
2020/6/13
第2章算法效率分析基础
3. 若查找键位于表尾(最末元素)或不存在,该算法将比较 n 次。最差
4. 若查找键位于表中间,该算法比较次数不固定。平均效率
------------------------------------------------------------------------------------------------
T(n)C(n) 时间耗费即为基本操作数,为输入规模n的函数。
n的一次、二次函数分别称线性、二次增长率。2n 称指数增长率。
8
❖增长次数(增长率)
基本操作数(时间耗费)是输入规模 n 的函数,记为T(n) 。T(n) 随着 n 次数的增加而增加。函数值T(n) 增加快慢,决定于这个增长函数特性; 也就是说,线性增长函数的函数值增加较慢,二次增长函数增加较快, 指数增长函数最快。因此,我们最关心的就是函数的增长率,它决定了 算法的时间耗费(效率)。若输入规模 n 很小,无论是高效的算法还是 低效的算法,时间耗费差距不明显,所以算法分析针对大规模输入。
通常,具备这种运行特性的算法是在一定程度上的具有“智能”的算法, 通过“学习”获得“知识”累积,再运用知识库中的有关知识对算法下
次 如何执行提供指导,从而提高以后运行的效率。一个例子:汉字拼音 输入法中的动态词频调整算法。它统计不同用户对某些字词的使用率 (学习积累过程),来动态调整这些字词下次出现的先后顺序,高频 先现,达到减少用户翻阅时间的目的,提高了该算法的执行效率。 ---------------------------------------------------------------------------------------------后续章节中,除非专门说明,都将最差情况下时间耗费的极限作为算法14
第2章 算法效率分析基础
一个显而易见的事实:几乎所有的算法,对于更大规模输入都需要运行 更长的时间(即算法耗费的时间随着输入规模的增大而增加) 。例如: 1. 更大的数组排序需要花费更多的运行时间; 2. 更大的矩阵相乘需要花费更多的运算时间。 因此,采用一个以算法输入规模 n 为参数的函数,来研究算法效率就是 非常合乎逻辑的。 输入规模的选择问题: 在大多数情况下,选择这样一个参数是非常直接的。例如,对于排序、 查找以及其他大多数与列表相关的问题来讲,这个参数就是列表长度; 对于 n 次多项式求值问题,这个参数是多项式次数或者系数个数。 4
5
❖运行时间的度量:
接下来考虑运行时间的度量问题。我们为何不选择时间的标准度量单位 (秒、毫秒等)来度量算法的运行时间呢?其理由如下: 1. 它依赖于特定计算机的运行速度; 2. 它依赖于实现算法的代码质量;(程序员编程的水平问题) 3. 它依赖于编译器的好坏;(编译成机器码的质量,即指令条数) 4. 它还依赖于一些其他问题如操作系统的调度策略等。 鉴于此,希望找到一个不依赖于上述因素的时间度量。 问:是否统计算法的每步操作执行次数来作为算法的时间效率度量呢? 答:无此必要且较困难。一个算法中有许多操作,决定算法时间效率的 是那些很耗费时间的操作步,因此只需关心这些操作即可评价一个算法 时间效率,这些最关键的操作步称为基本操作,它们对算法执行时间的 占用最大(基本操作即算法中最费时的操作)。所以,用基本操作执行 次数来作为时间效率的度量。
前述已知,我们用输入规模 n 的函数 T(n) 来度量算法的效率。若T(n) 随 n 增长快,则算法效率较差;若T(n) 随 n 增长较慢,则算法效率更好。 这里,没考虑算法效率与特定输入的关系。诸多算法的效率不仅与规模 有关,且与特定的输入有关。下面以顺序查找算法为例:
算法效率分析基础讲解
15
2.2.2 符号О
定义1 把函数t(n)包含在O(g(n)) 中记作t(n) ∈ O(g(n))。 称 t(n) 的阶不高于g (n) 的阶. 成立条件:对于所有足够大的n, t(n) 的上界由g(n)的 常数倍数所确定。即,存在大于0的常数c和非负的 整数n0,使得:对于所有的n≥ n0来说, t(n) ≤c g(n)
• 研究实验告诉我们,对于大多数问题来说,我们在速度 上能够取得的进展要远大于在空间上的进展,
• 所以我们把主要精力集中在时间效率上。
2
2.1 分析框架
如何评价时间效率? 2.1.1 输入规模的度量
一个事实:问题规模越大,算法运行时间越长。 将算法输入规模n为时间效率的参数。 选择哪个(些)参数作为输入规模?
然而,无论是最差效率分析还是最优效率分析 都不能提供一种必要的信息:在“典型”或者 “随机”输入的情况下, 一个算法会具有什么 样的行为。这正是平均效率试图提供给我们信息。
11
2.1.5 分析框架概要
• 算法的时间效率和空间效率都用输入规模的函数进 行度量。 • 我们用算法基本操作的执行次数来度量算时间效率。 通过计算算法消耗的额外存储单元的数量来度量空 间效率。 • 在输入规模相同的情况下,有些算法的效率会的显 著差异。对于这样的算法,我们需要区分最差效率, 平均效率和最优效率。 • 本框架主要关心,当算法的输入规模趋向于无限大 的时候,其运行时间(消耗的额外空间)函数的增
9
2.1.4 算法的最优、最差和平均效率
一个算法的最差效率是指当输入规模为n时,算 法的最坏情况下的效率。这时,相对于其他规 模为n的输入,该算法的运行时间最长。 为什么要考虑最坏效率? 提供了对任何规模为n的实例,算法运行的上界 Cworst(n)
算法效率分析基础
第2章算法效率分析基础算法分析框架介绍算法效率的符号表示非递归算法分析递归算法分析什么是算法分析?算法分析就是对算法利用两种资源的效率进行定量分析: 运行时间and 存储空间.Time efficiency:how fast an algorithm runs.Space efficiency:the space an algorithm requires.•一般来说, 算法的运行时间会随着输入规模的增长而增长•算法分析更关注输入规模和效率变化之间的关系22.1 算法分析框架输入规模度量运行时间度量增长次数(算法效率函数)算法的最差、最优和平均效率32.1.1 输入规模度量算法的时间效率和空间效率都用输入规模n为参数的函数进行度量N阶矩阵的乘积对于所有的算法,对于规模更大的输入都需要运行更长的时间。
选择输入规模的合适量度,要受到所讨论算法的操作细节影响。
拼写检查42.1.2 运行时间的度量单位我们可以使用时间的标准度量单位来度量算法程序的运行时间么?依赖于计算机的运行速度和程序质量统计算法每一步操作执行的次数?困难且无必要统计算法的基本操作执行的次数.基本操作:操作中对整个运行时间贡献程度最大的操作通常,基本操作常常是算法最内层的循环中最费时的操作.5算法运行时间估计672.1.3 增长次数要点:•仅仅考虑公式中最主要的项(leading term )•忽略乘法常量.Exponential-growth functions小规模输入在运行时间上的差别不足以将高效的算法和低效的算法区分开来2.1.4 算法的最优最差和平均效率算法效率不仅取决于输入规模n,而且某些算法受到特定输入细节的影响举例: 顺序查找–Problem:给定n个元素和一个查找键K,如果存在,查找一个与键值k 相等的元素.–Algorithm:检查列表中的连续元素,直到发现匹配查找键的元素(successful search)或到达列表的终点(unsuccessful search)给定顺序查找问题的输入规模为n,什么样的输入会导致最长的运行时间?需要多少次键值比较?8顺序查找算法ALGORITHM SequentialSearch(A[0..n-1], K)//Searches for a given value in a given array by sequential search//Input: An array A[0..n-1] and a search key K//Output: Returns the index of the first element of A that matches K or –1 if there are no matching elementsi Å0while i < n and A[i] ‡K doi Åi + 1if i < n //A[I] = Kreturn ielsereturn -192.1.5 最差、最好和平均效率最差效率是指在输入规模为n时,算法在最坏情况下的效率。
算法效率分析基础概要PPT课件
while n 1 do count count 1
n n / 2
return count
基本操作为:n>1;
执行次数为:lo2gn1
2021/1/29
31
-
2.4 递归算法的数学分析
例1、n!的递归算法(n为正整数) 。
• 一般的方法:
n! = 1*2*…*(n-1)*n
//s1,s2,s3,s4为单一赋值语句
分析:内循环体只需O(1)时间,故
i
i
内循环共需 O(1) O(1) O(i)
j 1
j1
外循环共需 nO i) (On( i) O n (n ( 1 )) O (2 n )
i 1
i 1
2
2021/1/29
21
-
4、常见的渐进时间效率类型 第2章
O(1)< O(logn)< O(n)< O(nlogn)< O(n2)< O(n3) <
Number of times basic operation is
executed
其中: cop为特定计算机上一个基本操作的执行时间,是常量。
2021/1/29
6
-
第2章
2.1.3 增长次数
• 小规模的输入在运行时间上不能区分高效的算法
与低效的算法,要考虑对于大规模输入时执行次 数的增长次数。
n log2n
2021/1/29
25
-
第2章
2.3.1 例子-求数组的最大元素
• 问题:从n个元素的数组中查找最大值元素. • 算法伪代码:
MaxElement(A[0..n-1]) maxval:=A[0] for i=1 to n-1 do if A[i]>maxval maxval=A[i] return maxval
算法效率分析基础概要
2算法分析就是对算法利用两种资源的效率进行定量分析 : 运行时间 and 存储空间 .Time efficiency:how fast an algorithm runs.Space efficiency:the space an algorithm requires.• 一般来说 , 算法的运行时间会随着输入规模的增长而增长• 算法分析更关注输入规模和效率变化之间的关系3 输入规模度量运行时间度量增长次数 (算法效率函数算法的最差、最优和平均效率4 算法的时间效率和空间效率都用输入规模 n 为参数的函数进行度量N 阶矩阵的乘积对于所有的算法,对于规模更大的输入都需要运行更长的时间。
选择输入规模的合适量度,要受到所讨论算法的操作细节影响。
拼写检查5 我们可以使用时间的标准度量单位来度量算法程序的运行时间么? 依赖于计算机的运行速度和程序质量统计算法每一步操作执行的次数?困难且无必要统计算法的基本操作执行的次数 .基本操作:操作中对整个运行时间贡献程度最大的操作通常,基本操作常常是算法最内层的循环中最费时的操作 .69 ALGORITHM SequentialSearch(A[0..n-1], K//Searches for a given value in a given array by sequential search//Input: An array A[0..n-1] and a search key K//Output: Returns the index of the first element of A that matches K or –1 if there are no matching elementsi Å0while i < n and A[i] ‡ K doi Åi + 1if i < n //A[I] = Kreturn ielsereturn -1最差效率是指在输入规模为 n 时,算法在最坏情况下的效率。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2021/3/14
4
2021
第2章
• 统计算法每一步操作的执行次数——不可行。 • 统计算法中最重要的操作—基本操作的执行次数。
排序的基本操作:比较 矩阵乘法的基本操作:乘法 多项式求值的基本操作:乘法
• 执行次数C(n)是输入规模n的函数,算法运行时间
T(n)是执行次数的函数:
2021/3/14
2021/3/14
9
2021
第2章
2.1 小结: 算法分析框架的要点
• 算法的时间效率与空间效率都是算法输入量的函数。 • 时间效率的衡量通过算法基本操作执行次数的估计进行,
而空间效率的衡量是通过算法运行所占用额外的存储器资 源量进行的。
• 有些算法时空复杂度在相同输入量下可能由于具体输入值
的不同而不同,因此需要考虑最好情况下、最坏情况下以 及一般情况下的算法时间复杂度。
2021/3/14
11
2021
第2章
1、三个渐进符号的定义
O的定义:
存在常数c>0和非负整数n0,使得对所有nn0, 有
t(n)cg(n) 则称函数t(n)包含在O(g(n)中,记为t(n)∈O(g(n)). 也 称函数 t(n )在n充分大时有上界g(n), 并称 t(n) 的阶不 高于g (n) 的阶.
• 算法的分析框架关注的内容是当输入量很大,趋向无穷的
时候,算法的时间复杂度是如何增长,即使用算法的时间 复杂度的渐进表示法。
2021/3/14
10
2021
第2章
2.2 渐进符号和基本效率类型
三个渐进符号:
常用函数符号: t(n) : 一个算法运行的时间 C(n): 基本操作次数 g(n): 用来比较的函数
第2章
第2章 算法效率分析基础
• 主要内容:
2.1 分析框架 2.2 渐进符号和基本效率类型 2.3 非递归算法的数学分析 2.4 递归算法的数学分析
2021/3/14
1
2021
第2章
2.1 算法分析的基本框架
• 一般而言,对于一个算法的分析主要是对算法
效率的分析,包括了衡量其运行速度的时间效 率以及衡量算法运行需要占用空间大小的空间 效率。对于早期的计算机来说,时间与空间都 是极其珍贵的资源。半个世纪以来,硬件技术 的发展大大提高了计算机的存储容量,使得存 储容量的局限性对于算法的影响大大降低了。 但时间效率并没有得到相同程度的提高。因此, 算法的时间效率是算法分析中的关键部分。
Number of times basic operation is
executed
其中: cop为特定计算机上一个基本操作的执行时间,是常量。
2021/3/14
6
2021
第2章
2.1.3 增长次数
• 小规模的输入在运行时间上不能区分高效的算法
与低效的算法,要考虑对于大规模输入时执行次 数的增长次数。
例如:2n2+11n-10 ∈ Ω(n2), n3∈ Ω(n2)
2021/3/14
14
2021
第2章
2021/3/14
15
2021
第2章
的定义:
存在大于0的常数c1、c2和非负整数n0,使得对 所有nn0,有
n log2n
10 3.3 102 6.6 103 10 105 17
nlog2n
n2
3.3×10 102 6.6×102 104 1.0×104 106 1.7×106 1010
n3 2n
n!
103 106 109 1015
103 1.3×1030
3.6×106 3.6×10157
2021/3/14
5
2021
第2章
Basic operation: the operation that contributes most towards the running time of the algorithm.
input size
T(n) ≈ copC(n)
running time execution time for basic operation
7
2021
第2章
2.1.4 算法最优、最差和平均效率
• 算法最差效率:当输入规模为n时,算法在最坏情 况
下的效率。
• 算法最优效率:当输入规模为n时,算法在最理想情况下
的效率。
• 算法平均效率:在“随机”或“典型”输入时(规模仍为
n),算法的效率。
• 平均效率的研究方法:一般将规模为n的实例分为几种类
• 如果算法是与数字特性相关的,其输入规模的度量应
当引起注意。例如:检查给定的整数是否为质数,倾 向于度量数字n的二进制表示中的比特数。
2021/3/14
3
2021
第2章
2.1.2 运行时间的度量单位
• 算法时间包括了编译该算法的时间以及运行该
算法的时间。因此衡量算法时间的单位很自然的会 想到用“秒”、“毫秒”等实际的时间单位。这对 于算法的测试者而言是很直观的,但是存在的问题 是:编译算法的时间与编译程序的好坏有关,即使 只考虑算法运行时间,得到的时间也受到了运行该 算法的计算机速度的影响。因此一个算法在某一台 计算机上实现得到的时间对于其他的计算机是没有 参考意义的。
2021/3/14
2
2021
第2章
2.1.1 输入规模的度量
• 一个显而易见的事实是:大部分算法的执行时间随着
输入量的增加而增大。例如在对一个数组进行排序时, 数组越大,排序需要的时间就越长。因此从逻辑上来 说,算法的效率应该是输入量的函数。
• 选择哪个参数表示输入规模是有差异的。如计算两个n
阶矩阵的乘积,选择矩阵阶数和矩阵元素个数作为输 入规模求的的算法效率是有差别的。 选择输入规模的 合适度量受算法的操作细节影响,如拼写检查算法可 以使用字符或词的数量作为输入规模。
例如,4nlogn+7 ∈O(nlogn)。
2021/3/14
12
2021
第2章
2021/3/14
13
2021
第2章
Ω的定义:
存在常数c>0和非负整数n0,使得对所有nn0, 有
t(n) cg(n) 则称函数t(n)包含在Ω(g(n)中,记为t(n)∈Ω的概率分布,推导出基本操作的平均 次数。
2021/3/14
8
2021
第2章
2.1.4 顺序查找的效率
• 最差效率:Cwor(ns)tn
• 最优效率:Cbest (n) 1
• 平均效率:
Cavg(n)
1
p n
2
p n
i p n
n npn(1p)
p12 i nn(1p)
n
p(n1) n(1p) 2