时间复杂度

111 阅读1分钟

渐进的界

相关概念

O(n)

若存在正数 ccn0n_0 , 使得一切 nn0n \ge n_0 都有 0f(n)cg(n)0 \le f(n) \le cg(n) , 则 f(n)f(n) 的渐进上界为 g(n)g(n) , 记为 f(n)=O(g(n))f(n)=O(g(n))

f(n)=n2+nf(n) = n^2 + n

c=2c=2 , n0=1n_0 = 1 时, f(n)=O(n2)f(n) = O(n^2)

c=1c=1 , n0=2n_0 = 2 时, f(n)=O(n3)f(n) = O(n^3)

Ω(n)

若存在正数 ccn0n_0 , 使得一切 nn0n \ge n_0 都有 0cg(n)f(n)0 \le cg(n) \le f(n) , 则 f(n)f(n) 的渐进下界为 g(n)g(n) , 记为 f(n)=Ω(g(n))f(n)=\Omega(g(n))

f(n)=n2+nf(n) = n^2 + n

c=1c=1 , n0=1n_0 = 1 时, f(n)=Ω(n2)f(n) = \Omega(n^2)

o(n)

若对 任意 正数 cc 都存在 n0n_0 , 使得一切 nn0n \ge n_0 都有 0f(n)<cg(n)0 \le f(n) \lt cg(n) , 记为 f(n)=o(g(n))f(n) = o(g(n))

f(n)=n2+nf(n) = n^2 + n

c1c\ge 1 时, 存在 n0=2n_0=2 , 使得 n2+n<cn3n^2+n\lt cn^3

0<c<10 \lt c \lt 1 时, 取 n0>2/cn_0 \gt \lceil 2/c \rceil, 使得 cncn0>2cn \ge cn_0 \gt 2 , 而 n2+n<2n2cn3n^2+n \lt 2n^2 \le cn^3 , 因此 f(n)=o(n3)f(n) = o(n^3)

ω(n)

若对 任意 正数 cc 都存在 n0n_0 , 使得一切 nn0n \ge n_0 都有 0cg(n)<f(n)0 \le cg(n) \lt f(n) , 记作 f(n)=ω(g(n))f(n) = \omega(g(n))

f(n)=n2+nf(n) = n^2 + n

f(n)=ω(n)f(n) = \omega(n) , f(n)ω(n2)f(n) \neq \omega(n^2) , 因为当 c=2c=2 时, 不存在 n0n_0 使得一切 nn0n \ge n_0 都有 2n2<n2+n2n^2 \lt n^2 + n

Θ(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) = \Theta(g(n))

f(n)=n2+nf(n) = n^2 + n , 则 f(n)=Θ(100n2)f(n) = \Theta(100n^2)

c=1/100c=1/100n0=1n_0 = 1 时, f(n)=Ω(n2)f(n)=\Omega(n^2)

c=1/50c=1/50n0=1n_0 = 1 时, f(n)=O(n2)f(n)=O(n^2)

积分求渐近的界

image.png

定理

定理一

如果 limnf(n)g(n)\lim\limits_{n\rightarrow\infty}\frac{f(n)}{g(n)} 存在, 且等于某个常数, 则 f(n)=Θ(g(n))f(n) = \Theta(g(n))

证明
给定正数 ε=c/2\varepsilon=c/2 , 根据极限的定义, 则

f(n)g(n)cε \left|\frac{f(n)}{g(n)} - c\right|\le \varepsilon
cε<f(n)g(n)<cε c - \varepsilon \lt \frac{f(n)}{g(n)} \lt c - \varepsilon
c2<f(n)g(n)<3c2<2c \frac{c}{2} \lt \frac{f(n)}{g(n)} \lt \frac{3c}{2} \lt 2c

因此存在 f(n)2cg(n)f(n) \le 2cg(n) 以及 f(n)c2g(n)f(n) \ge \frac{c}{2}g(n)

例题
f(n)=12n23nf(n) = \frac{1}{2}n^2-3n , 证明 f(n)=Θ(n2)f(n) = \Theta(n^2)

因为 limnf(n)n2=limn12n23nn2=12\lim\limits_{n\rightarrow\infty}\frac{f(n)}{n^2}=\lim\limits_{n\rightarrow\infty}\frac{\frac{1}{2}n^2-3n}{n^2}=\frac{1}{2} , 因此 f(n)=Θ(n2)f(n) = \Theta(n^2)

定理二

如果 limnf(n)g(n)=0\lim\limits_{n\rightarrow\infty}\frac{f(n)}{g(n)} = 0 , 则 f(n)=o(g(n))f(n) = o(g(n))

定理三

如果 limnf(n)g(n)=+\lim\limits_{n\rightarrow\infty}\frac{f(n)}{g(n)} = +\infty, 则 f(n)=ω(g(n))f(n) = \omega(g(n))

