设对长度一千万的数组进行排序,$n = 10^7$
CPU | 算法 | 时间复杂度 | |
---|---|---|---|
计算机 A | $10^{10}$条指令/秒 | 插入排序 | $2 \cdot n^2$ |
计算机 B | $10^7$条指令/秒 | 归并排序 | $50 \cdot n \lg n$ |
$$ \begin{align*} \quad & \frac{2 \cdot (10^7)^2 \text{ instructions}}{10^{10} \text{ instructions/s}} = 20000 \text{ s} > 5.5 \text{ h} \\ & \frac{50 \cdot 10^7 \lg 10^7 \text{ instructions}}{10^7 \text{ instructions/s}} \approx 1163 \text{ s} < 20 \text{ m} \end{align*} $$
两点启示:
insertion_sort(a, n): | 时间 | 次数 |
---|---|---|
for i in range(1, n): | $c_1, c'_1$ | 对$i$赋值$1$次、自增$n-1$次 |
$c''_1$ | $i$与$n$比较$n$次 | |
key = a[i] | $c_2$ | 对$key$赋值$n-1$次 |
j = i - 1 | $c_3$ | 对$j$赋值$n-1$次 |
while j >= 0 and key < a[j]: | $c_4,c'_4$ | 比较$2 \sum_{i=1}^{n-1} t_i + \{1,2\}$次 |
a[j+1] = a[j] | $c_5$ | 赋值$\sum_{i=1}^{n-1} t_i$次 |
j -= 1 | $c_6$ | 对$j$赋值$\sum_{i=1}^{n-1} t_i$次 |
a[j+1] = key | $c_7$ | 赋值$n-1$次 |
最坏情况下$T(n) = a n^2 + bn + c$,当$n \rightarrow \infty$时
某个性质渐进成立:$\exists n_0 > 0$使得对$\forall n \ge n_0$,该性质成立
函数渐进非负:$\exists n_0 > 0$使得对$\forall n \ge n_0$,函数取值非负
函数渐进正:$\exists n_0 > 0$使得对$\forall n \ge n_0$,函数取值为正
$a n^2 + bn + c = \class{blue}{\Theta} (n^2)$表示在渐进意义下,即$n$充分大时,二次函数的增长速度和$n^2$一样快,最多差个常数因子
$n$充分大时,二次函数和三次函数、一次函数的增长速度显然不一样快,因此$T(n) \ne \Theta(n^3)$、$T(n) \ne \Theta(n)$
除了表示一样快(相等关系)的$\Theta$外,还有表示不等关系的
相等关系 | 不等关系 | 严格不等关系 | |||
---|---|---|---|---|---|
函数 | $\Theta$ | $O$ | $\Omega$ | $o$ | $\omega$ |
数 | $=$ | $\le$ | $\ge$ | $<$ | $>$ |
例:对$T(n) = 7 n^3 + 100 n^2 - 20n + 6 = \Theta(n^3)$有
插入排序的运行时间为$O(n^2)$、$\Omega(n)$、$o(n^{2.1})$、$\omega(n^{0.99})$
引入 5 种限界函数刻画算法的渐进效率
含义 | 渐进上界 | 渐进下界 | 渐进紧确界 | 非紧确渐进上界 | 非紧确渐进下界 |
---|---|---|---|---|---|
记号 | $O$ | $\Omega$ | $\Theta$ | $o$ | $\omega$ |
限界函数的严格数学定义
限界函数的各种性质和相互关系
渐进上界$O(g(n))$表示渐进意义下所有小于等于$g(n)$某个常数倍的非负函数,代表算法在最坏情况下的时间复杂度
$$ \begin{align*} \quad O(g(n)) = \{ f(n) \mid \exists c, n_0 > 0 ~ \forall n \ge n_0 : 0 \le f(n) \le c g(n) \} \end{align*} $$
渐进下界$\Omega(g(n))$表示渐进意义下所有大于等于$g(n)$某个常数倍的非负函数,代表算法在最好情况下的时间复杂度
$$ \begin{align*} \quad \Omega(g(n)) = \{ f(n) \mid \exists c, n_0 > 0 ~ \forall n \ge n_0 : 0 \le c g(n) \le f(n) \} \end{align*} $$
两点说明:
$d$阶多项式$p(n) = a_d n^d + a_{d-1} n^{d-1} + \cdots + a_1 n + a_0$,其中$a_d > 0$
易知有$\frac{p(n)}{n^d} = a_d + \frac{a_{d-1}}{n} + \cdots + \frac{a_1}{n^{d-1}} + \frac{a_0}{n^d} \triangleq q(n) \xrightarrow{~ n \rightarrow \infty ~} a_d$
根据极限定义,存在$n_0$使得对$\forall n \ge n_0$有$|q(n) - a_d| \le a_d/2$,即$a_d/2 \le q(n) \le 3 a_d/2$,故当$n \ge \max \{ n_0, 1 \}$且$k_1 \le d \le k_2$时有
$$ \begin{align*} \quad 0 \le \frac{a_d}{2} n^{k_1} \le \frac{a_d}{2} n^d \le p(n) \le \frac{3 a_d}{2} n^d \le \frac{3 a_d}{2} n^{k_2} \end{align*} $$
这也印证了前面的$7 n^3 + 100 n^2 - 20n + 6 = \begin{cases} O(n^k), & k \ge 3 \\ \Omega(n^k), & k \le 3 \end{cases}$
渐进紧确界$\Theta(g(n))$表示渐进意义下所有介于$g(n)$某两个常数倍之间的非负函数,代表算法在最坏情况和最好情况下的时间复杂度一样,最多差个常数因子
$$ \begin{align*} ~ \Theta(g(n)) = \{ f(n) \mid \exists c_1, c_2, n_0 > 0 ~ \forall n \ge n_0 : 0 \le c_1 g(n) \le f(n) \le c_2 g(n) \} \end{align*} $$
定理:$f(n) = \Theta(g(n))$等价于$f(n) = O(g(n))$且$f(n) = \Omega(g(n))$
正方向,$\Theta : \exists c_1, c_2, n_0 > 0 \ldots \Longrightarrow \begin{cases} O : \exists c_2, n_0 > 0 \ldots \\ \Omega : \exists c_1, n_0 > 0 \ldots \end{cases}$
反方向,$\begin{cases} O : \exists c_2, n_2 > 0 \ldots \\ \Omega : \exists c_1, n_1 > 0 \ldots \end{cases} \Longrightarrow \Theta : \exists c_1, c_2, \max\{ n_1, n_2 \} > 0 \ldots$
$d$阶多项式$p(n) = \sum_{i=0}^d a_i n^i, ~ (a_d > 0) = \begin{cases} O(n^k), & k \ge d \\ \Omega(n^k), & k \le d \\ \Theta(n^k), & k = d \end{cases}$
使用渐进符号时我们应力求精确、简洁
例如对$T(n) = 3 n^2 - 10 n$,应将其写为$T(n) = \Theta(n^2)$
若渐进记号单独出现在等号右边,如$3 n^2 = \Theta(n^2)$,表示属于$\in$
若渐进记号作为表达式中的一项,如$T(n) \le T(n-1) + \Theta(n)$,表示匿名函数,即存在$f(n) \in \Theta(n)$使得$T(n) \le T(n-1) + f(n)$
多匿名函数,如$2 n^2 + 3 n + 1 = 2 n^2 + \Theta(n) = \Theta(n^2)$
$\sum_{i=1}^n \Theta (i)$表示$\sum_{i=1}^n (a i + b)$,而不是$\Theta (1) + \Theta (2) + \cdots + \Theta (n)$
通常用$n$表示问题输入的规模,我们关心$n \rightarrow \infty$时的情况
若写成$O(g(m))$,则表示的是关心$m \rightarrow \infty$时的$g(m)$的增长速度
如何理解$f(n) = O(1)$?
如何理解当$n<3$时$T(n) = O(1)$?
若不致引起误解,尽可能滥用(abuse)符号,可以简化表达
非紧确渐进上界$o(g(n))$定义如下:
$$ \begin{align*} \quad o(g(n)) = \{ f(n) \mid \class{blue}{\forall c > 0} ~ \exists n_0 > 0 ~ \forall n \ge n_0 : 0 \le f(n) \class{blue}{<} c g(n) \} \end{align*} $$
对比渐进上界$O(g(n))$,两点区别
顾名思义,$o(g(n)) = O(g(n)) \setminus \Theta(g(n))$
例:$2n = o(n^2)$,$2n \ne o(n)$
$$ \begin{align*} \quad o(g(n)) & = \{ f(n) \mid \class{blue}{\forall c > 0} ~ \exists n_0 > 0 ~ \forall n \ge n_0 : 0 \le f(n) \class{blue}{<} c g(n) \} \\[4px] & \Longrightarrow \class{blue}{\forall c > 0} : 0 \le \lim_{n \rightarrow \infty} \frac{f(n)}{g(n)} < c \Longleftrightarrow \lim_{n \rightarrow \infty} \frac{f(n)}{g(n)} = 0 \qquad (*) \end{align*} $$
$f(n) = o(g(n))$表示在渐进意义下$f(n)$相对$g(n)$变得微不足道了
对数函数 < 多项式函数 < 指数函数:
非紧确渐进下界$\omega(g(n))$对比$\Omega(g(n))$同样是两点区别
$$ \begin{align*} \quad \omega(g(n)) & = \{ f(n) \mid \class{blue}{\forall c > 0} ~ \exists n_0 > 0 ~ \forall n \ge n_0 : 0 \le c g(n) \class{blue}{<} f(n) \} \\[4px] \label{eq: def2} & \Longrightarrow \class{blue}{\forall c > 0} : c < \lim_{n \rightarrow \infty} \frac{f(n)}{g(n)} \Longleftrightarrow \lim_{n \rightarrow \infty} \frac{f(n)}{g(n)} = \infty \end{align*} $$
$f(n) = \omega(g(n))$表示在渐进意义下$f(n)$相对$g(n)$可变得任意大
对称的有$\omega(g(n)) = \Omega(g(n)) \setminus \Theta(g(n))$
例:$2 n^2 = \omega (n)$,$2 n^2 \ne \omega(n^2)$
$d$阶多项式$p(n) = a_d n^d + a_{d-1} n^{d-1} + \cdots + a_1 n + a_0$,其中$a_d > 0$
易知有$\frac{p(n)}{n^d} = a_d + \frac{a_{d-1}}{n} + \cdots + \frac{a_1}{n^{d-1}} + \frac{a_0}{n^d} \triangleq q(n) \xrightarrow{~ n \rightarrow \infty ~} a_d$
若$k > d$,$\lim_{n \rightarrow \infty} \frac{p(n)}{n^k} = \lim_{n \rightarrow \infty} \frac{q(n)}{n^{k-d}} = 0 \Longrightarrow p(n) = o(n^k)$
若$k < d$,$\lim_{n \rightarrow \infty} \frac{p(n)}{n^k} = \lim_{n \rightarrow \infty} q(n) n^{d-k} = \infty \Longrightarrow p(n) = \omega(n^k)$
综上,最高项系数为正的$d$阶多项式$p(n) = \begin{cases} O(n^k), & k \ge d \\ \Omega(n^k), & k \le d \\ \Theta(n^k), & k = d \\ o(n^k), & k > d \\ \omega(n^k), & k < d \end{cases}$
等价关系 | 非严格偏序关系 | 严格偏序关系 | |||
---|---|---|---|---|---|
函数 | $\Theta$ | $O$ | $\Omega$ | $o$ | $\omega$ |
数 | $=$ | $\le$ | $\ge$ | $<$ | $>$ |
基于此类比易知有
自反性 | 对称性 | 转置对称性 | 传递性 | |
---|---|---|---|---|
$\Theta$ | ✓ | ✓ | ✗ | ✓ |
$O$ | ✓ | ✗ | ✓ | ✓ |
$\Omega$ | ✓ | ✗ | ✓ | ✓ |
$o$ | ✗ | ✗ | ✓ | ✓ |
$\omega$ | ✗ | ✗ | ✓ | ✓ |
求证:$f(n) = \Theta(f(n))$、$f(n) = O(f(n))$、$f(n) = \Omega(f(n))$
证明:$f(n)$渐进非负,设临界点为$n_f$,易知对$\forall n \ge n_f$有
$$ \begin{align*} \quad 0 \le 1 \cdot f(n) \le f(n) \le 1 \cdot f(n) \end{align*} $$
取$c_1 = c_2 = 1$、$n_0 = n_f$即有$f(n) = \Theta(f(n))$
由$f(n) = \Theta(f(n)) \Longleftrightarrow \begin{cases} f(n) = O(f(n)) \\ f(n) = \Omega(f(n)) \end{cases}$可知$O, \Omega$自反性成立
求证:$f(n) = \Theta(g(n)) \Longleftrightarrow g(n) = \Theta(f(n))$
证明:
$$ \begin{align*} f(n) & = \Theta(g(n)) \\ & \big \Updownarrow \\ \qquad \exists c_1, c_2, n_0 > 0 ~ & \forall n \ge n_0 : 0 \le c_1 g(n) \le f(n) \le c_2 g(n) \\ & \big \Updownarrow \\ \exists c_1, c_2, n_0 > 0 ~ & \forall n \ge n_0 : 0 \le f(n) / c_2 \le g(n) \le f(n) / c_1 \\ d_1 = 1 / c_2 ~ & \Biggl \Updownarrow ~ d_2 = 1 / c_1 \\ \exists d_1, d_2, n_0 > 0 ~ & \forall n \ge n_0 : 0 \le d_1 f(n) \le g(n) \le d_2 f(n) \\ & \big \Updownarrow \\ g(n) & = \Theta(f(n)) \end{align*} $$
求证:$f(n) = O(g(n)) \Longleftrightarrow g(n) = \Omega(f(n))$
证明:
$$ \begin{align*} f(n) & = O(g(n)) \\ & \big \Updownarrow \\ \qquad \exists c, n_0 > 0 ~ & \forall n \ge n_0 : 0 \le f(n) \le c g(n) \\ & \big \Updownarrow \\ \exists c, n_0 > 0 ~ & \forall n \ge n_0 : 0 \le f(n) / c \le g(n) \\ & \Biggl \Updownarrow ~ d = 1 / c \\ \exists d, n_0 > 0 ~ & \forall n \ge n_0 : 0 \le d f(n) \le g(n) \\ & \big \Updownarrow \\ g(n) & = \Omega(f(n)) \end{align*} $$
同理可证$f(n) = o(g(n)) \Longleftrightarrow g(n) = \omega(f(n))$
求证:$\begin{cases} f(n) = O(g(n)) \\ g(n) = O(h(n)) \end{cases} \Longrightarrow f(n) = O(h(n))$
证明:
$$ \begin{align*} & \qquad \qquad \begin{cases} f(n) = O(g(n)) : \exists c_1, n_1 > 0 ~ \forall n \ge n_1 : 0 \le f(n) \le c_1 g(n) \\ g(n) = O(h(n)) : \exists c_2, n_2 > 0 ~ \forall n \ge n_2 : 0 \le g(n) \le c_2 h(n) \end{cases} \\ & \qquad \qquad \qquad \qquad \qquad \big \Downarrow \\ & \qquad \qquad \exists c_1, c_2, n_1, n_2 > 0 ~ \forall n \ge \max \{n_1, n_2\} : 0 \le f(n) \le c_1 c_2 h(n) \\ & \qquad \qquad \qquad \qquad \qquad \Biggl \Downarrow ~ c = c_1 c_2, ~ n_0 = \max \{n_1, n_2\} \\ & \qquad \qquad \exists c, n_0 > 0 ~ \forall n \ge n_0 : 0 \le f(n) \le c h(n) \\ & \qquad \qquad \qquad \qquad \qquad \big \Downarrow \\ & \qquad \qquad \qquad \quad ~ f(n) = O(h(n)) \end{align*} $$
同理可证$\begin{cases} f(n) = \Omega(g(n)) \\ g(n) = \Omega(h(n)) \end{cases} \Longrightarrow f(n) = \Omega(h(n))$
求证:$\begin{cases} f(n) = \Theta(g(n)) \\ g(n) = \Theta(h(n)) \end{cases} \Longrightarrow f(n) = \Theta(h(n))$
证明:
$$ \begin{align*} \qquad \qquad \begin{cases} f(n) = \Theta(g(n)) \Longrightarrow \begin{cases} f(n) = O(g(n)) \\ f(n) = \Omega(g(n)) \end{cases} \\ g(n) = \Theta(h(n)) \Longrightarrow \begin{cases} g(n) = O(h(n)) \\ g(n) = \Omega(h(n)) \end{cases} \end{cases} \end{align*} $$
根据$O$、$\Omega$的传递性有$\begin{cases} f(n) = O(h(n)) \\ f(n) = \Omega(h(n)) \end{cases} \Longrightarrow f(n) = \Theta(h(n))$
求证:$\begin{cases} f(n) = o(g(n)) \\ g(n) = o(h(n)) \end{cases} \Longrightarrow f(n) = o(h(n))$
证明:
$$ \begin{align*} & \qquad \quad \begin{cases} f(n) = o(g(n)) : \forall c_1 > 0 ~ \exists n_1 > 0 ~ \forall n \ge n_1 : 0 \le f(n) < c_1 g(n) \\ g(n) = o(h(n)) : \forall c_2 > 0 ~ \exists n_2 > 0 ~ \forall n \ge n_2 : 0 \le g(n) < c_2 h(n) \end{cases} \\ & \qquad \qquad \qquad \qquad \qquad \big \Downarrow \\ & \qquad \qquad \forall c_1, c_2 > 0 ~ \exists n_1, n_2 > 0 ~ \forall n \ge \max \{n_1, n_2\} : 0 \le f(n) < c_1 c_2 h(n) \\ & \qquad \qquad \qquad \qquad \qquad \Biggl \Downarrow ~ c = c_1 c_2, ~ n_0 = \max \{n_1, n_2\} \\ & \qquad \qquad \forall c > 0 ~ \exists n_0 > 0 ~ \forall n \ge n_0 : 0 \le f(n) < c h(n) \\ & \qquad \qquad \qquad \qquad \qquad \big \Downarrow \\ & \qquad \qquad \qquad \quad ~ f(n) = o(h(n)) \end{align*} $$
同理可证$\begin{cases} f(n) = \omega(g(n)) \\ g(n) = \omega(h(n)) \end{cases} \Longrightarrow f(n) = \omega(h(n))$
求证:$\Theta( \Theta(f(n)) ) = \Theta(f(n))$,类似幂等性
证明:左边的渐进符号表示任意,等号表示属于$\in$,即
$$ \begin{align*} \quad \forall g(n) = \Theta(f(n)) ~ \forall h(n) = \Theta(g(n)) : h(n) \in \Theta(f(n)) \end{align*} $$
根据$\Theta$的传递性有$h(n) = \Theta(f(n))$,命题得证
求证:$\Theta(f(n)) + O(f(n)) = \Theta(f(n))$,$O$可被$\Theta$吸收
证明:左边的渐进符号表示任意,等号表示属于$\in$,即
$$ \begin{align*} \quad \forall g(n) = \Theta(f(n)) ~ \forall h(n) = O(f(n)) : g(n) + h(n) \in \Theta(f(n)) \end{align*} $$
根据定义
$$ \begin{align*} \quad & \exists c_1, c_2, n_g > 0 ~ \forall n \ge n_g : 0 \le c_1 f(n) \le g(n) \le c_2 f(n) \\ & \exists c_3, n_h > 0 ~ \forall n \ge n_h : 0 \le h(n) \le c_3 f(n) \end{align*} $$
对$\forall n \ge \max\{ n_g, n_h \}$有$0 \le c_1 f(n) \le g(n) + h(n) \le (c_2 + c_3) f(n)$
同理可证:$\Theta(f(n)) + o(f(n)) = \Theta(f(n))$,$o$也可被$\Theta$吸收
求证:$\Theta(f(n)) + \Theta(g(n)) = \Theta(f(n) + g(n))$,加法合并
证明:左边的渐进符号表示任意,等号表示属于$\in$,即
$$ \begin{align*} \quad \forall p(n) = \Theta(f(n)) ~ \forall q(n) = \Theta(g(n)) : p(n) + q(n) \in \Theta(f(n) + g(n)) \end{align*} $$
根据定义
$$ \begin{align*} \quad & \exists c_1, c_2, n_g > 0 ~ \forall n \ge n_g : 0 \le c_1 f(n) \le p(n) \le c_2 f(n) \\ & \exists c_3, c_4, n_h > 0 ~ \forall n \ge n_h : 0 \le c_3 g(n) \le q(n) \le c_4 g(n) \end{align*} $$
令$c_5 = \min \{c_1, c_3\}$、$c_6 = \max \{c_2, c_4\}$,对$\forall n \ge \max\{ n_g, n_h \}$有
$$ \begin{align*} \quad 0 \le c_5 (f(n) + g(n)) \le p(n) + q(n) \le c_6 (f(n) + g(n)) \end{align*} $$
求证:$\Theta(f(n)) \cdot \Theta(g(n)) = \Theta(f(n) g(n))$,乘法合并
证明:左边的渐进符号表示任意,等号表示属于$\in$,即
$$ \begin{align*} \quad \forall p(n) = \Theta(f(n)) ~ \forall q(n) = \Theta(g(n)) : p(n) q(n) \in \Theta(f(n) g(n)) \end{align*} $$
根据定义
$$ \begin{align*} \quad & \exists c_1, c_2, n_g > 0 ~ \forall n \ge n_g : 0 \le c_1 f(n) \le p(n) \le c_2 f(n) \\ & \exists c_3, c_4, n_h > 0 ~ \forall n \ge n_h : 0 \le c_3 g(n) \le q(n) \le c_4 g(n) \end{align*} $$
令$c_5 = c_1 c_3$、$c_6 = c_2 c_4$,对$\forall n \ge \max\{ n_g, n_h \}$有
$$ \begin{align*} \quad 0 \le c_5 f(n) g(n) \le p(n) q(n) \le c_6 f(n) g(n) \end{align*} $$
实数三歧性:$a > b$、$a = b$、$a < b$恰有一个成立 ✓
函数二歧性:$f(n) = O(g(n))$、$f(n) = \Omega(g(n))$恰有一个成立 ✗
设$f(n) = n$、$g(n) = n^{1 + \sin n}$,$\sin n$周期性地在$[-1,1]$上取值
为了保证二歧性,保持$O$不变,将$\Omega$改成$\mathop{\Omega}\limits^{\infty}$,其定义如下:
$$ \begin{align*} \qquad \qquad \qquad \quad \mathop{\Omega}\limits^{\infty}(g(n)) = \{ f(n) \mid \exists c > 0 \text{使得} 0 \le c g(n) \le f(n) \text{对无穷多个整数成立} \} \end{align*} $$
注意$\mathop{\Omega}\limits^{\infty}$不再要求渐进性了
有的书上渐进上界不要求非负,记其为$O'$,与$O$的关系如下:
$$ \begin{align*} \quad f(n) = O'(g(n)) \Longleftrightarrow |f(n)| = O(g(n)) \end{align*} $$
依然有$f(n) = \Theta(g(n))$等价于$f(n) = O'(g(n))$且$f(n) = \Omega(g(n))$
$$ \begin{align*} \quad & \widetilde{O}(g(n)) = \{ f(n) \mid \exists c, \class{blue}{k}, n_0 > 0 ~ \forall n \ge n_0 : 0 \le f(n) \le c g(n) \class{blue}{\lg^k n} \} \\ & \widetilde{\Omega}(g(n)) = \{ f(n) \mid \exists c, \class{blue}{k}, n_0 > 0 ~ \forall n \ge n_0 : 0 \le c g(n) \class{blue}{\lg^k n} \le f(n) \} \\ & \widetilde{\Theta}(g(n)) = \{ f(n) \mid \exists c_1, c_2, \class{blue}{k_1, k_2}, n_0 > 0 ~ \forall n \ge n_0 : \\ & \qquad \qquad \qquad \qquad \qquad 0 \le c_1 g(n) \class{blue}{\lg^{k_1} n} \le f(n) \le c_2 g(n) \class{blue}{\lg^{k_2} n} \} \end{align*} $$
例:归并排序的时间复杂度为$\widetilde{\Theta}(n)$
依然有$f(n) = \widetilde{\Theta}(g(n))$等价于$f(n) = \widetilde{O}(g(n))$且$f(n) = \widetilde{\Omega}(g(n))$
$$ \begin{align*} ~ & \Rightarrow: \widetilde{\Theta} : \exists c_1, c_2, k_1, k_2, n_0 > 0 \ldots \Longrightarrow \begin{cases} \widetilde{O} : \exists c_2, k_2, n_0 > 0 \ldots \\ \widetilde{\Omega} : \exists c_1, k_1, n_0 > 0 \ldots \end{cases} \\ & \Leftarrow: \begin{cases} \widetilde{O} : \exists c_2, k_2, n_2 > 0 \ldots \\ \widetilde{\Omega} : \exists c_1, k_1, n_1 > 0 \ldots \end{cases} \Longrightarrow \widetilde{\Theta} : \exists c_1, c_2, k_1, k_2, \max\{ n_1, n_2 \} > 0 \ldots \end{align*} $$
例:$f(n) = O(g(n)) \rightarrow g(n) = O(f(n))$是否成立?
不成立,$n = O(n^2)$,但$n^2 \ne O(n)$
例:$2^{n+1} = O(2^n)$是否成立?$2^{2n} = O(2^n)$是否成立?
前者成立,因为$0 \le 2^{n+1} \le 2 \cdot 2^n$,取$c=2$、$n_0 = 1$即可
后者若成立,则存在正常数$c$使得$2^{2n} = 2^n \cdot 2^n \le c \cdot 2^n$渐进成立
由此亦可得出
例:$f(n) = O((f(n))^2)$是否成立?
若成立,则$\exists c>0$使得$f(n) \le c (f(n))^2$,即$c f(n) \ge 1$渐进成立
若$f(n)$有常数渐进下界$l > 0$,取$c = 1/l$即可,否则结论不成立
例:$\min \{ f(n), g(n) \} = \Theta(f(n) + g(n))$是否成立?
不成立,取$f(n) = n$、$g(n) = n^2$,显然$n \ne \Theta(n^2)$
求证:$\max \{ f(n), g(n) \} = \Theta(f(n) + g(n))$
证明:易知$(f(n) + g(n)) / 2 \le \max \{ f(n), g(n) \} \le f(n) + g(n)$
取$c_1 = 1/2$、$c_2 = 1$即可
求证:$\lceil n \rceil^k = \Theta(n^k)$、$\lfloor n \rfloor^k = \Theta(n^k)$
证明:当$n \ge 2$时有$n/2 \le n - 1 < \lfloor n \rfloor \le n \le \lceil n \rceil < n+1 \le 2n$
无论哪种情况,均有$\lceil n \rceil^k = \Theta(n^k)$、$\lfloor n \rfloor^k = \Theta(n^k)$
求证:$(n + o(n))^k = \Theta(n^k)$
证明:左边的渐进符号表示任意,等号表示属于$\in$,即
$$ \begin{align*} \quad \forall f(n) = o(n) : (n + f(n))^k \in \Theta(n^k) \end{align*} $$
根据定义$\forall c > 0 ~ \exists n_0 > 0 ~\forall n \ge n_0 : 0 \le f(n) < c n$
特别的,取$c = 1/2$,则$0 \le f(n) < n/2 \le n$,$n \le n + f(n) \le 2n$
无论哪种情况,均有$(n + f(n))^k = \Theta(n^k)$
求证:$\lg ( \Theta(n)) = \Theta(\lg n)$
证明:左边的渐进符号表示任意,等号表示属于$\in$,即
$$ \begin{align*} \quad \forall f(n) = \Theta(n) : \lg (f(n)) \in \Theta(\lg n) \end{align*} $$
根据定义$\exists c_1, c_2, n_0 > 0$使得对$\forall n \ge n_0$有$0 \le c_1 n \le f(n) \le c_2 n$
从而$\lg c_1 + \lg n \le \lg (f(n)) \le \lg c_2 + \lg n$
于是对$\forall n \ge \max \{ n_0, 1/c_1^2, c_2 \}$有$\frac{1}{2} \lg n \le \lg (f(n)) \le 2 \lg n$
求证:$k \lg k = \Theta(n) \Longrightarrow k = \Theta (n / \lg n)$
证明:$\exists c_1, c_2, k_0 > 0~\forall k \ge k_0: 0 \le c_1 n \le k \lg k \le c_2 n$
从而$\lg c_1 + \lg n \le \lg k + \lg (\lg k) \le \lg c_2 + \lg n$
故对$\forall k \ge \max \{\exp(c_2), 1/ c_1 \}$有$\frac{1}{3} \lg n \le \lg k \le \lg n$
$\exists c_1, c_2, k_0 > 0 ~ \forall k \ge \max \{k_0, \exp(c_2), 1/ c_1 \}: c_1 \frac{n}{\lg n} \le k \le 3 c_2 \frac{n}{\lg n}$