2第二章算法效率分析基础.pptx
第二章算法效率分析基础
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
49_算法效率分析基础课件
2023/10/14
3
LingJie/GDUT
第2章
2.1.2 运行时间的度量单位
• 算法时间包括了编译该算法的时间以及运行该 算法的时间。因此衡量算法时间的单位很自然的会 想到用“秒”、“毫秒”等实际的时间单位。这对于算 法的测试者而言是很直观的,但是存在的问题是: 编译算法的时间与编译程序的好坏有关,即使只考 虑算法运行时间,得到的时间也受到了运行该算法 的计算机速度的影响。因此一个算法在某一台计算 机上实现得到的时间对于其他的计算机是没有参考 意义的。
Hale Waihona Puke n log2n nlog2n
n2
n3 2n
n!
10 3.3 102 6.6 103 10 105 17
3.3×10 102 6.6×102 104 1.0×104 106 1.7×106 1010
103 103
3.6×106
106 1.3×1030 3.6×10157
109
1015
2023/10/22
t(n)cg(n) 则称函数t(n)包含在O(g(n)中,记为t(n)∈O(g(n)). 也 称函数 t(n )在n充分大时有上界g(n), 并称 t(n) 的阶不 高于g (n) 的阶.
例如,4nlogn+7 ∈O(nlogn)。
2023/10/22
12
LingJie/GDUT
第2章
2023/10/22
2023/10/14
2
LingJie/GDUT
第2章
2.1.1 输入规模的度量
• 一个显而易见的事实是:大部分算法的执行时间随着
输入量的增加而增大。例如在对一个数组进行排序时, 数组越大,排序需要的时间就越长。因此从逻辑上来 说,算法的效率应该是输入量的函数。
第2 章 算法效率分析
算
分
析
与
复杂性的渐近性(九)
设 计
用Ω评估算法的复杂性,得到的只是该复杂性 的一个下界。这个下界的阶越高,则评估就越 精确,结果就越有价值。对于一个问题和任意 给定的充分大的规模N,下界在该问题的所有 算法或某类算法的复杂性中取,那么它将更有 意义。这时得到的相应下界,我们称之为问题 的下界或某类算法的下界。它常与Ο配合证明 问题的某个特定算法是该问题的最优算法或是 在某算法类中的最优算法。
西南科技大学
算
分
析
与
算法与渐近阶的关系(一)
设 计
设为AN1,,AN2,…log和NA,6,N2它,们N3的,渐2N近,时N间!,复是杂求性解分同别一 间题的6种不同的算法,这六种算法分别在C1 和C2两台计算机上运行,设计算机C2的计算速 度是计算机C1的10倍。在可接受的一段时间内, 设在C1上算法Ai可能求解的问题的规模为N1i, 而在C2上可能求解的问题的规模为N2i,那么, 我们就应该有Ti(N2i)=10Ti(N1i),其中Ti(N)是算 法Ai渐近的时间复杂性,i=1,2,…,6。分别解出 N2i和N1i的关系,可列成下表。
时间。累加起来便是外循环的时间复杂性:
西南科技大学
算
分
析
与
复杂性的渐近性(七)
设 计
记号Ω,定义如下:如果存在正的常数C 和自然数N0,使得当N≥N0时有 f(N)≥Cg(N),则称函数f(N)当N充分大时 下有界,且g(N)是它的一个下界,记为 f(N)=Ω(g(N))。这时我们还说f(N)的阶不 低于g(N)的阶。
西南科技大学
算
分
析
与
表2-1
设 计
算法 A1 A2 A3 A4 A5 A6
第2章 算法分析基础ppt课件
最新课件
7
1)事前分析
• 目的:试图得出关于算法执行特性的一种形式描 述,以“理论上”衡量算法 “好坏”。
• 如何给出反映算法执行特性的描述?
最直接方法:统计算法中各种运算的执行情况:
算法的数量级从本质上反映了一个算法的执行特性。 例:求解同一问题的三个算法分别具有n, n2 , n3数量级。 若n=10,则可能的执行时间将分别是10,100,1000 个 单位时间——与环境因素无关。
最新课件
10
• 计算时间/频率计数的表示函数 通过事前分析给出算法计算时间(频率计数)
的一个函数表示形式,一般记为与输入规模n有关 的函数形式:f(n)
则记作 f(N)=(g,(N))
含义:
• 算法在最好和最坏情况下的计算时间就一个常数因子范 围内而言是相同的。可看作:
既有f(N)=Ω(g(N)),又有f(N)=Ο(g(N))
最新课件
28
最新课件
29
算法分析方法
• 例:顺序搜索算法
template<class Type> int seqSearch(Type *a, int n, Type k) {
最新课件
13
算法的时间复杂性
• (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)
算法设计与分析3第二部分第二章
第二部分第二章 算法效率分析基础
此外,还有一种效率称为摊销效率。有些情 况下,算法的单次运行时间代价很高,而n次 运行的时间明显低于n乘以单次运行的时间, 因此它并不适用于算法的单次运行,而是应用 于算法对于同样数据结构所执行的一系列操作。 在商业中,这种做法是很常见的,如把固定资 产的成本摊销到它能使用年限的每一年中。
第二部分第二章 算法效率分析基础
4.渐进符号的有用特性 定理1:如果t1(n)∈O(g1(n))并且t2(n)∈O(g2(n)), 则 t1(n)+ t2(n)∈O(max(g1(n),g2(n))) 定理2:如果t1(n)∈Ω(g1(n))并且t2(n)∈Ω(g2(n)),则 t1(n)+ t2(n)∈Ω(max(g1(n),g2(n))) 定理3:如果t1(n)∈θ(g1(n))并且t2(n)∈θ(g2(n)),则 t1(n)+ t2(n)∈θ(max(g1(n),g2(n)))
1.3*1030 9.3*10157
1010 1015 1012 1018
第二部分第二章 算法效率分析基础
从表中可以发现: 从表中可以发现 如果我们设计的算法效率可以用对数函数来表 示时,这是相当完美的算法,因为对于任何实 际规模的输入都会瞬间内完成。反之,如果只 能用指数函数或阶乘函数表示时,可以说,一 旦输入规模变大时,你的算法可能在地球消失 之前也不能完成。因此,一个需要指数级操作 次数的算法只能用来解决规模非常小的问题。
主要内容
1、算法效率研究的通用框架 2、三种符号的定义 3、非递归算法效率分析 4、递归算法效率分析 5、斐波那契数列
6、经验分析法 7、算法可视法
第二部分第二章 算法效率分析基础
重点难点
1、重点:算法效率研究的通用框架、三种符 号的含义、非递归算法效率分析、递归算法效 率分析 2、难点:三种符号的定义、非递归算法效率 分析、递归算法效率分析
算法效率分析基础讲义.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 运行时间的度量单位
可以采用秒,分,小时吗?
Chapter2第二章 算法PPT课件
A
a块 b块
B
(2)判别选择结构程序设计
❖首先判别条件,若条件满足,程序执行a 块,否则,执行b块;
❖举例,求a、b两个数中的最大值;
满足满足条件否不满足
max = a;
执行a块 执行b块
Y
b > max?
max = b;
N
成立
不成立
条件成立?
执行a块
执行b块
2-23/32
(3)循环结构程序设计
❖例如:不需要输入任何信息,就可以计算出5 !;(0个输入)
❖例如:如果要计算两个整数的最大公约数, 则需要输入2个整数m,n。(2个输入)
2-10/32
❖4、有1个或多个输出(即算法必须得到结果) 算法的输出:算法得到的结果。算法必须 有结果,没有结果的算法没有意义。(结果 可以是显示在屏幕上的,也可以是将结果 数据传递给程序的其它部分)
❖伪代码是用介于自然语言和计算机语言之 间的文字和符号来描述算法。伪代码不用 图形符号,书写方便,格式紧凑,便于向 计算机语言算法过渡
2-31/32
写在最后
经常不断地学习,你就什么都知道。你知道得越多,你就越有力量 Study Constantly, And You Will Know Everything. The More
后的s4、s5;否则,算法结束。最后得到的p
就是5!的值。
2-8/32
2.3 算法的特性
❖1、有穷性:一个算法应当包含有限的步骤,而 不能是无限的步骤;同时一个算法应当在执行一 定数量的步骤后,算法结束,不能死循环。
❖2、确定性:算法中的每一个步骤都应当是确定 的,而不是含糊的、摸棱两可的。也就是说不应 当产生歧义。特别是算法用自然语言描述时应当 注意这点。
第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 增长较慢,则算法效率更好。 这里,没考虑算法效率与特定输入的关系。诸多算法的效率不仅与规模 有关,且与特定的输入有关。下面以顺序查找算法为例:
算法-第2章-算法效率分析基础(李静)
2.2.2 符号О
定义1 我们把函数t(n)属于O(g(n)) ,记作t(n) ∈ O(g(n)) ; 它的成立条件是:对于所有足够大的n, t(n) 的上界由g(n) 的常数倍数所确定,也就是说,存在大于0的常数c和非负 的整数n0,使得: 对于所有的n≥ n0来说, t(n) ≤c g(n)
cg(n)
思考
• • • • P46 2T P46 4.bT P46 5T P46 6.aT
补充知识
• 渐近分析中函数比较
– f(n)∈ O(g(n)) a b; – f(n)∈ (g(n)) a b; – f(n)∈ (g(n)) a = b; – f(n)∈ o(g(n)) a < b; – f(n)∈ (g(n)) a > b.
• 无论是最差效率分析还是最优效率分析都不能提供一 种必要的信息:在“典型”或者“随机”输入的情况 下, 一个算法会具有什么样的行为。这正是平均效率 试图提供给我们信息。 • 摊销效率: 它并不适用于算法的单次运行,而是应用于 算法对同样数据结构所执行的一系列操作。
2.1.4 算法的最优、最差和平均效率
对于两个连续执行部分组成的算法,应该如何应 用这个特性呢?它意味着该算法的整体效率是由 具有较大的增长次数的部分所决定的,即它的效 率较差的部分.
பைடு நூலகம்
算法分析:加法规则
t(n, m)=t1(n)+t2 (m) ∈O(max (f (n), g (m)))
两个并列循环的例子 void example (float x[ ][ ], int m, int n, int k) { float sum [ ]; for ( int i=0; i<m; i++ ) { //x[][]中各行 sum[i] = 0.0; //数据累加 for ( int j=0; j<n; j++ ) sum[i]+=x[i][j]; } for ( i = 0; i < m; i++ ) //打印各行数据和 cout << “Line ” << i << “ : ” <<sum [i] << endl; } 渐进时间复杂度为O(max (m*n, m))
算法效率分析基础讲解
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时,算法在最坏情况下的效率。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
对于符号Ω和Θ,该定理也成立。
该定理表明:当算法由两个连续执行部分 组成时,该算法的整体效率由具有较大增 长次数的那部分所决定。
© School of Computer Science and Technology, SWUST
12
Analysis and Design of Computer Algorithms
10
Analysis and Design of Computer Algorithms
符号Θ
定义3 对于足够大的n,t(n)的上界和下界由g(n)的常数倍 来确定,即:
c2g(n) ≤ t(n) ≤ c1g(n),c1,c2为常数
记为t(n) ∈ Θ(g(n))
n2+3n+2∈Θ (n2) n(n-1)/2∈Θ (n2) 4n2+5 ∈Θ (n2)
Time is Important
不是所有能计算的都有价值,不是所有有价值的都能被计算 ——阿尔伯特.爱因斯坦
© School of Computer Science and Technology, SWUST
2
教学内容
Analysis and Design of Computer Algorithms
算法分析与设计
Analysis and Design of Computer Algorithms
第二章 算法效率分析基础
杨春明 西南科学技大学计算机学院
Analysis and Design of Computer Algorithms
算法效率分析基础
算法分析是对一个算法需要多少计算时间 和存储空间作定量的分析。
© School of Computer Science and Technology, SWUST
11
Analysis and Design of Computer Algorithms
渐进符号的有用特性
定理 如果t1(n) ∈O(g1(n))并且t2(n) ∈O(g2(n)),则 t1(n)+ t2(n) ∈O(max{(g1(n), g2(n)})
符号Ω
定义2 对于足够大的n,t(n)的下界由g(n)的常数倍来确定, 即:
t(n) ≥ cg(n),c为常数
记为t(n) ∈ Ω(g(n))
n3∈Ω (n2) n(n+1)∈Ω (n2) 4n2+5 ∈Ω (n2)
© School of Computer Science and Technology, SWUST
分析框架——输入规模度量
输入规模度量
算法的时间效率和空间效率都用输入规模的函 数进行度量。
对于所有的算法,对于规模更大的输入都需要 运行更长的时间。
经常使用一个输入规模n为参数的函数来研究 算法的效率。
选择输入规模的合适量度,要受到所讨论算法 的操作细节影响。
© School of Computer Science and Technology, SWUST
利用极限比较增长次数
t(n) ≤ cg(n),c为常数 记为t(n) ∈O(g(n))
n ∈O(n2) 100n+5 ∈O(n2) n(n-1)/2 ∈O(n2)
© School of Computer Science and Technology, SWUST
9
Analysis and Design of Computer Algorithms
•n是该算法的输入规模 •cop是特定计算机上一个算法基本操作的执行时间 •C(n)是该算法需要执行的基本操作的次数
© School of Computer Science and Technology, SWUST
5
Analysis and Design of Computer Algorithms
4
Analysis and Design of Computer Algorithms
分析框架——运行时间的度量单位
运行时间的度量单位
用算法的基本操作(算法中最重要的操作)的执行 次数来度量算法的时间效率。
基本操作通常是算法最内层循环中最费时的操作。 算法运行时间的估计:
T(n) ≈ copC(n)
© School of Computer Science and Technology, SWUST
7
渐进符号
Analysis and Design of Computer Algorithms
算法效率的主Байду номын сангаас指标是基本操作次数的增 长次数。
为了对这些增长次数进行比较和归类,计 算机科学家们使用了3种符号:
分析框架——算法的最优、最差和平均效率
算法的最优、最差和平均效率
最差效率是指在输入规模为n时,算法在最坏情况下 的效率。
最优效率是指在输入规模为n是,算法在最优情况下 的效率。
平均效率是指在“典型”或“随机”输入的情况下, 算法具有的行为(效率)。
摊销效率是指对于同样的数据结构执行多次操作, 然后分摊到每一次上。
分析框架——增长次数
增长次数
小规模输入在运行时间上的差别不足以将高效的算法 和低效的算法区分开来。
一个需要指数级操作次数的算法只能用来解决规模非常小的问题
© School of Computer Science and Technology, SWUST
6
Analysis and Design of Computer Algorithms
O(读“O”):上界 Ω(读”omega”):下界 Θ(读”theta”):近似
© School of Computer Science and Technology, SWUST
8
Analysis and Design of Computer Algorithms
符号O
定义1 对于足够大的n,t(n)的上界由g(n)的常数倍来确定, 即:
算法效率分析框架 算法效率的表示符号 非递归算法的效率分析 递归算法的效率分析 算法的经验分析 要求
掌握算法中近似时间的表示、非递归、递归算法 的效率分析方法,了解算法的经验分析
© School of Computer Science and Technology, SWUST
3
Analysis and Design of Computer Algorithms