数据结构与算法——算法复杂度

渐进记号

一、五种渐进记号

  • O O O记号:

对于给定函数 g ( n ) g(n) g(n) f ( n ) = O ( g ( n ) ) f(n)=O(g(n)) f(n)=O(g(n)):存在正常量 c c c n 0 n_{0} n0,使得对所有 n ≥ n 0 n \geq n_{0} nn0,有 0 ≤ f ( n ) ≤ c g ( n ) 0 \leq f(n) \leq cg(n) 0f(n)cg(n)成立。 f ( n ) f(n) f(n)只有一个渐进上界 f ( n ) f(n) f(n)的阶不高于 g ( n ) g(n) g(n)的阶。

  • Ω \Omega Ω记号:

对于给定函数 g ( n ) g(n) g(n) f ( n ) = O ( g ( n ) ) f(n)=O(g(n)) f(n)=O(g(n)):存在正常量 c c c n 0 n_{0} n0,使得对所有 n ≥ n 0 n \geq n_{0} nn0,有 0 ≤ c g ( n ) ≤ f ( n ) 0 \leq cg(n) \leq f(n) 0cg(n)f(n)成立。 f ( n ) f(n) f(n)只有一个渐进下界 f ( n ) f(n) f(n)的阶不低于 g ( n ) g(n) g(n)的阶。

  • Θ \Theta Θ记号:

对于给定函数 g ( n ) g(n) g(n) f ( n ) = Θ ( g ( n ) ) f(n)=\Theta(g(n)) f(n)=Θ(g(n)):存在正常量 c 1 c_{1} c1 c 2 c_{2} c2 n 0 n_{0} n0,使得对所有 n ≥ n 0 n \geq n_{0} nn0,有 0 ≤ c 1 g ( n ) ≤ f ( n ) ≤ c 2 g ( n ) 0 \leq c_{1}g(n) \leq f(n) \leq c_{2}g(n) 0c1g(n)f(n)c2g(n)成立。 Θ \Theta Θ记号渐进地给出了一个函数的上界和下界 f ( n ) f(n) f(n)的阶等于 g ( n ) g(n) g(n)的阶

f ( n ) = O ( g ( n ) ) f(n)=O(g(n)) f(n)=O(g(n)) f ( n ) = Ω ( g ( n ) ) f(n)= \Omega (g(n)) f(n)=Ω(g(n)),则 f ( n ) = Θ ( g ( n ) ) f(n)= \Theta (g(n)) f(n)=Θ(g(n))

  • o o o记号:

对于给定函数 g ( n ) g(n) g(n) f ( n ) = O ( g ( n ) ) f(n)=O(g(n)) f(n)=O(g(n)):存在正常量 c &gt; 0 c &gt; 0 c>0 n 0 &gt; 0 n_{0} &gt; 0 n0>0,使得对所有 n ≥ n 0 n \geq n_{0} nn0,有 0 ≤ f ( n ) &lt; c g ( n ) 0 \leq f(n) &lt; cg(n) 0f(n)<cg(n)成立。 f ( n ) f(n) f(n)只有一个渐进紧确上界 f ( n ) f(n) f(n)的阶低于 g ( n ) g(n) g(n)的阶。

  • ω \omega ω记号:

对于给定函数 g ( n ) g(n) g(n) f ( n ) = O ( g ( n ) ) f(n)=O(g(n)) f(n)=O(g(n)):存在正常量 c &gt; 0 c &gt; 0 c>0 n 0 &gt; 0 n_{0} &gt; 0 n0>0,使得对所有 n ≥ n 0 n \geq n_{0} nn0,有 0 ≤ c g ( n ) &lt; f ( n ) 0 \leq cg(n) &lt; f(n) 0cg(n)<f(n)成立。 f ( n ) f(n) f(n)只有一个渐进紧确下界 f ( n ) f(n) f(n)的阶高于 g ( n ) g(n) g(n)的阶。

二、 相关定理

  • 定理1:

(1)如果 lim ⁡ n → + ∞ f ( n ) g ( n ) \lim_{n \to +\infty} \frac{f(n)}{g(n)} limn+g(n)f(n)存在,且为某个常数 c c c,则 f ( n ) = Θ ( g ( n ) ) f(n)= \Theta (g(n)) f(n)=Θ(g(n))
(2)如果 lim ⁡ n → + ∞ f ( n ) g ( n ) = 0 \lim_{n \to +\infty} \frac{f(n)}{g(n)}=0 limn+g(n)f(n)=0,则 f ( n ) = O ( g ( n ) ) f(n)= O (g(n)) f(n)=O(g(n))
(3)如果 lim ⁡ n → + ∞ f ( n ) g ( n ) = ∞ \lim_{n \to +\infty} \frac{f(n)}{g(n)}=\infty limn+g(n)f(n)=,则 f ( n ) = ω ( g ( n ) ) f(n)= \omega (g(n)) f(n)=ω(g(n))

由定理1可以导出两个重要结果:

(1)多项式函数的阶低于指数函数的阶:

