| CPU | 算法 | 时间复杂度 | |
|---|---|---|---|
| 计算机 A | $10^{10}$条指令/秒 | 插入排序 | $2 \cdot n^2$ |
| 计算机 B | $10^7$条指令/秒 | 归并排序 | $50 \cdot n \lg n$ |
对长度一千万的数组进行排序,$n = 10^7$
\begin{align} \frac{2 \cdot (10^7)^2 \class{base01}{\text{指令}}}{10^{10} \class{base01}{\text{指令/秒}}} > 5.5 \class{base01}{\text{小时}}, \quad \frac{50 \cdot 10^7 \lg 10^7 \class{base01}{\text{指令}}}{10^7 \class{base01}{\text{指令/秒}}} < 20 \class{base01}{\text{分钟}} \end{align}
某个性质渐进成立:$\exists n_0 > 0$使得对$\forall n \ge n_0$,该性质成立
例:函数渐进非负:$\exists n_0 > 0$使得对$\forall n \ge n_0$,函数取值非负
例:$f(n) = \class{blue}{\Theta} (n^2)$:$\exists n_0 > 0$使得对$\forall n \ge n_0$,$f(n)$和二次函数$n^2$的增长速度一样快
除了表示一样快 (相等关系) 的$\Theta$,还有表示不等关系的$O$、$\Omega$、$o$、$\omega$
| 相等关系 | 不等关系 | 严格不等关系 | |||
|---|---|---|---|---|---|
| 函数 | $\Theta$ | $O$ | $\Omega$ | $o$ | $\omega$ |
| 数 | $=$ | $\le$ | $\ge$ | $<$ | $>$ |
引入 5 个渐进界刻画算法的渐进效率
| 含义 | 渐进上界 | 渐进下界 | 渐进紧确界 | 非紧确渐进上界 | 非紧确渐进下界 |
|---|---|---|---|---|---|
| 符号 | $O$ | $\Omega$ | $\Theta$ | $o$ | $\omega$ |
渐进界的严格定义
渐进界的各种性质和相互关系
渐进上界$O(g(n))$表示渐进意义下所有小于等于$g(n)$某个常数倍的非负函数,用于表示算法在最坏情况下的时间复杂度
\begin{align} 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} \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}
两点说明:
$\exists$表示“存在”,Exist首字母“E”的左右翻转;$\forall$表示“任意/所有”,All首字母“A”的上下翻转
对$d$阶多项式$p(n) = a_d n^d + a_{d-1} n^{d-1} + \cdots + a_1 n + a_0$,其中$a_d > 0$
记$q(n) \triangleq \frac{p(n)}{n^d} = a_d + \frac{a_{d-1}}{n} + \cdots + \frac{a_1}{n^{d-1}} + \frac{a_0}{n^d} \xrightarrow{~ n \rightarrow \infty ~} a_d$
根据极限定义,对$\forall \epsilon > 0$,存在$n_0$使得对$\forall n \ge n_0$有$|q(n) - a_d| \le \epsilon$
取$\epsilon = a_d/2$可得
\begin{align} \frac{a_d}{2} \le q(n) \le \frac{3 a_d}{2} \Longrightarrow \frac{a_d}{2} n^d \le p(n) \le \frac{3 a_d}{2} n^d \end{align}
这也印证了上一讲提到的:多项式的低阶项在其渐进界中可忽略
渐进紧确界$\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))$
证明:
\begin{align} \Longrightarrow: \quad & \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} \\ \Longleftarrow: \quad & \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, n_0 = \max\{ n_1, n_2 \} > 0 \ldots \end{align}
对$p(n) = \sum_{i=0}^d a_i n^i, ~ (a_d > 0)$,同时有$p(n) = O(n^d)$和$p(n) = \Omega(n^d)$成立,因此$p(n) = \Theta(n^d)$
综上,$p(n) = \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)$
非紧确渐进上界$o(g(n))$定义如下:
\begin{align} 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)$
由$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) \}$
\begin{align} \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 \end{align}
$f(n) = o(g(n))$表示在渐进意义下$f(n)$的增长速度严格慢于$g(n)$
对数函数$<$多项式函数$<$指数函数$<$阶乘函数:
非紧确渐进下界$\omega(g(n))$对比$\Omega(g(n))$同样是两点区别
\begin{align} \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] & \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)$
$\lim_{n \rightarrow \infty} f(n) / g(n) = \infty$在数学上是不严谨的写法,这里只是为了与$o$的$\lim_{n \rightarrow \infty} f(n) / g(n) = 0$对应
对$p(n) = \sum_{i=0}^d a_i n^i, ~ (a_d > 0)$,记$q(n) \triangleq \frac{p(n)}{n^d} \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)$
综上,$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}$
若等式右边为渐进界,如$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)$
若渐进界中的$g(n)$为常数,如$f(n) = O(1)$
如何理解当$n<3$时$T(n) = O(1)$?
累加中的渐进界,如$\sum_{i=1}^n \Theta (i)$,表示的是$\sum_{i=1}^n (a i + b)$,而不是$\Theta (1) + \Theta (2) + \cdots + \Theta (n)$,后者甚至不是良定义的
若不致引起误解,尽可能滥用 (abuse) 符号,可以简化表达
| 等价关系 | 非严格偏序关系 | 严格偏序关系 | |||
|---|---|---|---|---|---|
| 函数 | $\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} 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)) \\[4pt] \Longleftrightarrow ~ & \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) \\[4pt] \Longleftrightarrow ~ & \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 \\[4pt] \Longleftrightarrow ~ & \exists d_1 = 1 / c_2, d_2 = 1 / c_1, n_0 > 0 ~ \forall n \ge n_0 : 0 \le d_1 f(n) \le g(n) \le d_2 f(n) \\[4pt] \Longleftrightarrow ~ & 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)) \\[4pt] \Longleftrightarrow ~ & \exists c, n_0 > 0 ~ \forall n \ge n_0 : 0 \le f(n) \le c g(n) \\[4pt] \Longleftrightarrow ~ & \exists c, n_0 > 0 ~ \forall n \ge n_0 : 0 \le f(n) / c \le g(n) \\[4pt] \Longleftrightarrow ~ & \exists d = 1 / c, n_0 > 0 ~ \forall n \ge n_0 : 0 \le d f(n) \le g(n) \\[4pt] \Longleftrightarrow ~ & 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} & \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} \\[4pt] \Longrightarrow ~ & \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) \\[4pt] \Longrightarrow ~ & \exists c = c_1 c_2, n_0 = \max \{n_1, n_2\} > 0 ~ \forall n \ge n_0 : 0 \le f(n) \le c h(n) \\[4pt] \Longrightarrow ~ & 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} \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} & \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} \\[4pt] \Longrightarrow ~ & \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) \\[4pt] \overset{*}{\Longrightarrow} ~ & \forall c > 0 ~ \exists n_0 = \max \{n_1, n_2\} > 0 ~ \forall n \ge n_0 : 0 \le f(n) < c h(n) \\[4pt] \Longrightarrow ~ & f(n) = o(h(n)) \end{align}
$*$:若$c_1, c_2$的取值范围是$(0, \infty)$,则$c_1 c_2$的取值范围也恰好是$(0, \infty)$
同理可证$\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} \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} \forall g(n) = \Theta(f(n)) ~ \forall h(n) = O(f(n)) : g(n) + h(n) \in \Theta(f(n)) \end{align}
根据定义
\begin{align} & \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} \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} & \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} 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} \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} & \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} 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$是周期函数
为了保证二歧性,保持$O$不变,将$\Omega$改成$\mathop{\Omega}\limits^{\infty}$,不再要求渐进性:
\begin{align} \mathop{\Omega}\limits^{\infty}(g(n)) = \{ f(n) \mid \exists c > 0 : 0 \le c g(n) \le f(n) 对无穷多个整数成立\} \end{align}
有的算法教材的渐进上界不要求非负,记其为$O'$,与$O$的关系如下:
\begin{align} 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))$
定义$\widetilde{O}$、$\widetilde{\Omega}$、$\widetilde{\Theta}$如下:
\begin{align} & \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} & \Longrightarrow: \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} \\[-6pt] & \Longleftarrow: \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)) \Longrightarrow g(n) = O(f(n))$是否成立?
不成立,$n = O(n^2)$,但$n^2 \ne O(n)$
$2^{n+1} = O(2^n)$是否成立?
成立,因为$0 \le 2^{n+1} \le 2 \cdot 2^n$,取$c=2$、$n_0 = 1$即可
$2^{2n} = O(2^n)$是否成立?
不成立,否则存在正常数$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$,即$1 \le c f(n)$渐进成立
若$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 \ge 1$时$\min \{ n ,n^2 \} = n$,但显然$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} \forall f(n) \in 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} \forall f(n) \in \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$,故
\begin{align} \lg c_1 + \lg n \le \lg (f(n)) \le \lg c_2 + \lg n \end{align}
最后只需将上下界再放成$\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 k$的上下界均是$\lg 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}$