算法设计与分析算法分析基础PPT课件

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
能解决输入规模为多大的问题?
设在新机器上用 t 秒时间能解决输入规模为 N 的问题,则
由于此时
f (N)
N,2 新机器的运行速度/每语句为: t新
t0 , 64
代入关系式
f (N ) *t新 t ,得
N2
*
t0 64
t
n2
* t0
解,得
N 8n
思考:以上说明了什么问题?
2.2 算法的渐进分析
2. 大Ω符号--运行时间的下界
定义1.2 若存在两个正的常数c和n0,对于任意 n≥n0,都有T(n)≥c×g(n),则称T(n)=Ω(g(n))

T(n)


c×g(n)

n情0
之 况
前 无
的 关
紧要
n0
问题规模n
2.2 算法的渐进分析
➢ 大Ω符号用来描述增长率的下界
➢ 也就是说, T(n)=Ω(g(n))是当输入规模为n时,算法消耗时间
➢若g(n)= O(f(n)) 则 O(f(n))+O(g(n)) = O(f(n)) 。
➢若T(n)是关于n的k阶多项式,那么T(n)=O(nk)
2.2 算法的渐进分析
定理1.1 若T(n)=amnm+…+ a1n+ a0是一个m次多项式,则 T(n证)=明O:(n取mn)。0=1,当n>=n0时,利用T(n)的定义和一个简单的不等
渐进时间复杂度表示: 随着问题规模 n 的增长,算法执行时间的增长率和算法的语句频
度f(n)的增长率相同,则可记作: T(n)= O(f(n))
称 T(n)为算法的(渐近)时间复杂度
2.2 算法的渐进分析
二、表示方法 1. 大O符号--运行时间的上界
定义1.1 若存在两个正的常数c和n0,对于任意n≥n0,都 有T(n)≤c×f(n),则称T(n)=O(f(n))
二、算法分析的目的: ➢ 设计算法——设计出复杂性尽可能低的算法 ➢ 选择算法——在多种算法中选择其中复杂性最低者
2.1 算法分析的基本概念
三、算法分析的两个阶段 1、事前分析—求出该算法的一个时间限界函数。 2、事后测试—收集此算法的执行时间和实际占用空间的 统计资料。
2.2 算法的渐进分析
一、相关概念 算法的渐进分析
确定一个算法时间的数量级是十分重要的,它在本质上反映了 一个算法所需要的计算时间。
2.2 算法的渐进分析
语句频度:语句执行的次数 算法的语句频度f(n):
f(n)=∑( 语句(i)的执行次数) 算法中基本操作重复执行的次数之和
算法的执行时间:是所有语句的执行时间之和 T(n)=∑( 语句(i)的执行次数×语句的执行时间 ) (假设每条语句执行的时间相等)
意一个常数,此定理都成立。
此定理表明,变量n的固定阶数为m的任一多项式,与此多项式 的最高阶nm同阶.
2.2 算法的渐进分析
示例
2.2 算法的渐进分析
2.2 算法的渐进分析
2.2 算法的渐进分析
例.1)假设某算法在输入规模是 n 时为 f (n) 3* 2n .在某台计算机上
实现并完成该算法的时间是 t 秒. 现有另一台计算机,其运行速度为第
由于新机器运行速度提高64倍,则运行时间/每语句变为
t新
t0 64
由关系式 f (n) *t0 t,f (m) *t新 t ,得
3* 2n * t0 t
解,得 m n 6.
3* 2m * t0 t 64
2.2 算法的渐进分析
2)若上述算法改进后,新算法 f (n) n 2 , 则在新机器上用 t 秒时间
式,有 | T (n) || am | nm | a1 | n | a0 | (| am | | am1 | /n | a0 | /nm )nm (| am | | a0 |)nm
取c=|am|+….+|a0| 定理得证. 事实上,只要将n0取得足够大,可以证明只要c是比|am|大的任
的最小值。
➢ 与大O符号对称,这个下限的阶越高,结果就越有价值。
➢ 问题的计算时间下界为(f(n)),则计算时间复杂性为O(f(n))的 算法是最优算法。 例如:计算时间复杂性为O(nlogn)的排序算法是最优算法。 (堆排序算法就是最优算法)。
是一种事前估算的方法,是指忽略具体机器、编程语言和编译 器的影响,只关注在输入规模增大时算法运行时间的增长趋势。 渐进时间复杂性
当问题的规模n趋向无穷大时,影响算法效率的重要因素是T(n) 的数量级,而其他因素仅是使时间复杂度相差常数倍,因此,可 以用T(n)的数量级(阶)评价算法。时间复杂度T(n)的数量级(阶) 称为渐进时间复杂性。
第2章 算法分析基础
2.1 算法分析的基本概念 2.2 算法的渐进分析 2.3 最好、最坏和平均情况 2.4 非递归算法的分析 2.5 递归算法的分析
2.1 算法分析的基本概念
一、算法分析(Algorithm Analysis):对算法所需要的两种计 算机资源——时间和空间进行估算 ➢ 时间复杂性(Time Complexity) ➢ 空间复杂性(Space Complexity)
➢ 典型的增长阶:
O(1), O(lgn), O(n),Baidu NhomakorabeaO(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)) ;

c×f(n)

次 数
T(n)
n情0
之 况
前 无
的 关
紧要
n0
问题规模n
2.2 算法的渐进分析
➢ 大O符号描述增长率的上限,表示T(n)的增长最多像f(n)增 长的那样快
➢ 当说一个算法具有O(f(n))的计算时间时,指的是如果此算法 用n值不变的同一类数据在某台机器上运行时,所用的时间 总是小于f(n)的一个常数倍。所以f(n)是计算时间T(n)的一个 上界函数,T(n)的数量级就是f(n)
一台的64倍, 那么,在这台计算机上用同一算法在 t 秒内能解决规模为
多大的问题?
规模
语句频度
运行时间/每语句
总时间
n
f (n) 3* 2n
t0
t
关系式: f (n) *t0 t
算法语句频度*运行速度(时间/每语句)=运行总时间
解:设在新机器上t 秒内能解决规模为 m 的问题,f (m) 3*2m
相关文档
最新文档