算法设计与分析——第二章算法分析的数学基础

2.1 计算复杂性函数的阶

## 增长的阶

算法的实际运行时间受除算法设计本身以外很多其他因素的影响,如:指令集、操作系统、编译器……

  • 如何描述算法的效率 → \to 只与输入问题的规模有关
    • 增长率
    • 时间复杂度
  • 忽略低阶项
  • 保留最高阶项
  • 忽略常系数
  • 常见增长阶: Θ ( 1 ) \Theta(1) Θ(1), Θ ( l g   n ) \Theta(lg\,n) Θ(lgn), Θ ( n ) \Theta(\sqrt[]{n}) Θ(n ), Θ ( n ) \Theta(n) Θ(n), Θ ( n l g   n ) \Theta(nlg\,n) Θ(nlgn), Θ ( n 2 ) \Theta(n^2) Θ(n2), Θ ( n 3 ) \Theta(n^3) Θ(n3), Θ ( 2 n ) \Theta(2^n) Θ(2n), Θ ( n ! ) \Theta(n!) Θ(n!)
    • 利用 Θ ( n 2 ) \Theta(n^2) Θ(n2)表示插入排序的最坏运行时间
  • 增长记号 O , Θ , Ω , o , ω O, \Theta, \Omega, o, \omega O,Θ,Ω,o,ω
    • O O O表示渐进上界
    • Θ \Theta Θ表示渐进紧界
    • Ω \Omega Ω表示渐进下界

同阶函数集合 Θ \Theta Θ

Θ ( g ( n ) ) = {   f ( n ) ∣ ∃ c 1 , c 2 > 0 , ∀ n > n 0 , c 1 g ( n ) ≤ f ( n ) ≤ c 2 g ( n )   } \Theta(g(n))=\{\,f(n)|\exists c_1,c_2 >0,\forall n>n_0,c_1g(n)\le f(n) \le c_2g(n) \,\} Θ(g(n))={ f(n)c1,c2>0,n>n0,c1g(n)f(n)c2g(n)}

称为与g(n)同阶的函数集合

  • f ( n ) ∈ Θ ( g ( n ) ) f(n)\in \Theta(g(n)) f(n)Θ(g(n)), g ( n ) g(n) g(n) f ( n ) f(n) f(n)同阶, 记作 f ( n ) = Θ ( g ( n ) ) f(n) = \Theta(g(n)) f(n)=Θ(g(n))

Θ ( g ( n ) ) \Theta(g(n)) Θ(g(n))例子:

  • 通常 f ( n ) = a n 2 + b n + c = Θ ( n 2 ) f(n)=an^2+bn+c=\Theta(n^2) f(n)=an2+bn+c=Θ(n2),其中a,b,c是常数且 a > 0 a>0 a>0
  • p ( n ) = ∑ i = 0 d a i n i p(n)=\sum_{i=0}^{d}a_in^i p(n)=i=0daini,其中 a i a_i ai是常数且 a d > 0 a_d>0 ad>0,则 p ( n ) = Θ ( n d ) p(n)=\Theta(n^d) p(n)=Θ(nd)
  • Θ ( n 0 ) \Theta(n^0) Θ(n0)或者 Θ ( 1 ) \Theta(1) Θ(1)常数时间复杂性

低阶函数集合 O O O

对于给定函数 g ( n ) g(n) g(n):
O ( g ( n ) ) = f { ( n )   存 在 正 常 数 c 和 n 0 满 足 对 于 所 有 n ≥ n 0 , 0 ≤ f ( n ) ≤ c g ( n )   } O(g(n))=f\{(n) \,\bold{存在}正常数c和n_0 满足对于所有n\ge n_0, 0 \le f(n) \le cg(n)\,\} O(g(n))=f{ (n)cn0nn0,0f(n)cg(n)}
记作 f ( n ) ∈ O ( g ( n ) ) f(n)\in O(g(n)) f(n)O(g(n)), 或简记为 f ( n ) = O ( g ( n ) ) f(n)=O(g(n)) f(n)=O(g(n))

Θ ( g ( n ) ) \Theta(g(n)) Θ(g(n)) O ( g ( n ) ) O(g(n)) O(g(n))的关系:

  • f ( n ) = Θ ( g ( n ) )    ⟹    f ( n ) = O ( g ( n ) ) f(n)=\Theta(g(n))\implies f(n)=O(g(n)) f(n)=Θ(g(n))f(n)=O(g(n))
  • Θ \Theta Θ强于 O O O
  • Θ ( g ( n ) ) ⊆ O ( g ( n ) ) \Theta(g(n)) \subseteq O(g(n)) Θ(g(n))O(g(n))
    • a n 2 + b n + c = Θ ( n 2 ) an^2+bn+c=\Theta(n^2) an2+bn+c=Θ(n2)并且 a n 2 + b n + c = O ( n 2 ) an^2+bn+c=O(n^2) an2+bn+c=O(n2)
    • a n + b = O ( n 2 ) an+b=O(n^2) an+b=O(n2)
    • n = O ( n 2 ) n=O(n^2) n=O(n2)

如果 f ( n ) = O ( n k ) f(n)=O(n^k) f(n)=O(nk) ,则称 f ( n ) f(n) f(n)多项式界限的​

严格低阶函数 o o o

