算法的渐进复杂度分析

  • 格式:pps
  • 大小:618.50 KB
  • 文档页数:36

下载文档原格式

  / 36
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。


n Sn
3
n
6.75n
1
151 72n
O
1 2
F4n
~wenku.baidu.com
4n
5
, 这里 4
6.8541
• 因此还是F4n要大一些。这个结果看上去很难导
出,本章的目的就是学习相关的技巧,使我们
可以方便快捷地推导出这样的结果。
2021/4/4
6
渐进处理名称的来源
• 渐进(Asymptotics)来自于希腊语,字面意义 是“不落在一起”。古希腊数学家研究双曲线
也在类中。
问题:如果函数f在类中,如何证明函数f0.5也在类 中?
2021/4/4
13
量的等级
• 关于以上函数类,哈代给出一个定理: • 函数类中的所有函数构成一个渐进等级:如果f、
g属于该函数类,那么必有以下三种情况之一
(1) f g (2) f g
(3)
• 在第三种情形中,必有某个常数α,使得
• 更强的关系~:函数f渐进于函数g
2021/4/4
f (n) ~ g(n) lim f (n) 1 n g(n)
12
量的等级
• G.H. Hardy 提出的对数——指数函数类 (logarithmico-exponential function):
(1)所有常数函数在类中; (2)恒等函数f(x)=x在类中; (3)如果函数f、g在类中,那么函数f-g也在类中; (4)如果函数f在类中,那么函数ef也在类中; (5)如果函数f在类中而且最终取正值,那么lnf
因此 log n e logn n
2021/4/4
11
量的等级
• 当两个函数的增长率相同时,写成 正式定义为 f (n) c g(n) 且有 g(n) c f (n) , 对于某个c和所有充分大的n
例如对于 f (n) cosn arctann, g(n) c 0
事实上,如果f(n)和g(n)是次数相同的多项式即 有此关系。
• 上述定义可以推广到任意实数函数,但是需要 给出自变量的范围。在一般情况下,这个范围 由某个极限关系来描述,例如
f (x) O(g(x)),x • 需要注意,带有大O记号的等式不能反过来写。
严格地讲,大O记号指的是满足 f (n) c g(n) ,对所有n
的所有函数f构成的集合。 • 因此前面等式中的“=”严格地应写成“⊆”。
如果更进一步,要把它表示成幂级数的话,再
对对数项进行化简。
2021/4/4
28
大O运算的具体例子
• 首先有
ln
n2 n
ln
n2
ln
1
1 n
ln
n2
1 n
1 2n2
1 3n3
...
1 1 1 1 ... n2 n n2 n3 n4
n2
1 n
2
1 n4
2 n5
3 n6
...
• 加起来之后会有很多项抵消掉,得到
对所有n n0 ( )以及所有的 0
2021/4/4
18
9.3 大O的运算 O Manipulation
2021/4/4
19
大O的运算
• 关于大O的运算规则:
(1)f (n) O( f (n))
(2)c f (n) O( f (n)), 如果c为常数
(3)O(O( f (n))) O( f (n))
K N1/3 1 O N 1/3
(2)根据前面的运算规则,有
K 2 N 2/3 1 O N 1/3 2 N 2/3 1 O N 1/3 N 2/3 O N1/3
2021/4/4
25
大O运算的具体例子
• 同样地有
N / K N11/3 1 O N 1/3 1 O(1) N 2/3 1 O N 1/3 O(1) N 2/3 O N1/3
• 关于Solomon Golomb提出的渐进问题:求解
Sn
k 1
1 kNn k
2
的渐进值。Nn(k)为将k表示成n进制数时的位数。 • 首先给出大致估计:
• 位数Nn(k)近似为lognk=logk/logn • 因此和式中的项大致等于(logn)2/klog(k)2
2021/4/4
27
大O运算的具体例子
• 这里有一个更巧妙的方法,使用调和数的渐进 结论。我们有
Sn Hn2n Hn2
• 而且已知
Hn2n
ln
n2 n
2
1 n2
n
12
1 n2
n
2
O
1 n8
H n2
ln
n2
1 2n2
1 12n4
O
1 n8
• 到这里已经可以直接求差得到理想的结果了。
• 传递性: f g, g h f h
• 使用符号 可对常见的函数做一个排序
(1)1, (2) log log n, (3) log n, (4)n , (5)nc , (6)nlogn , (7)cn , (8)nn , (9)ccn
计算复杂度取这些 函数的算法有哪些?
1 log log n log n n nc nlogn cn nn ccn
2021/4/4
9
量的等级
• 上面排序中的函数都趋向于无穷大。还有另外 一种趋向于0的排序
1 ccn
1 nn
1 cn
1 nlog n
1 nc
1 n
1 1 1 log n log log n
• 事实上如果有
f (n) g(n), 则 1 1 g(n) f (n)
• 对于其它函数,可以尝试放到这个序列的合适 位置
(4)O( f (n))O((g(n)) O( f (n)g(n))
(5)O( f (n)(g(n)) f (n)O(g(n))
在计算中,可以用右边的式子代替左边的式子。
2021/4/4
20
大O的运算
• 大O的运算常用在幂级数的求和中。如果求和式
S (z) an zn n0
• 对于某个复数z=z0绝对收敛,那么
f (n) ~ g(n)
• 哈代函数类包含了几乎所有感兴趣的函数,因 此可以将任意给定函数放进给定的渐进等级中。
2021/4/4
14
9.2 大O记号 O Notation
2021/4/4
15
大O记号
• 1894年,Paul Bachmann引入了大O记号
• 大O记号在计算复杂度分析中常常遇到,它的作 用是可以让我们忽略细节。
Sn
n 1
1 2
n2
1 n3 3
1 4
n4
1 n5 5
1 6
n6
1 n3 1 n4 1 n5 1 n6 2222
1 n5 1 n6 64
O n7
2021/4/4
n1 1 n2 1 n3 1 n4 2 n5 1 n6 O n7 2 6 4 15 12 29
大O运算的具体例子
1 n2 2
...
1 n2
n
的绝对误差为O(n-7)的渐进形式。
• 首先提取每一项的主要部分,得到
1
1
n2 k n2 1 k / n2
1 n2
1
k n2
k2 n4
k3 n6
... O
k8 n16
• 这样逐项加起来,即可利用前n个正整数的平方 之和、立方之和、四次方之和、…、8次方之和 得到所要求的结果…非常麻烦的过程
北京航空航天大学计算机学院
具体数学
Concrete Mathematics
赵启阳
2021年4月4日星期日
9 渐进 Asymptotics
2021/4/4
2
渐进处理的意义
• 在实际研究或应用中遇到的数学问题中,精确 答案往往是可遇不可求的
(1)有的问题并没有封闭形式解;
(2)封闭形式解存在,但是以现在的数学工具很 难求出。
2! 3! 4!
234
1
1 z
1
z
z2
z3
z4
O
z5
, 1
z
1z
2 z2
3 z3
4 z4
O
z5
• 大O记号并不是只能用于绝对收敛(甚至条件收
敛)的级数求和。在上表中Hn、n!、π(n)都不收 敛,但是采用大O记号来近似仍然是有意义的。
2021/4/4
23
大O的运算
• 如果某个渐进形式为f+O(g),而且其中的f部分 不包含大O记号,那么就称这个渐进形式的绝对 误差为O(g)。
• 近似结果往往能够满足实际需要,因此了解渐 进意义下的变化趋势也很有价值和意义。
2021/4/4
3
渐进处理的例子
• 对于求和问题
n 3n
Sn k0 k
• 这个问题看上去是没有封闭形式解的。但是有
Sn
~
3n 2 n
,当n
• 这对判断Sn的变化趋势是很有帮助的。此时称Sn
渐进于
3n
2 n
S(z) O(1),对于所有z z0 • 特别地,如果S在某个非零的z上收敛,那么有
S(0) O(1),当 z 0
2021/4/4
S 1 O(1),当n 0 n
21
大O的运算
• 由此导出大O记号对幂级数求和的截断操作,例 如
S(z) a0 O(z)
• 因为
S(z) a0 a1z O(z)
y 1 x2 时发现当x趋向于无穷时,双曲线无限逼近但不 会碰到直线 y x
• 现在我们提到“渐进”,重点强调“越来越趋 近”。
2021/4/4
7
9.1 量的等级 A Hierarchy
2021/4/4
8
量的等级
• 第一个关系符号 :某个函数比另一个函数的 增长趋势更快 f (n) g(n) lim f (n) 0 n g(n)
2021/4/4
4
渐进处理的例子
n • 如果进一步给出
Sn
3nn
2
4 n
O
1 2
• 显然就更加精确了,因为它指出我们渐进的相
对误差大概是
O
1
n2
• 然而在面对渐进趋势与Sn相近的量例如斐波那
契数F4n时,怎样判断它们之间的大小关系?
2021/4/4
5
渐进处理的例子
• 当n=2时, Sn 22 F8 21 。当n趋向于无穷大
S (z) ak z k z m an z nm
0k m
nm
• 而第二个求和式在z0上绝对收敛,因此对于所有 趋向于0的z来说等于O(1)。
2021/4/4
22
大O的运算
• 某些函数的大O记号形式
Hn
ln
n
1 2n
1 12n2
1 120n4
O
1 n6
n!
2n
n e
n
1
1 12n
• 我们说 f (n) O(g(n)), 对所有n
• 如果有某个常数c,使得 f (n) c g(n) ,对所有n
• 当大O记号出现在某个公式中时,代表一个满足 以上定义的函数f。
• 例如对于前n个正整数平方之和,有
2021/4/4
[]n
1 3
n3
O(n2 ),或者[]n
16
O(n10 )
大O记号
• 如果某个渐进形式为f(1+O(g)),而且其中的f部 分不包含大O记号,那么就称这个渐进形式的相 对误差为O(g)。
• 利用幂级数截断操作可以证明两条一般性结论:
ln1 O f n O( f (n)),如果f (n) 1
eO( f (n)) 1 O( f (n)),如果f (n) O(1)
2021/4/4
17
大O记号
• 与大O记号相对应,还有记号大Ω、大Θ和小o。 • 大Ω:
f (n) (g(n)) f (n) c g(n) ,对某个c • 大Θ:
f (n) (g(n)) f (n) O(g(n)), 且f (n) (g(n)) • 小o:
f (n) o(g(n)) f (n) g(n) ,
2021/4/4
10
量的等级
• 例如,对于小于等于n的素数个数函数 n
由于 n 近似等于n
ln n,而 1 n
1 ln n
1 log log n
1
因此
n n
(n) n
log log n
n
即 n1 (n) n n
log log n
• 例如,对于函数 e log n
由于 log log n log n log n
• 综合这两条结论可以得到
1 O f n O(g(n)) 1 O( f (n)g(n)), 如果f (n) 1且f (n)g(n) O(1)
2021/4/4
24
大O运算的具体例子
• 第三章:幸运轮盘中取胜位置的个数
W N / K 1 K 2 5 K 3, K 3 N 22 • 渐进表示: (1)用N1/3+O(1)代替K,去掉下取整符号并得到
1 288n2
139 51840n3
O
1 n4
Bn
2
n为偶数
-1
n 1 2
n!
2 n
1
1 2n
1 3n
O
1 4n
贝努利数
(n)
n ln n
n
ln n2
2!n
ln n3
3!n
ln n4
O
n
ln n5
ez 1 z z2 z3 z4 O z5 , ln1 z z z2 z3 z4 O z5
• 代入到W的式子,得到
W N 2/3 O N1/3 1 N 2/3 O N1/3 O N1/3 O(1) 2 3 N 2/3 O N1/3 2
2021/4/4
26
大O运算的具体例子
• 斯坦福大学1970-1971学期具体数学的一道试题:
• 求解求和式
Sn
1 n2 1