第一部分(3)
第三章 函数的增长
第二章定义了算法运行时间增长量级简单地刻画了算法效率,并且允许我们比较可选算法的相对性能。
虽然我们能够确定一个算法的精确运行时间,但是通常并不值得计算多余精度。
本章给出几种标准方法来简化算法的渐进分析。包括 Θ \Theta Θ。
3.1 渐进记号
本节将定义一些基本的渐进记号,并介绍一些常见的活用法。
渐进记号、函数与运行时间Θ ( n 2 ) 就 是 函 数 a n 2 + b n + c \Theta(n^2)就是函数an^2+ bn+ c Θ(n2)就是函数an2+bn+c
本书中对其使用渐进记号的函数通常刻画算法的运行时间。但是也适用于刻画其他方面(算法使用的空间数量)的函数
Θ记号
定义:
对 一 个 给 定 的 函 数 g ( n ) , 用 Θ ( g ( n ) ) 来 表 示 一 下 函 数 的 集 合 : 对一个给定的函数g(n), 用\Theta(g(n))来表示一下函数的集合: 对一个给定的函数g(n),用Θ(g(n))来表示一下函数的集合:
Θ ( g ( n ) ) = { f ( n ) : 存 在 正 常 量 c 1 、 c 2 和 n 0 , 使 得 对 所 有 n ≥ n 0 , 有 0 ≤ c 1 g ( n ) ≤ f ( n ) ≤ c 2 g ( n ) } \color{#FF0000} \Theta(g(n))= \color{#0000FF} \{f(n):存在正常量c_1 、c_2和n_0, 使得对所有n\ge n_0, 有0\le c_1g(n)\le f(n)\le c_2g(n)\} Θ(g(n))={f(n):存在正常量c1、c2和n0,使得对所有n≥n0,有0≤c1g(n)≤f(n)≤c2g(n)}
在集合记号中,冒号意指“使得”
若存在正常量 c 1 , c 2 c_1, c_2 c1,c2, 使得对于足够大的n, 函数f(n)能夹在 c 1 g ( n ) 与 c 2 g ( n ) 之 间 c_1g(n)与c_2g(n)之间 c1g(n)与c2g(n)之间, 则 f ( n ) 属 于 集 合 Θ ( g ( n ) ) 。 f(n)属于集合\Theta(g(n))。 f(n)属于集合Θ(g(n))。
可 以 记 作 : f ( n ) ∈ Θ ( g ( n ) ) , 作 为 替 代 , 通 常 记 为 : f ( n ) = Θ ( g ( n ) ) , 以 表 达 相 同 的 概 念 。 可以记作:f(n) \in \Theta(g(n)), 作为替代,通常记为:\color{#FF0000} f(n)= \Theta(g(n)), \color{#000000} 以表达相同的概念。 可以记作:f(n)∈Θ(g(n)),作为替代,通常记为:f(n)=Θ(g(n)),以表达相同的概念。
本节后可以看到这样做的好处
图中每个n0是最小可能值,任何更大的值也将有效。
上图:
(a):给出了函数f和g的直观画面,其中
f
(
n
)
=
Θ
(
g
(
n
)
)
。
\color{#FF0000} f(n)= \Theta(g(n))。
f(n)=Θ(g(n))。
对于
n
0
n_0
n0及其右边
n
n
n的所有值,f(n)都在二者之间;
换 句 话 说 : 对 所 有 n ≥ n 0 , 函 数 f ( n ) 在 一 个 常 量 因 子 内 等 于 g ( n ) 。 换句话说:对所有 n\ge n_0, 函数f(n)在一个常量因子内等于g(n)。 换句话说:对所有n≥n0,函数f(n)在一个常量因子内等于g(n)。
我们称g(n)是f(n)的一个渐近紧确界(asymptotically tight bound)。
在第二章,我们介绍了 Θ \Theta Θ记号的一种非形式化概念,相当于扔掉低阶项并忽略最高阶项前的系数。
让我们通过使用形式化定义证明 1 2 n 2 − 3 n = Θ ( n 2 ) \frac{1}{2}n^2- 3n= \Theta(n^2) 21n2−3n=Θ(n2)来简要地证实这种直觉。
$$
为此我们必须确定正常量c_1、c_2和n_0, 使得对所有n\ge n_0, 有:\
c_1n^2\le \frac{1}{2}n^2- 3n \le c_2n^2
\\Downarrow\
用n^2除上式得:\\Downarrow\
c_1\le \frac{1}{2}- \frac{3}{n} \le c_2
$$
通过选择任何常量c2>=1/2, 可以使右边的不等式对任何n>=1的值成立。同理对左边。
当然还存在其他选择, 但最重要的是存在某个选择。
同样:我们还可以使用形式化定义来证明 6 n 3 ≤ c 2 n 2 。 6n^{3}\le c_2n^2 。 6n3≤c2n2。反证法证明即可。
由于显然的原因: 将 c 1 置 为 稍 小 于 高 阶 项 系 数 的 值 , 并 将 c 2 置 为 稍 大 于 的 , 就 能 使 Θ 记 号 定 义 中 的 不 等 式 得 到 满 足 将c_1置为稍小于高阶项系数的值,并将c_2置为稍大于的,就能使\Theta记号定义中的不等式得到满足 将c1置为稍小于高阶项系数的值,并将c2置为稍大于的,就能使Θ记号定义中的不等式得到满足
例如:
f ( n ) = a n 2 + b n + c , 其 中 a 、 b 和 c 均 为 常 量 且 a > 0 ; ⇓ 为 了 形 式 化 证 明 f ( n ) = Θ ( n 2 ) ⇓ 我 们 取 c 1 = a 4 , c 2 = 7 a 4 , 且 n 0 = 2 × M A X ( ∣ b ∣ a , ∣ c ∣ a ) 。 ⇓ 此 时 可 以 证 明 : n ≥ n 0 , 有 0 ≤ c 1 n 2 ≤ a n 2 + b n + c ≤ c 2 n 2 ⇓ 一 般 来 说 , 对 任 意 多 项 式 p ( n ) = ∑ i = 0 d a i n i , 其 中 a i 为 常 量 且 a d > 0 , 我 们 有 p ( n ) = Θ ( n d ) ( 参 见 思 考 题 3 − 1 ) 。 f(n)= an^2+ bn+ c, 其中a 、b 和 c均为常量且a > 0; \\\Downarrow\\ 为了形式化证明f(n)= \Theta(n^2) \\\Downarrow\\ 我们取c_1= \frac{a}{4}, c_2= \frac{7a}{4}, 且n_0= 2 \times MAX(\frac{|b|}{a}, \sqrt{\frac{|c|}{a}})。 \\\Downarrow\\ 此时可以证明: n \ge n_0, 有0\le c_1n^2\le an^2+ bn+ c\le c_2n^2 \\\Downarrow\\ 一般来说,对任意多项式p(n)= \sum_{i=0}^{d}a_{i}n^{i}, 其中a_i为常量且a_d > 0,\\ 我们有p(n)= \Theta(n^{d}) (参见思考题3-1)。 f(n)=an2+bn+c,其中a、b和c均为常量且a>0;⇓为了形式化证明f(n)=Θ(n2)⇓我们取c1=4a,c2=47a,且n0=2×MAX(a∣b∣,a∣c∣)。⇓此时可以证明:n≥n0,有0≤c1n2≤an2+bn+c≤c2n2⇓一般来说,对任意多项式p(n)=i=0∑daini,其中ai为常量且ad>0,我们有p(n)=Θ(nd)(参见思考题3−1)。
Θ ( 1 ) 表 示 常 数 \Theta(1)表示常数 Θ(1)表示常数
O记号
当 只 有 一 个 渐 进 上 界 时 , 使 用 O 记 号 。 当只有一个\color{#FF0000} 渐进上界\color{#000000} 时,使用O记号。 当只有一个渐进上界时,使用O记号。
定义:
O ( g ( n ) ) = { f ( n ) : 存 在 正 常 量 c 和 n 0 , 使 得 对 所 有 n ≥ n 0 , 有 0 ≤ f ( n ) ≤ c g ( n ) } O(g(n))= \{f(n):存在正常量c和n_0,使得对所有n\ge n_0,有0\le f(n)\le cg(n)\} O(g(n))={f(n):存在正常量c和n0,使得对所有n≥n0,有0≤f(n)≤cg(n)}
因为 Θ 是 比 O 记 号 更 强 的 概 念 。 按 照 集 合 论 , 有 Θ ( g ( n ) ) ⊆ O ( g ( n ) ) 。 \Theta 是比 O记号更强的概念。按照集合论,有\Theta (g(n)) \subseteq O(g(n))。 Θ是比O记号更强的概念。按照集合论,有Θ(g(n))⊆O(g(n))。
令人惊奇的是, 当a>0时,任意线性函数an+b也在O(n^2)中,很容易证明;
Ω记号
渐进下界;
Ω ( 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):存在正常量c和n0,使得对所有n≥n0,有0≤cg(n)≤f(n)}
根据目前所知这些渐进记号的定义,容易证明一下重要定理(参见练习3.1-5)。
定 理 3.1 对 任 意 两 个 函 数 f ( n ) 和 g ( n ) , 我 们 有 f ( n ) = Θ ( g ( n ) ) , 当 且 仅 当 f ( n ) = O ( g ( n ) ) 且 f ( n ) = Ω ( g ( n ) ) 。 定理3.1 对任意两个函数f(n)和g(n), 我们有f(n)= \Theta(g(n)), 当且仅当f(n)= O(g(n))且f(n)= \Omega(g(n))。 定理3.1对任意两个函数f(n)和g(n),我们有f(n)=Θ(g(n)),当且仅当f(n)=O(g(n))且f(n)=Ω(g(n))。
插 入 排 序 的 运 行 时 间 介 于 Ω ( n ) 和 O ( n 2 ) , 因 为 它 落 在 n 的 线 性 函 数 与 n 的 二 次 函 数 之 间 的 任 何 地 方 。 插入排序的运行时间介于\Omega(n)和O(n^2), 因为它落在n的线性函数与n的二次函数之间的任何地方。 插入排序的运行时间介于Ω(n)和O(n2),因为它落在n的线性函数与n的二次函数之间的任何地方。
然 而 , 可 以 称 插 入 排 序 的 最 坏 情 况 运 行 时 间 为 Ω ( n 2 ) 并 不 矛 盾 。 然而,可以称插入排序的\color{#FF0000} 最坏情况 \color{#000000} 运行时间为\Omega(n^2)并不矛盾。 然而,可以称插入排序的最坏情况运行时间为Ω(n2)并不矛盾。
等式和不等式中的渐进记号当 渐 进 记 号 独 立 于 等 式 ( 或 不 等 式 ) 的 右 边 ( 即 不 在 一 个 更 大 的 公 式 内 ) 时 , 如 在 n = O ( n 2 ) 中 , 我 们 已 经 定 义 等 号 意 指 集 合 的 成 员 关 系 : n ∈ O ( n 2 ) 当渐进记号独立于等式(或不等式)的右边(即不在一个更大的公式内)时,如在\color{#FF0000} n= O(n^2)\color{#000000} 中,我们已经定义等号意指集合的成员关系:\color{#FF0000} n \in O(n^2) 当渐进记号独立于等式(或不等式)的右边(即不在一个更大的公式内)时,如在n=O(n2)中,我们已经定义等号意指集合的成员关系:n∈O(n2)
用具体的函数表示渐进记号可以帮助消除一个等式中无关紧要的细节与混乱。
我们将表达式中的渐进记号视为匿名函数;
一个表达式中匿名函数的数目可以理解为渐进记号出现的次数。
例 如 ∑ i = 1 n O ( i ) 中 只 有 一 个 匿 名 函 数 ( 一 个 i 的 函 数 ) , 而 写 作 O ( 1 ) + O ( 2 ) + . . . 没 有 一 个 清 晰 的 解 释 例如\sum_{i=1}^{n} O(i)中只有一个匿名函数(一个i的函数), 而写作O(1)+ O(2)+ ... 没有一个清晰的解释 例如∑i=1nO(i)中只有一个匿名函数(一个i的函数),而写作O(1)+O(2)+...没有一个清晰的解释
要是左边也有渐进记号,我们用以下规则来解释这种等式:
无论怎样选择等号左边的匿名函数,总有一种办法来选择等号右边的匿名函数使等式成立。
例如:
2
n
2
+
Θ
(
n
)
=
Θ
(
n
2
)
对
任
意
函
数
f
(
n
)
∈
Θ
(
n
)
,
存
在
某
个
函
数
g
(
n
)
∈
Θ
(
n
2
)
,
使
得
对
所
有
的
n
,
有
2
n
2
+
f
(
n
)
=
g
(
n
)
。
2n^2+ \Theta(n)= \Theta(n^2) \\ 对任意函数f(n)\in\Theta(n), 存在某个函数g(n)\in\Theta(n^2), 使得对所有的n, 有2n^2+ f(n)= g(n)。
2n2+Θ(n)=Θ(n2)对任意函数f(n)∈Θ(n),存在某个函数g(n)∈Θ(n2),使得对所有的n,有2n2+f(n)=g(n)。
可见等式右边比左边粗糙
现在我们就可以解释类似2 n 2 + 3 n + 1 = 2 n 2 + Θ ( n ) = Θ ( n 2 ) 2n^2+ 3n+ 1= 2n^2+ \Theta(n)= \Theta(n^2) 2n2+3n+1=2n2+Θ(n)=Θ(n2)
等式还直观上让我们知道 2 n 2 + 3 n + 1 = Θ ( n 2 ) 2n^2+ 3n+ 1= \Theta(n^2) 2n2+3n+1=Θ(n2)
o记号
表示一个非渐进紧确的上界。
o ( g ( n ) ) = { f ( n ) : 对 任 意 正 常 量 c > 0 , 存 在 常 量 n 0 > 0 , 使 得 对 所 有 n ≥ n 0 , 有 0 ≤ f ( n ) < c g ( n ) } \color{#FF0000} o(g(n))= \{f(n): 对任意正常量c>0, 存在常量n_0>0, 使得对所有n\ge n_0, 有0\le f(n)<cg(n)\} o(g(n))={f(n):对任意正常量c>0,存在常量n0>0,使得对所有n≥n0,有0≤f(n)<cg(n)}
例 如 , 2 n = o ( n 2 ) , 但 是 2 n 2 ≠ o ( n 2 ) 例如,2n= o(n^2), 但是2n^2 \neq o(n^2) 例如,2n=o(n2),但是2n2=o(n2)
与O记号定义相似
与O记号的主要区别是:在 f ( n ) = O ( g ( n ) ) 中 , 界 0 ≤ f ( n ) ≤ c g ( n ) 对 某 个 常 量 c > 0 成 立 , 而 o 中 是 对 所 有 常 量 c > 0 成 立 f(n)= O(g(n))中,界0\le f(n) \le cg(n)对某个常量c>0成立,而o中是对所有常量c>0成立 f(n)=O(g(n))中,界0≤f(n)≤cg(n)对某个常量c>0成立,而o中是对所有常量c>0成立
而且:
lim n → ∞ f ( n ) g ( n ) = 0 \color{#FF0000} \lim_{n \to \infty} \frac{f(n)}{g(n)}= 0 n→∞limg(n)f(n)=0
有些学者用这个极限作为o记号的定义;本书中的定义还限定匿名函数是渐进非负的。
ω记号
ω记号与Ω记号的关系类似于o记号和O记号的关系。
我们使用ω记号来表示一个非渐进紧确的下界。
定义它的一种方式是:
f ( n ) ∈ ω ( g ( n ) ) , 当 且 仅 当 g ( n ) ∈ o ( f ( n ) ) f(n)\in \omega(g(n)) ,当且仅当g(n)\in o(f(n)) f(n)∈ω(g(n)),当且仅当g(n)∈o(f(n))
形式化定义为:
ω ( g ( n ) ) = { f ( n ) : 对 任 意 正 常 量 c > 0 , 存 在 常 量 n 0 > 0 , 使 得 对 所 有 n ≥ n 0 , 有 0 ≤ c g ( n ) < f ( n ) } \color{#FF0000} \omega(g(n))= \{f(n):对任意正常量c>0, 存在常量n_0>0, 使得对所有n\ge n_0, 有0\le cg(n) < f(n)\} ω(g(n))={f(n):对任意正常量c>0,存在常量n0>0,使得对所有n≥n0,有0≤cg(n)<f(n)}
lim n → ∞ f ( n ) g ( n ) = ∞ \lim_{n \to \infty} \frac{f(n)}{g(n)}= \infin n→∞limg(n)f(n)=∞
比较各种函数如果这个极限存在,那么当n趋于无穷时,f(n)相对于g(n)来说变得任意大了。
实数的许多关系性质也适用于渐进比较。
传递性:
自反性: f ( n ) = Θ ( f ( n ) ) f(n)= \Theta(f(n)) f(n)=Θ(f(n)) …
对称性:
转置对称性:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ke7uToC5-1600073236559)(pic/text1.png)]
若 f ( n ) = o ( g ( n ) ) , 则 称 f ( n ) 渐 进 小 于 g ( n ) ; 若 f ( n ) = ω ( g ( n ) ) , 则 称 f ( n ) 渐 进 大 于 g ( n ) 。 若f(n)= o(g(n)), 则称f(n)渐进小于g(n); 若f(n)= \omega(g(n)), 则称f(n)渐进大于g(n)。 若f(n)=o(g(n)),则称f(n)渐进小于g(n);若f(n)=ω(g(n)),则称f(n)渐进大于g(n)。
然而,实数的下列性质不能携带到渐进记号:
三分性,因为值有波动。
练习
3.1-1 假设f(n)与g(n)都是渐进非负函数。使用Θ记号的基本定义来证明max(f(n), g(n)) = Θ(f(n)+g(n))。
Θ ( g ( n ) ) = { f ( n ) : 存 在 正 常 量 c 1 、 c 2 和 n 0 , 使 得 对 所 有 n ≥ n 0 , 有 0 ≤ c 1 g ( n ) ≤ f ( n ) ≤ c 2 g ( n ) } \color{#FF0000} \Theta(g(n))= \color{#0000FF} \{f(n):存在正常量c_1 、c_2和n_0, 使得对所有n\ge n_0, 有0\le c_1g(n)\le f(n)\le c_2g(n)\} Θ(g(n))={f(n):存在正常量c1、c2和n0,使得对所有n≥n0,有0≤c1g(n)≤f(n)≤c2g(n)}
都是渐进非负,根据定义:
存 在 N f 和 N g , 使 得 当 n > n f 和 n > n g 时 , f ( n ) ≥ 0 和 g ( n ) ≥ 0 ; 存在N_{f}和N_{g}, 使得当n>n_f和n>n_g时,f(n) \ge 0和g(n) \ge 0; 存在Nf和Ng,使得当n>nf和n>ng时,f(n)≥0和g(n)≥0;
所 以 , 我 们 取 n 0 = m a x ( n f , n g ) , 当 n > n 0 时 , f ( n ) ≥ 0 , g ( n ) ≥ 0 所以,我们取n_0= max(n_{f}, n_{g}),\color{#FF0000} 当n>n_0时,f(n)\ge 0, g(n)\ge 0 所以,我们取n0=max(nf,ng),当n>n0时,f(n)≥0,g(n)≥0
接 着 取 c 1 = 1 2 , c 2 = 1 , 当 n > n 0 时 : \color{#FF0000} 接着取c_1=\frac{1}{2}, c_2= 1,\color{#000000} 当n>n_0时: 接着取c1=21,c2=1,当n>n0时:
f ( n ) + g ( n ) 2 ≤ m a x ( f ( n ) , g ( n ) ) ≤ f ( n ) + g ( n ) \frac{f(n)+ g(n)}{2}\le max(f(n), g(n)) \le f(n)+ g(n) 2f(n)+g(n)≤max(f(n),g(n))≤f(n)+g(n)
3.1-2 证明:对任意实常量a和b,其中b>0, 有
( n + a ) b = Θ ( n b ) (n+ a)^{b}= \Theta(n^{b}) (n+a)b=Θ(nb)
我们为此要找到 当 c 1 , c 2 , n 0 > 0 时 : 0 ≤ c 1 n b ≤ ( n + a ) b ≤ c 2 n b 当c_1, c_2, n_0 > 0时:\quad 0\le c_1n^{b}\le (n+ a)^{b} \le c_2n^{b} 当c1,c2,n0>0时:0≤c1nb≤(n+a)b≤c2nb
Note that:
n + a ≤ n + ∣ a ∣ a n d ≤ 2 n , w h e n ∣ a ∣ ≤ n n + a \le n + |a| \quad and \quad \le 2n, \quad when |a| \le n n+a≤n+∣a∣and≤2n,when∣a∣≤n
n + a ≥ n − ∣ a ∣ a n d ≤ 1 2 n , w h e n ∣ a ∣ ≤ 1 2 n n + a \ge n - |a| \quad and \quad \le \frac{1}{2}n, \quad when |a|\le \frac{1}{2}n n+a≥n−∣a∣and≤21n,when∣a∣≤21n
因此, 当 n ≥ 2 ∣ a ∣ 时 , 0 ≤ 1 2 n ≤ n + a ≤ 2 n 当n\ge 2 |a|时, 0\le \frac{1}{2}n \le n+ a \le 2n 当n≥2∣a∣时,0≤21n≤n+a≤2n
若b>0, 有:
0 ≤ ( 1 2 n ) b ≤ ( n + a ) b ≤ ( 2 n ) b , ⇓ 0 ≤ ( 1 2 ) b n b ≤ ( n + a ) b ≤ 2 b n b , 0 \le (\frac{1}{2}n)^{b} \le (n+a)^{b} \le (2n)^{b}, \\\Downarrow\\ 0 \le (\frac{1}{2})^{b}n^{b} \le (n+a)^{b} \le 2^{b}n^{b}, 0≤(21n)b≤(n+a)b≤(2n)b,⇓0≤(21)bnb≤(n+a)b≤2bnb,
因此, c 1 = ( 1 2 ) b , c 2 = 2 b 和 n 0 = 2 ∣ a ∣ 满 足 定 义 c_1=(\frac{1}{2})^{b}, c_2= 2^{b}和n_0= 2 |a|满足定义 c1=(21)b,c2=2b和n0=2∣a∣满足定义
3.1-3 解释为什么“算法A的运行时间至少是 O(n^2)”这一表述无意义
运行时间T(n)。 T ( n ) ≥ O ( n 2 ) 意 味 着 T ( n ) ≥ f ( n ) , f ( n ) ∈ O ( n 2 ) , g ( n ) = 0 时 , T ( n ) ≥ 0 , 而 这 没 有 意 义 T(n)\ge O(n^2)意味着T(n)\ge f(n), f(n) \in O(n^2),g(n)= 0 时,T(n)\ge 0, 而这没有意义 T(n)≥O(n2)意味着T(n)≥f(n),f(n)∈O(n2),g(n)=0时,T(n)≥0,而这没有意义
3.1-4 2n+1 = O(2n)成立吗? 22n = O(2n)成立吗?
O ( g ( n ) ) = { f ( n ) : 存 在 正 常 量 c 和 n 0 , 使 得 对 所 有 n ≥ n 0 , 有 0 ≤ f ( n ) ≤ c g ( n ) } \color{#FF0000} O(g(n))= \{f(n):存在正常量c和n_0,使得对所有n\ge n_0,有0\le f(n)\le cg(n)\} O(g(n))={f(n):存在正常量c和n0,使得对所有n≥n0,有0≤f(n)≤cg(n)}
2 n + 1 = 2 × 2 n 所 以 ≤ 2 × 2 n 而 2 2 n 若 成 立 , 则 2 2 n ≤ c 2 n ⇓ n ≤ l g c ⇓ 因 为 c 是 常 数 , 对 任 意 大 的 n 不 可 能 成 立 , 由 此 反 证 2^{n+ 1}= 2\times 2^{n} 所以 \le 2\times 2^{n}\\ 而2^{2n}若成立,则2^{2n} \le c_2^{n} \\\Downarrow\\ n\le lgc \\\Downarrow\\ 因为c是常数,对任意大的n不可能成立, 由此反证 2n+1=2×2n所以≤2×2n而22n若成立,则22n≤c2n⇓n≤lgc⇓因为c是常数,对任意大的n不可能成立,由此反证
3.1-5 证明定理3.1
定 理 3.1 对 任 意 两 个 函 数 f ( n ) 和 g ( n ) , 我 们 有 f ( n ) = Θ ( g ( n ) ) , 当 且 仅 当 f ( n ) = O ( g ( n ) ) 且 f ( n ) = Ω ( g ( n ) ) 。 定理3.1 对任意两个函数f(n)和g(n), 我们有f(n)= \Theta(g(n)), 当且仅当f(n)= O(g(n))且f(n)= \Omega(g(n))。 定理3.1对任意两个函数f(n)和g(n),我们有f(n)=Θ(g(n)),当且仅当f(n)=O(g(n))且f(n)=Ω(g(n))。
TODO: <12-09-20, wgc> >
3.1-6 证明:一个算法的运行时间为Θ(g(n))当且仅当其最坏情况运行时间为O(g(n)), 且其最好情况运行时间为Ωg(n)。
由定义可易证
3.1-7 证明:o(g(n)) ⋂ ω(g(n))为空集。
令
f
∈
(
o
(
g
(
n
)
)
∩
ω
(
g
(
n
)
)
)
,
同
时
这
意
味
着
f
=
o
(
g
(
n
)
)
=
ω
(
g
(
n
)
)
由
定
义
:
⇓
lim
n
→
∞
(
f
(
n
)
/
g
(
n
)
)
=
0
,
(
o
定
义
)
lim
n
→
∞
(
f
(
n
)
/
g
(
n
)
)
=
∞
,
(
ω
定
义
)
令 f \in (o(g(n))\cap \omega(g(n))), 同时这意味着f = o(g(n))= \omega(g(n)) 由定义: \\\Downarrow\\ \lim_{n \to \infty} (f(n)/g(n))= 0 \quad ,(o定义) \\ \lim_{n \to \infty} (f(n)/g(n))= \infty \quad ,(\omega定义)
令f∈(o(g(n))∩ω(g(n))),同时这意味着f=o(g(n))=ω(g(n))由定义:⇓n→∞lim(f(n)/g(n))=0,(o定义)n→∞lim(f(n)/g(n))=∞,(ω定义)
矛盾
3.1-8
TODO: <12-09-20, wgc> >
3.1 标准记号与常用函数
本节将回顾一些标准的数学函数与记号并探索它们之间的关系,还将阐明渐进记号的应用。
单调性,向上取整和向下取整,模运算(
a
≡
b
(
m
o
d
n
)
,
称
模
n
时
a
等
价
于
b
a\equiv b(mod \quad n), 称模n时a等价于b
a≡b(modn),称模n时a等价于b),多项式(对于一个d次渐进正的多项式p(n)), 有p(n)=Θ(nd)。若对某个常量k, 有f(n)=O(nk), 则称函数f(n)是多项式有界的),
指数,
对数,
阶乘
多重函数
多重对数函数
斐波那契数
TODO: <12-09-20, wgc> >