对于给定函数 g ( n ) g(n) g(n):
o ( g ( n ) ) = f { ( n )   存 在 任 意 正 常 数 c , 存 在 一 个 正 数 n 0 满 足 对 于 所 有 n ≥ n 0 , 0 ≤ f ( n ) < c g ( n )   } o(g(n))=f\{(n) \,存在\bold{任意}正常数c,\bold{存在一个正数}n_0 满足对于所有n\ge n_0, 0 \le f(n) < cg(n)\,\} o(g(n))=f{ (n)c,n0nn0,0f(n)<cg(n)}
记作 f ( n ) ∈ o ( g ( n ) ) f(n)\in o(g(n)) f(n)o(g(n)), 或简记为 f ( n ) = o ( g ( n ) ) f(n)=o(g(n)) f(n)=o(g(n))

o o o O O O的关系:

  • O O O可能是或不是紧的
    • 2 n 2 = O ( n 2 ) 2n^2=O(n^2) 2n2=O(n2)是紧的,但 2 n = O ( n 2 ) 2n=O(n^2) 2n=O(n2)不是紧的
  • o o o标记上界且不紧
    • 2 n = o ( n 2 ) 2n=o(n^2) 2n=o(n2),但是 2 n 2 ≠ o ( n 2 ) 2n^2\ne o(n^2) 2n2=o(n2)
    • 区别:KaTeX parse error: Undefined control sequence: \cases at position 1: \̲c̲a̲s̲e̲s̲{O:\exist\,c\,某…

高阶函数集合 Ω \Omega Ω

对于给定函数 g ( n ) g(n) g(n):
Ω ( g ( n ) ) = f { ( n )   存 在 正 常 数 c 和 n 0 满 足 对 于 所 有 n ≥ n 0 , 0 ≤ c g ( n ) ≤ f ( n )   } \Omega(g(n))=f\{(n) \,存在正常数c和n_0 满足对于所有n\ge n_0, 0 \le cg(n) \le f(n)\,\} Ω(g(n))=f{ (n)cn0nn0,0cg(n)f(n)}
记作 f ( n ) ∈ Ω ( g ( n ) ) f(n)\in \Omega(g(n)) f(n)Ω(g(n)), 或简记为 f ( n ) = Ω ( g ( n ) ) f(n)=\Omega(g(n)) f(n)=Ω(g(n))

Ω \Omega Ω用来描述运行时间的最好情况,对所有输入都正确

例如,对于插入排序:

  • 最好运行情况为 Ω ( n ) \Omega(n) Ω(n)
  • 运行时间为 Ω ( n ) \Omega(n) Ω(n) ( Ω ( n 2 ) \Omega(n^2) Ω(n2)[x])
  • 最坏运行时间为 Ω ( n 2 ) \Omega(n^2) Ω(n2)

也可以用来描述问题

​ - 排序问题的时间复杂性为 Ω ( n ) \bold{\Omega(n)} Ω(n) → \to 最好情况

O , Θ , Ω \bold{O,\Theta,\Omega} O,Θ,Ω的关系:
对 于 f ( n ) 和 g ( n ) , f ( n ) = Θ ( g ( n ) ) 当 且 仅 当 f ( n ) = O ( g ( n ) ) 且 f ( n ) = Ω ( g ( n ) ) 对于f(n)和g(n),\bold{f(n)=\Theta(g(n))}当且仅当\\ \bold{f(n)=O(g(n))且f(n)=\Omega(g(n))} f(n)g(n),f(n)=Θ(g(n))f(n)=O(g(n))f(n)=Ω(g(n))

严格高阶函数集合 ω \omega ω

对于给定函数 g ( n ) g(n) g(n):
ω ( g ( n ) ) = f { ( n )   对 于 任 意 正 常 数 c , 存 在 正 数 n 0 满 足 对 于 所 有 n ≥ n 0 , 0 ≤ c g ( n ) ≤ f ( n )   } \omega(g(n))=f\{(n) \,对于\bold{任意}正常数c,\bold{存在正数}n_0 满足对于所有n\ge n_0, 0 \le cg(n) \le f(n)\,\} ω(g(n))=f{ (n)cn0nn0,0cg(n)f(n)}
记作 f ( n ) ∈ ω ( g ( n ) ) f(n)\in \omega(g(n)) f(n)ω(g(n)), 或简记为 f ( n ) = ω ( g ( n ) ) f(n)=\omega(g(n)) f(n)=ω(g(n))

lim ⁡ n → ∞ f ( n ) g ( n ) = ∞ \lim_{n\to \infty}\frac{f(n)}{g(n)}=\infty nlimg(n)f(n)=

ω \omega ω表示不紧的下界

KaTeX parse error: Can't use function '$' in math mode at position 25: …2}{2}=\omega(n)$̲,但$\frac{n^2}{2…

ω \omega ω Ω \Omega Ω 的区别:KaTeX parse error: Undefined control sequence: \cases at position 1: \̲c̲a̲s̲e̲s̲{ \omega:\,\exi…

ω \omega ω o o o的关系:
f ( n ) = ω ( g ( n ) )    ⟺    g ( n ) = o ( f ( n ) ) f(n)=\omega(g(n)) \iff g(n)=o(f(n)) f(n)=ω(g(n))g(n)=o(f(n))

渐进符号的性质

  • 传递性 O , Θ , Ω , o , ω O, \Theta, \Omega, o, \omega O,Θ,Ω,o,ω
    f ( n ) = Θ ( g ( n ) ) 并 且 g ( n ) = Θ ( h ( n ) )    ⟹    f ( n ) = Θ ( h ( n ) ) f(n)=\Theta(g(n))并且 g(n)=\Theta(h(n)) \implies f(n)=\Theta(h(n)) f(n)=Θ(g(n))g(n)=Θ(h(n))f(n)=Θ(h(n))

  • 自反性$O,\Theta,\Omega $
    f ( n ) = Θ ( f ( n ) ) f(n)=\Theta(f(n)) f(n)=Θ(f(n))

  • 对称性 Θ \Theta Θ

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值