算法设计与分析-第2章-算法分析基础
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2.1 算法分析的基本概念
三、算法分析的两个阶段 1、事前分析—求出该算法的一个时间限界函数。 2、事后测试—收集此算法的执行时间和实际占用空间的 统计资料。
2.2 算法的渐进分析
一、相关概念 算法的渐进分析
是一种事前估算的方法,是指忽略具体机器、编程语言和编译 器的影响,只关注在输入规模增大时算法运行时间的增长趋势。 渐进时间复杂性 当问题的规模n趋向无穷大时,影响算法效率的重要因素是T(n) 的数量级,而其他因素仅是使时间复杂度相差常数倍,因此,可 以用T(n)的数量级(阶)评价算法。时间复杂度T(n)的数量级(阶) 称为渐进时间复杂性。 确定一个算法时间的数量级是十分重要的,它在本质上反映了 一个算法所需要的计算时间。
大O符号描述增长率的上限,表示T(n)的增长最多像f(n)增
长的那样快 当说一个算法具有O(f(n))的计算时间时,指的是如果此算法 用n值不变的同一类数据在某台机器上运行时,所用的时间 总是小于f(n)的一个常数倍。所以f(n)是计算时间T(n)的一个
上界函数,T(n)的数量级就是f(n)
int Find(int A[ ], int n) { for (i=0; i<n; i++) if (A[i]= =k) break; return i; }
2.3 最好、最坏和平均情况
(1)最坏情况下的时间复杂性
Tmax(n) = max{ T(I) | size(I)=n }
(2)最好情况下的时间复杂性
2.5 递归算法的分析
一、递推关系式 : 用于表示第 n 项与它前一项或几项关系的式子。
T(1) = 1 (n=1) T(n) = 2*T(n-1)+1 (n>1)
void Hanoi(int n,char A,char B,char C) { if (n==1) printf (A—>C); else { hanoi(n-1,A,C,B); printf(A—>C); hanoi(n-1,B,A,C); } }
1 n+1 n(n+1) n2 1
T(n)=O(f(n))=O(2n2+2n+3)=O(n2)
2.4 非递归算法的分析
非递归算法分析的一般步骤
1. 决定用哪个(或哪些)参数作为算法问题规模的度量 可以从问题的描述中得到。 2. 找出算法中的基本语句 通常是最内层循环的循环体。 3. 检查基本语句的执行次数是否只依赖于问题规模 如果基本语句的执行次数还依赖于其他一些特性,则需要分别 研究最好情况、最坏情况和平均情况的效率。 4. 建立基本语句执行次数的求和表达式 计算基本语句执行的次数,建立一个代表算法运行时间的求和 表达式。 5. 用渐进符号表示这个求和表达式 计算基本语句执行次数的数量级,用大O或Ω或Θ 符号描述算 法增长率的上限。
2.5 递归算法的分析
二、建立递推关系式(关键) 对递归算法时间复杂性的分析,关键是根据递归过程,建立递 推关系式,然后求解这个递推关系式。
• 例: Hanoi问题
T(1) = 1 (n=1) T(n) = 2*T(n-1)+1 (n>1) if n=1 if n>1
• 例: Merge-sort排序算法的复杂性递归方程为
解:设 n=2k
n 1 n >1
T (n) 2T ( n 2) 5n2
2( 2T ( n 4) 5( n 2)2 ) 5n2
2.2 算法的渐进分析
语句频度:语句执行的次数 算法的语句频度f(n): f(n)=∑( 语句(i)的执行次数) 算法中基本操作重复执行的次数之和
算法的执行时间:是所有语句的执行时间之和 T(n)=∑( 语句(i)的执行次数×语句的执行时间 ) (假设每条语句执行的时间相等) 渐进时间复杂度表示: 随着问题规模 n 的增长,算法执行时间的增长率和算法的语句频 度f(n)的增长率相同,则可记作: T(n)= O(f(n)) 称 T(n)为算法的(渐近)时间复杂度
Tavg (n)
size ( I ) n
1 1 1 p( I )T ( I ) 1 2 3 n n n
1 n n
1 n (n 1) i =O(n) n i 1 2
2.3 最好、最坏和平均情况
结论:如果问题规模相同,时间代价与输入数据有 关,则需要分析最好情况、最坏情况、平均情况。
T(n)=(1) T(n)=2T(n/2)+(n) T(n) = ?
2.5 递归算法的分析
三、递推关系式的求解-- 扩展递归技术
步骤: 循环地展开递推关系式, 把递推关系式转化为求和表达式, 然后可使用求和技术解之。
2.5 递归算法的分析
求以下递推式的时间复杂性
7 T ( n) 2 2 T ( n 2 ) 5 n
典型的增长阶: O(1), O(lgn), O(n), O(nlgn), O(n2), O(n3), O(2n), O(n!)
2.2 算法的渐进分析
算术运算:
O(f(n))+O(g(n)) = O(max{f(n),g(n)}) ; O(f(m))+O(g(n)) = O(f(m)+g(n)) ; O(f(n))*O(g(n)) = O(f(n)*g(n)) ; O(cf(n)) = O(f(n)) ; 若g(n)= O(f(n)) 则 O(f(n))+O(g(n)) = O(f(n)) 。
| a1 | n | a0 | | a0 | / n m )n m
| a0 |)n m
取c=|am|+….+|a0| 定理得证.
事实上,只要将n0取得足够大,可以证明只要c是比|am|大的任意
一个常数,此定理都成立。
此定理表明,变量n的固定阶数为m的任一多项式,与此多项式的 最高阶nm同阶.
2.2 算法的渐进分析
二、表示方法 1. 大O符号--运行时间的上界 定义1.1 若存在两个正的常数c和n0,对于任意n≥n0,都 有T(n)≤c×f(n),则称T(n)=O(f(n))
执 行 次 数 c×f(n) T(n)
n0 之 前 的 情况无关 紧要
n0
问题规模n
2.2 算法的渐进分析
2.2 算法的渐进分析
3. Θ 符号---运行时间的准确界
定义1.3 若存在三个正的常数c1、c2和n0,对于任意n≥n0都 有c1×f(n)≥T(n)≥c2×f(n),则称T(n)=Θ (f(n))
执 行 次 数 c1×f(n) T(n) c2×f(n)
n0 之前的 情况无关 紧要
n0
问题规模n
2.2 算法的渐进分析
示例
2Βιβλιοθήκη Baidu2 算法的渐进分析
2.2 算法的渐进分析
2.2 算法的渐进分析
例.1)假设某算法在输入规模是 n 时为 f (n) 3*2n .在某台计算机上
实现并完成该算法的时间是 t 秒. 现有另一台计算机,其运行速度为第 一台的64倍, 那么,在这台计算机上用同一算法在 t 秒内能解决规模为 多大的问题?
Tmin(n) = min{ T(I) | size(I)=n }
(3)平均情况下的时间复杂性
Tavg(n) =
size ( I ) n
p(I )T (I )
其中I是问题的规模为n的实例,p(I)是实例I出现的概率。
2.3 最好、最坏和平均情况
(1)Tmax(n) = max{ T(I) | size(I)=n }=O(n) (2)Tmin(n) = min{ T(I) | size(I)=n }=O(1) (3)在平均情况下,假设: 在数组的每个位置i ( 0 i < n )搜索成功的概率相同,均为 1/n。
执 行 次 数 T(n) c×g(n)
n0 之 前 的 情况无关 紧要 n0
问题规模n
2.2 算法的渐进分析
大Ω 符号用来描述增长率的下界 也就是说, T(n)=Ω (g(n))是当输入规模为n时,算法消耗时间 的最小值。 与大O符号对称,这个下限的阶越高,结果就越有价值。 问题的计算时间下界为(f(n)),则计算时间复杂性为O(f(n))的 算法是最优算法。 例如:计算时间复杂性为O(nlogn)的排序算法是最优算法。 (堆排序算法就是最优算法)。
t0 64
2.2 算法的渐进分析
2)若上述算法改进后,新算法 f (n) n 2 , 则在新机器上用 t 秒时间 能解决输入规模为多大的问题? 设在新机器上用 t 秒时间能解决输入规模为 N 的问题,则 由于此时 f ( N ) N,新机器的运行速度/每语句为: t新
2
t0 , 64
代入关系式
最好情况:出现概率较大时分析
最差情况:实时系统 平均情况:已知输入数据是如何分布的, 通常假设等概率分布
2.4 非递归算法的分析
算法分类——非递归算法、递归算法(一种分类方式) 1. 建立一个代表算法运行时间的求和表达式; 2. 用渐进符号表示这个求和表达式。
void add() { sum=0; for(i=1;i<=n;i++) for(j=1;j<=n;j++) sum=sum+i*j; printf(“%d”,sum); }
一个算法的T(n)=Θ (f(n))意味着该算法在最好和最坏情况下的计算时
间就一个常因子范围内而言是相同的。
2.2 算法的渐进分析
例: T(n)=5n2+8n+1
当n≥1时,5n2+8n+1≤5n2+8n+n
=5n2+9n≤5n2+9n2≤14n2=O(n2) 当n≥1时,5n2+8n+1≥5n2=Ω(n2) ∴ 当n≥1时,14n2≥5n2+8n+1≥5n2 则:5n2+8n+1=Θ(n2) 定理1.2 若T(n)=amnm +am-1nm-1 + … +a1n+a0(am>0), 则有T(n)=O(nm)且T(n)=Ω(n m),因此,有 T(n)=Θ (n m)。
规模 语句频度
f (n) 3*2n
运行时间/每语句
总时间
n
t0
t
关系式: f (n)* t0 t 算法语句频度*运行速度(时间/每语句)=运行总时间
f (m) 3*2m 解:设在新机器上 t 秒内能解决规模为 m 的问题,
由于新机器运行速度提高64倍,则运行时间/每语句变为 t新
f (m)* t新 t ,得 由关系式 f (n)* t0 t, t 3 * 2n * t0 t 3 * 2m * 0 t 64 解,得 m n 6.
第2章 算法分析基础
2.1 2.2 2.3 2.4 算法分析的基本概念 算法的渐进分析 最好、最坏和平均情况 非递归算法的分析
2.5
递归算法的分析
2.1 算法分析的基本概念
一、算法分析(Algorithm Analysis):对算法所需要的两种计
算机资源——时间和空间进行估算 时间复杂性(Time Complexity) 空间复杂性(Space Complexity) 二、算法分析的目的: 设计算法——设计出复杂性尽可能低的算法 选择算法——在多种算法中选择其中复杂性最低者
f ( N )* t新 t
2
,得
t0 N * t n2 * t0 64
解,得
N 8n
思考:以上说明了什么问题?
2.2 算法的渐进分析
2. 大Ω符号--运行时间的下界
定义1.2 若存在两个正的常数c和n0,对于任意 n≥n0,都有T(n)≥c×g(n),则称T(n)=Ω(g(n))
2.2 算法的渐进分析
例 T(n)=3n-1, 求Θ(?) 【解答】 当n≥1时,3n-1≤3n=O(n) 当n≥1时,3n-1≥3n-n=2n=Ω(n)
当n≥1时,3n≥3n-1≥2n,则3n-1=Θ(n)
2.3 最好、最坏和平均情况
例: 在一维整型数组A[n]中顺序查找与给定值k相 等的元素(假设该数组中有且仅有一个元素值为k)
若T(n)是关于n的k阶多项式,那么T(n)=O(nk)
2.2 算法的渐进分析
定理1.1 有 证明:取n0=1,当n>=n0时,利用T(n)的定义和一个简单的不等式,
若T(n)=amnm+…+ a1n+ a0是一个m次多项式,则T(n)=O(nm)。
| T (n) || am | n m (| am | | am 1 | / n (| am |