n d = o ( r n ) , r &gt; 1 , d &gt; 0 n^{d}=o(r^{n}), \quad r &gt; 1,d &gt; 0 nd=o(rn),r>1,d>0

(2)对数函数的阶低于幂函数的阶:

l n n = o ( n d ) , d &gt; 0 {\rm ln}n=o(n^{d}), \quad d&gt;0 lnn=o(nd),d>0

  • 定理2,传递性:

f ( n ) = Θ ( g ( n ) ) f(n)= \Theta (g(n)) f(n)=Θ(g(n)),且 g ( n ) = Θ ( h ( n ) ) g(n)=\Theta (h(n)) g(n)=Θ(h(n)),则 f ( n ) = Θ ( h ( n ) ) f(n)=\Theta(h(n)) f(n)=Θ(h(n))。对于大 O O O、小 o o o Ω \Omega Ω ω \omega ω同样成立。

  • 定理3:

f = O ( h ) , g = O ( h ) → f + g = O ( h ) f=O(h), \quad g=O(h) \rightarrow f+g=O(h) f=O(h),g=O(h)f+g=O(h)
该性质可推广到有限个函数。算法由有限个步骤构成,若每一步的时间复杂度函数的上界都是 h ( n ) h(n) h(n),那么算法的时间复杂度函数可以写作 O ( h ( n ) ) O(h(n)) O(h(n))

三、相关性质

  • 1、自反性:

f ( n ) = Θ ( f ( n ) ) f(n)=\Theta (f(n)) f(n)=Θ(f(n))
f ( n ) = O ( f ( n ) ) f(n)=O(f(n)) f(n)=O(f(n))
f ( n ) = Ω ( f ( n ) ) f(n)=\Omega(f(n)) f(n)=Ω(f(n))

  • 2、对称性:

f ( n ) = Θ ( g ( n ) ) f(n)=\Theta(g(n)) f(n)=Θ(g(n)),当且仅当 g ( n ) = Θ ( f ( n ) ) g(n)=\Theta(f(n)) g(n)=Θ(f(n))

  • 3、转置对称性:

f ( n ) = O ( g ( n ) ) f(n)=O(g(n)) f(n)=O(g(n))当且仅当 g ( n ) = Ω ( f ( n ) ) g(n)=\Omega(f(n)) g(n)=Ω(f(n))
f ( n ) = o ( g ( n ) ) f(n)=o(g(n)) f(n)=o(g(n))当且仅当 g ( n ) = ω ( f ( n ) ) g(n)=\omega(f(n)) g(n)=ω(f(n))

四、几类重要函数

  • 至少指数函数级: 2 n 2^{n} 2n, 3 n 3^{n} 3n, n ! n! n!, 2 2 n 2^{2^{n}} 22n, n 2 n n2^{n} n2n, ( log ⁡ n ) log ⁡ n = n log ⁡ log ⁡ n (\log n)^{\log n}=n^{\log \log n} (logn)logn=nloglogn

  • 多项式级: n n n, n 2 n^{2} n2, n l o g n n {\rm log}n nlogn, n 1 2 n^{\frac{1}{2}} n21, n 3 n^{3} n3, l o g ( n ! ) = Θ ( n l o g n ) {\rm log}(n!)=\Theta(n {\rm log}n) log(n!)=Θ(nlogn)

  • 对数多项式级: l o g n {\rm log}n logn, l o g 2 n {\rm log}^{2}n log2n, l o g l o g n {\rm log log}n loglogn, log ⁡ n \sqrt{\log n} logn


取整函数

  • ⌊ x ⌋ \lfloor x \rfloor x:向下取整, ⌈ x ⌉ \lceil x \rceil x:向上取整

  • 一些性质:

x − 1 &lt; ⌊ x ⌋ ≤ x ≤ ⌈ x ⌉ &lt; x + 1 x-1&lt;\lfloor x\rfloor \leq x \leq\lceil x\rceil&lt; x+1 x1<xxx<x+1

⌊ x + n ⌋ = ⌊ x ⌋ + n , ⌈ x + n ⌉ = ⌈ x ⌉ + n \lfloor x+n\rfloor=\lfloor x\rfloor+ n,\lceil x+n\rceil=\lceil x\rceil+ n x+n=x+n,x+n=x+n

⌈ n 2 ⌉ + ⌊ n 2 ⌋ = n \left\lceil\frac{n}{2}\right\rceil+\left\lfloor\frac{n}{2}\right\rfloor= n 2n+2n=n

⌈ ⌈ n a ⌉ b ⌉ = ⌈ n a b ⌉ , ⌊ ⌊ n a ⌋ b ⌋ = ⌊ n a b ⌋ \left\lceil\frac{\left\lceil\frac{n}{a}\right\rceil}{b}\right\rceil=\left\lceil\frac{n}{a b}\right\rceil, \quad \left\lfloor\frac{\left\lfloor\frac{n}{a}\right\rfloor}{b}\right\rfloor=\left\lfloor\frac{n}{a b}\right\rfloor ban=abn,ban=abn


参考资料

更多文章请浏览作者个人网站5663015.github.io
添加作者微信,一起交流学习,微信号:wuan3076
您的打赏是我进步的动力~
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值