其他定理

  • 如果 f=O(g)f=O(g)g=O(h)g=O(h) , 则 f=O(h)f=O(h)

  • 如果 f=Ω(g)f=\Omega(g)g=Ω(h)g=\Omega(h) , 则 f=Ω(h)f=\Omega(h)

  • 如果 f=Θ(g)f=\Theta(g)g=Θ(h)g=\Theta(h) , 则 f=Θ(h)f=\Theta(h)

  • 幂函数的阶数小于指数函数

    nd=o(rn),r<1,d<0 n^d=o(r^n), r \lt 1 , d \lt 0

    证明

    limnndrn=limndnd1rnlnr=limnd!rn(lnr)d=0\lim\limits_{n\rightarrow\infty}\frac{n^d}{r^n} =\lim\limits_{n\rightarrow\infty}\frac{dn^{d-1}}{r^nlnr} = \lim\limits_{n\rightarrow\infty}\frac{d!}{r^n(lnr)^d} = 0
  • 多项式 f(n)=a0+a1n+a2n2++adndf(n)=a_0+a_1n+a_2n^2+\cdots+a_dn^d 存在

    • f(n)=Ω(nd)f(n) = \Omega(n^d)

    • f(n)=O(nd)f(n) = O(n^d)

    • f(n)=Θ(nd)f(n) = \Theta(n^d)

  • 对数函数存在

    • logbn=o(nα),α>0log_bn = o(n^\alpha), \alpha\gt 0

    证明

    limnlogbnnα=limnlnnnαlnb=limn1/nαnα1lnb=limn1αnαlnb=0\lim\limits_{n\rightarrow\infty}\frac{log_bn}{n^\alpha} =\lim\limits_{n\rightarrow\infty}\frac{lnn}{n^\alpha lnb} =\lim\limits_{n\rightarrow\infty}\frac{1/n}{\alpha n^{\alpha-1}lnb} =\lim\limits_{n\rightarrow\infty}\frac{1}{\alpha n^\alpha lnb} =0
    • logkn=Θ(logln)log_kn = \Theta(log_ln)

      证明

      limnlogknlogln=limnloglnloglklogln=1loglk\lim\limits_{n\rightarrow\infty}\frac{log_kn}{log_ln} =\lim\limits_{n\rightarrow\infty}\frac{log_ln}{log_lk·log_ln} = \frac{1}{log_lk}
  • 阶乘

    • stirling 公式

      n!=2πn(ne)n(1+Θ(1n))n!=\sqrt{2\pi n}\left(\frac{n}{e}\right)^n\left(1+\Theta\left(\frac{1}{n}\right)\right)
    • n!=o(nn)n!=o(n^n)

    • n!=ω(2n)n!=\omega(2^n)

    • log(n!)=Θ(nlogn)log(n!)=\Theta(nlogn)

      证明

      limnlog(n!)nlogn=1\lim\limits_{n\rightarrow\infty}\frac{log(n!)}{nlogn}=1
  • 求和公式

    k=1nak=n(a1+an)2\sum_{k=1}^na_k=\frac{n(a_1+a_n)}{2}
    k=0naqk=a(1qn+1)1q\sum_{k=0}^n aq^k=\frac{a(1-q^{n+1})}{1-q}
    • 假设存在常数 r<1r \lt 1 , 使得一切 k0k \ge 0 , ak+1akr\frac{a_{k+1}}{a_k} \le r 成立 , 则

      k=0nakk=0a0rk=a0k=0rk=a01r\sum_{k=0}^na_k \le \sum_{k=0}^\infty a_0r^k =a_0\sum_{k=0}^\infty r^k =\frac{a_0}{1-r}

      例题 估计 k=1nk3k\sum_{k=1}^n\frac{k}{3^k} 的上界

      ak=k3ka_k=\frac{k}{3^k} , ak+1=k+13k+1a_{k+1}=\frac{k+1}{3^{k+1}}

      ak+1ak=k+13k23\frac{a_{k+1}}{a_k}=\frac{k+1}{3k}\le\frac{2}{3}

      k=1nk3kk=1a1rk1=13123=1\sum_{k=1}^n\frac{k}{3^k}\le\sum_{k=1}^\infty a_1r^{k-1}=\frac{\frac{1}{3}}{1-\frac{2}{3}}=1

递归公式计算复杂度

换元迭代

image.png

差消化简

image.png

递归树

image.png

终止条件

n(23)k=1n\left(\frac{2}{3}\right)^k=1

T(n)=nk=nlog3/2n=O(nlogn)T(n)=nk=nlog_{3/2}n=O(nlogn)

主定理

a>1a>1 , b>1b>1 , f(n)f(n) 为函数, T(n)T(n) 为非负整数, 且 T(n)=aT(nb)+f(n)T(n) = aT(\frac{n}{b}) + f(n)

  • f(n)=O(nlogbaε)f(n) = O(n^{log_ba - \varepsilon}) , ε>0\varepsilon > 0 , T(n)=Θ(nlogba)T(n) = \Theta(n^{log_ba})

    image.png

  • f(n)=Θ(nlogba)f(n)=\Theta(n^{log_ba}) , 则 T(n)=Θ(nlogbalogn)T(n) = \Theta(n^{log_ba}logn)

    image.png

  • f(n)=Ω(nlogba+ε)f(n) = \Omega(n^{log_ba+\varepsilon}) , ε>0\varepsilon > 0 , 某个常数 c<1c<1, 所有充分大的 nnaf(n/b)cf(n)af(n/b) \le cf(n) , 那么 T(n)=Θ(f(n))T(n)=\Theta(f(n))

    image.png