算法导论第三章:函数的增长
笔记参考链接:http://www.cnblogs.com/wuwenyan/p/4982713.html
习题参考链接1:http://www.cnblogs.com/Jiajun/archive/2013/05/06/3063574.html
习题参考链接2:https://ita.skanev.com/
笔记
当算法的输入
n
n
n 非常大的时候,对于算法复杂度的分析就显得尤为重要,虽然有时我们能通过一定的方法得到较为精确的运行时间,但是很多时候,或者说绝大多数时候,我们并不值得去花精力求得多余的精度,因为精确运行时间中的倍增常量和低阶项已经被输入规模本身的影响所支配。
我们需要关心的是输入规模无限增加,在极限中,运行时间是如何随着输入规模增大而增加的,通常来说,在极限情况下渐进地更优的算法在除很小的输入外的所有情况下将是最好的选择。
前提假设:本章定义的所有用在渐近记号中的函数均渐近非负(包括f(n),g(n))。
3.1渐近记号
3.1.1
Θ
\Theta
Θ 记号
定义:对于一个给定的函数
g
(
n
)
g(n)
g ( n ) ,用
Θ
(
g
(
n
)
)
\Theta(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
)
}
:存在正常量、和,使得对所有有\Theta(g(n))=\{f(n):存在正常量c_1、c_2和n_0,使得对所有n\geq n_0,有0\leq c_1g(n)\leq f(n)\leq c_2g(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 ) }
含义是:若存在常数
c
1
c_1
c 1 和
c
2
c_2
c 2 ,使得对于足够大的
n
n
n ,函数
f
(
n
)
f(n)
f ( n ) 能够"夹入
c
1
g
(
n
)
c_1g(n)
c 1 g ( n ) 和
c
2
g
(
n
)
c2g(n)
c 2 g ( n ) 之间,则
f
(
n
)
f(n)
f ( n ) 属于集合
Θ
(
g
(
n
)
)
\Theta(g(n))
Θ ( g ( n ) ) 。我们称
g
(
n
)
g(n)
g ( n ) 为
f
(
n
)
f(n)
f ( n ) 的一个渐近紧确界(asymptotially tight bound)。
注意:
Θ
(
g
(
n
)
)
\Theta(g(n))
Θ ( g ( n ) ) 是一个函数的集合 ,所以如果要表示
f
(
n
)
f(n)
f ( n ) 是
Θ
(
g
(
n
)
)
\Theta(g(n))
Θ ( g ( n ) ) 的一员,则需写为
f
(
n
)
∈
Θ
(
g
(
n
)
)
f(n)\in \Theta(g(n))
f ( n ) ∈ Θ ( g ( n ) ) ,但是在很多教材中,通常使用
f
(
n
)
=
Θ
(
g
(
n
)
)
f(n)=\Theta(g(n))
f ( n ) = Θ ( g ( n ) ) 来表示相同的概念,这属于对于等式的一个活用。
下图形象地表示了渐近紧确界的形式:
3.1.2
O
O
O 记号
定义:对于一个给定的函数
g
(
n
)
g(n)
g ( n ) ,用
O
(
g
(
n
)
)
O(g(n))
O ( g ( n ) ) 来表示以下函数的集合 :
:
存
在
正
常
量
和
,
使
得
对
所
有
有
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\geq n_0,有0\leq f(n)\leq cg(n)\}
: 存 在 正 常 量 和 , 使 得 对 所 有 有 O ( g ( n ) ) = { f ( n ) : 存 在 正 常 量 c 和 n 0 , 使 得 对 所 有 n ≥ n 0 , 有 0 ≤ f ( n ) ≤ c g ( n ) }
含义是:对于足够大的
n
n
n ,
f
(
n
)
f(n)
f ( n ) 的值总小于或等于
c
g
(
n
)
cg(n)
c g ( n ) 。我们称
g
(
n
)
g(n)
g ( n ) 为
f
(
n
)
f(n)
f ( n ) 的一个渐近上界(asymptotic upper bound)。
注意:在很多教材中,会发现用
O
(
g
(
n
)
)
O(g(n))
O ( g ( n ) ) 来表示一个渐近紧确界,即
Θ
(
g
(
n
)
)
\Theta(g(n))
Θ ( g ( n ) ) 表示的含义,这是不准确的,在算法文献中,标准的做法是区分渐近上界和渐近紧确界。
下图形象地表示了渐近上界的形式:
3.1.3
Ω
\Omega
Ω 记号
定义:对于一个给定的函数
g
(
n
)
g(n)
g ( n ) ,用
Ω
(
g
(
n
)
)
\Omega(g(n))
Ω ( g ( n ) ) 来表示以下函数的集合 :
:
存
在
正
常
量
和
,
使
得
对
所
有
有
Ω
(
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\geq n_0,有0\leq cg(n)\leq f(n)\}
: 存 在 正 常 量 和 , 使 得 对 所 有 有 Ω ( g ( n ) ) = { f ( n ) : 存 在 正 常 量 c 和 n 0 , 使 得 对 所 有 n ≥ n 0 , 有 0 ≤ c g ( n ) ≤ f ( n ) }
含义是:对于足够大的
n
n
n ,
f
(
n
)
f(n)
f ( n ) 的值总大于或等于
c
g
(
n
)
cg(n)
c g ( n ) 。我们称
g
(
n
)
g(n)
g ( n ) 为
f
(
n
)
f(n)
f ( n ) 的一个渐近下界(asymptotic lower bound)。
下图形象地表示了渐近下界的形式:
3.1.4
o
o
o 记号和
ω
\omega
ω 记号
定义:对于一个给定的函数
g
(
n
)
g(n)
g ( n ) ,用
o
(
g
(
n
)
)
o(g(n))
o ( g ( n ) ) 来表示以下函数的集合 :
:
对
任
何
正
常
量
,
存
在
常
量
,
使
得
对
所
有
有
o
(
g
(
n
)
)
=
{
f
(
n
)
:
对
任
何
正
常
量
c
>
0
,
存
在
常
量
n
0
>
0
,
使
得
对
所
有
n
≥
n
0
,
有
0
≤
f
(
n
)
≤
c
g
(
n
)
}
:对任何正常量,存在常量,使得对所有有o(g(n))=\{f(n):对任何正常量c>0,存在常量n_0>0,使得对所有n\geq n_0,有0\leq f(n)\leq cg(n)\}
: 对 任 何 正 常 量 , 存 在 常 量 , 使 得 对 所 有 有 o ( g ( n ) ) = { f ( n ) : 对 任 何 正 常 量 c > 0 , 存 在 常 量 n 0 > 0 , 使 得 对 所 有 n ≥ n 0 , 有 0 ≤ f ( n ) ≤ c g ( n ) }
含义可类比于
O
(
g
(
n
)
)
O(g(n))
O ( g ( n ) ) ,但表现的是一个非渐进紧确的上界。理解为
f
(
n
)
f(n)
f ( n ) 比
g
(
n
)
g(n)
g ( n ) 低一级幂次 。如
2
n
2n
2 n 和
3
n
2
3n^2
3 n 2 。
定义:对于一个给定的函数
g
(
n
)
g(n)
g ( n ) ,用
ω
(
g
(
n
)
)
\omega(g(n))
ω ( g ( n ) ) 来表示以下函数的集合 :
:
对
任
何
正
常
量
,
存
在
常
量
,
使
得
对
所
有
有
ω
(
g
(
n
)
)
=
{
f
(
n
)
:
对
任
何
正
常
量
c
>
0
,
存
在
常
量
n
0
>
0
,
使
得
对
所
有
n
≥
n
0
,
有
0
≤
c
g
(
n
)
≤
f
(
n
)
}
:对任何正常量,存在常量,使得对所有有\omega(g(n))=\{f(n):对任何正常量c>0,存在常量n_0>0,使得对所有n\geq n_0,有0\leq cg(n)\leq f(n)\}
: 对 任 何 正 常 量 , 存 在 常 量 , 使 得 对 所 有 有 ω ( g ( n ) ) = { f ( n ) : 对 任 何 正 常 量 c > 0 , 存 在 常 量 n 0 > 0 , 使 得 对 所 有 n ≥ n 0 , 有 0 ≤ c g ( n ) ≤ f ( n ) }
含义可类比于
Ω
(
g
(
n
)
)
\Omega(g(n))
Ω ( g ( n ) ) ,但表现的是一个非渐进紧确的下界。理解为
f
(
n
)
f(n)
f ( n ) 比
g
(
n
)
g(n)
g ( n ) 高一级幂次 。如
2
n
3
2n^3
2 n 3 和
3
n
2
3n^2
3 n 2 。
3.2常用函数性质总结
(1)对任意整数n,存在以下性质:
(2)对于某个常量k,如果存在 ,则称函数
f
(
n
)
f(n)
f ( n ) 为多项式有界的。
(3)多项式与指数的增长率可以通过以下事实相关联。对于所有使得
a
>
1
a>1
a > 1 的实常量a和b,有
据此可知
因此,任意底大于1的指数函数增长都比多项式函数快。
(4)在(3)的第一个等式中,用
l
g
n
lgn
l g n 代替
n
n
n ,并用
2
a
2^a
2 a 代替
a
a
a ,可以使得多项式与多对数的增长相互关联:
可以得到,对于任意常量
a
>
0
a>0
a > 0 ,有
因此,任意正的多项式函数都比任意多对数函数增长快。
(5)阶乘函数的弱上界为
n
!
<
=
n
n
n!<=n^n
n ! < = n n ,因为在
n
n
n 的阶乘中,
n
n
n 的每项最多为
n
n
n 。斯特林近似公式给出了一个更紧确的上界和下界:
习题
3.1节练习
习题3.1-1
假设
f
(
n
)
f(n)
f ( n ) 与
g
(
n
)
g(n)
g ( n ) 都是渐进非负函数。利用
Θ
\Theta
Θ 记号的基本定义来证明
m
a
x
(
f
(
n
)
,
g
(
n
)
)
=
Θ
(
f
(
n
)
+
g
(
n
)
)
max(f(n),g(n))=\Theta(f(n)+g(n))
m a x ( f ( n ) , g ( n ) ) = Θ ( f ( n ) + g ( n ) ) 。
存在
c
1
=
1
/
2
c_1=1/2
c 1 = 1 / 2 时,
,
m
a
x
(
f
(
n
)
,
g
(
n
)
≥
1
/
2
(
f
(
n
)
+
g
(
n
)
,max(f(n),g(n)\geq 1/2(f(n)+g(n)
, m a x ( f ( n ) , g ( n ) ≥ 1 / 2 ( f ( n ) + g ( n )
存在
c
2
=
1
c_2 = 1
c 2 = 1 时,
,
m
a
x
(
f
(
n
)
,
g
(
n
)
≤
(
f
(
n
)
+
g
(
n
)
,max(f(n),g(n)\leq (f(n)+g(n)
, m a x ( f ( n ) , g ( n ) ≤ ( f ( n ) + g ( n )
所以根据
Θ
\Theta
Θ 记号的基本定义,
,
m
a
x
(
f
(
n
)
,
g
(
n
)
=
Θ
(
f
(
n
)
+
g
(
n
)
,max(f(n),g(n)=\Theta (f(n)+g(n)
, m a x ( f ( n ) , g ( n ) = Θ ( f ( n ) + g ( n ) 。得证。
习题3.1-2
证明:对任意实常数
a
a
a 和
b
b
b ,其中
b
>
0
b>0
b > 0 ,有
(
n
+
a
)
b
=
Θ
(
n
b
)
(n+a)^b=\Theta(n^b)
( n + a ) b = Θ ( n b ) 。
(
n
+
a
)
b
=
n
b
+
c
1
n
b
−
1
+
c
2
n
b
−
2
+
⋯
+
a
b
=
n
b
+
Θ
(
n
b
−
1
)
=
Θ
(
n
b
)
(n+a)^b = n^b + c_1 n^{b-1} + c_2 n^{b-2} + \cdots + a^b=n^b+\Theta(n^{b-1})=\Theta (n^b)
( n + a ) b = n b + c 1 n b − 1 + c 2 n b − 2 + ⋯ + a b = n b + Θ ( n b − 1 ) = Θ ( n b )
习题3.1-3
解释为什么 “算法A的运行时间至少是
O
(
n
2
)
O(n^2)
O ( n 2 ) ” 这一表述是无意义的。
记号
O
(
)
O()
O ( ) 表述的是算法运行时间的渐近上界。即,记号
O
(
)
O()
O ( ) 表述的是算法运行时间的最坏情况。而对于部分算法,如插入排序,在输入为增序排列的数组下运行时间为
O
(
n
)
O(n)
O ( n ) 。因此这种表述是无意义的。
习题3.1-4
2
(
n
+
1
)
=
O
(
2
n
)
2^{(n+1)}=O(2^n)
2 ( n + 1 ) = O ( 2 n ) 成立吗?
2
(
2
n
)
=
O
(
2
n
)
2^{(2n)}=O(2^n)
2 ( 2 n ) = O ( 2 n ) 成立吗?
1)证明:存在
c
=
2
,
n
0
>
0
c=2, n_0>0
c = 2 , n 0 > 0 使得
对
于
所
有
0
≤
2
n
+
1
≤
c
2
n
对
于
所
有
n
≥
n
0
对于所有0 \le 2^{n+1} \le c2^n 对于所有n \ge n_0
对 于 所 有 0 ≤ 2 n + 1 ≤ c 2 n 对 于 所 有 n ≥ n 0
2
2
n
=
O
(
2
n
)
2^{2n} = O(2^n)
2 2 n = O ( 2 n ) ,成立。
2)要使其成立,则
c
=
2
2
n
2
n
=
2
n
c=\frac{2^{2n}}{2^n}=2^n
c = 2 n 2 2 n = 2 n 。c为正常数,则在n趋于无穷大时,c也趋于无穷大。不存在这样的正常数c。因此不成立。
习题3.1-5
证明定理3.1
对
任
意
两
个
函
数
和
,
我
们
有
,
当
且
仅
当
且
对
任
意
两
个
函
数
f
(
n
)
和
g
(
n
)
,
我
们
有
f
(
n
)
=
Θ
(
g
(
n
)
)
,
当
且
仅
当
f
(
n
)
=
O
(
g
(
n
)
)
且
f
(
n
)
=
Ω
(
g
(
n
)
)
对任意两个函数和,我们有,当且仅当且对任意两个函数f(n)和g(n),我们有f(n)=\Theta(g(n)),当且仅当f(n)=O(g(n))且f(n)=\Omega(g(n))
对 任 意 两 个 函 数 和 , 我 们 有 , 当 且 仅 当 且 对 任 意 两 个 函 数 f ( n ) 和 g ( n ) , 我 们 有 f ( n ) = Θ ( g ( n ) ) , 当 且 仅 当 f ( n ) = O ( g ( n ) ) 且 f ( n ) = Ω ( g ( n ) ) 。
由
f
(
n
)
=
O
(
g
(
n
)
)
f(n)=O(g(n))
f ( n ) = O ( g ( n ) ) 得当
n
≥
n
1
n\geq n_1
n ≥ n 1 时,
0
≤
f
(
n
)
≤
c
1
g
(
n
)
0\leq f(n)\leq c_1g(n)
0 ≤ f ( n ) ≤ c 1 g ( n )
由
f
(
n
)
=
Ω
(
g
(
n
)
)
f(n)=\Omega(g(n))
f ( n ) = Ω ( g ( n ) ) 得当
n
≥
n
2
n\geq n_2
n ≥ n 2 时,
0
≤
c
2
g
(
n
)
≤
f
(
n
)
0\leq c_2g(n)\leq f(n)
0 ≤ c 2 g ( n ) ≤ f ( n )
所以,当
n
>
=
m
a
x
(
n
1
,
n
2
)
n>=max(n_1,n_2)
n > = m a x ( n 1 , n 2 ) 时,
0
≤
c
2
g
(
n
)
<
=
f
(
n
)
<
=
c
1
g
(
n
)
0\leq c_2g(n)<=f(n)<=c_1g(n)
0 ≤ c 2 g ( n ) < = f ( n ) < = c 1 g ( n ) ,满足渐近确界定义,得证。
习题3.1-6
证明:一个算法的运行时间是
Θ
(
g
(
n
)
)
\Theta(g(n))
Θ ( g ( n ) ) 当且仅当其最坏情况运行时间
O
(
g
(
n
)
)
O(g(n))
O ( g ( n ) ) ,且最佳情况运行时间是
Ω
(
g
(
n
)
)
\Omega(g(n))
Ω ( g ( n ) ) 。
最坏情况下复杂度为
O
(
g
(
n
)
)
O(g(n))
O ( g ( n ) ) 说明所有情况时间复杂度为
O
(
g
(
n
)
)
O(g(n))
O ( g ( n ) ) ,最好情况下时间复杂度为
Θ
(
g
(
n
)
)
\Theta(g(n))
Θ ( g ( n ) ) 说明所有情况时间复杂度为
Ω
(
g
(
n
)
)
\Omega(g(n))
Ω ( g ( n ) ) ,根据定理3.1得算法时间复杂度为
Θ
(
g
(
n
)
)
\Theta (g(n))
Θ ( g ( n ) )
习题3.1-7
证明
o
(
g
(
n
)
)
∩
ω
(
g
(
n
)
)
o(g(n))\cap \omega(g(n))
o ( g ( n ) ) ∩ ω ( g ( n ) ) 是空集。
f
(
n
)
=
o
(
g
(
n
)
)
f(n)=o(g(n))
f ( n ) = o ( g ( n ) ) 说明对于任意正常数
c
,
n
0
c,n_0
c , n 0 ,对于所有的
n
≥
n
0
n \ge n_0
n ≥ n 0 都有
对
于
所
有
0
≤
f
(
n
)
<
c
g
(
n
)
对
于
所
有
n
≥
n
0
对于所有0 \le f(n) < cg(n) 对于所有n \ge n_0
对 于 所 有 0 ≤ f ( n ) < c g ( n ) 对 于 所 有 n ≥ n 0 。这时假设
f
(
n
)
=
ω
(
g
(
n
)
)
f(n)=\omega (g(n))
f ( n ) = ω ( g ( n ) ) ,说明对于任意正常数
c
,
n
0
c,n_0
c , n 0 ,对于所有的
n
≥
n
0
n \ge n_0
n ≥ n 0 都有
0
≤
c
g
(
n
)
<
f
(
n
)
0 \le cg(n) < f(n)
0 ≤ c g ( n ) < f ( n ) 然而这样的常数c是存在的,故产生矛盾,可得
o
(
g
(
n
)
)
∩
ω
(
g
(
n
)
)
=
∅
o(g(n)) \cap \omega (g(n)) =\varnothing
o ( g ( n ) ) ∩ ω ( g ( n ) ) = ∅ 。
习题3.1-8
可以将我们的表示法扩展到有两个参数n和m的情形,其中
n
n
n 和
m
m
m 的值可以以不同的速率,互相独立地趋于无穷。对给定的函数
,
g
(
n
,
m
)
,
O
(
g
(
n
,
m
)
)
,g(n,m),O(g(n,m))
, g ( n , m ) , O ( g ( n , m ) ) 为函数集
存
在
正
整
数
和
,
使
对
所
有
或
,
有
O
(
g
(
n
,
m
)
)
=
{
f
(
n
,
m
)
:
存
在
正
整
数
c
,
n
0
和
m
0
,
使
对
所
有
n
≥
n
0
或
m
≥
m
0
,
有
0
≤
f
(
n
,
m
)
≤
c
g
(
n
,
m
)
}
存在正整数和,使对所有或,有O(g(n,m))=\{f(n,m): 存在正整数c,n_0和m_0,使对所有n\geq n_0或m\geq m_0,有0\leq f(n,m)\leq cg(n,m)\}
存 在 正 整 数 和 , 使 对 所 有 或 , 有 O ( g ( n , m ) ) = { f ( n , m ) : 存 在 正 整 数 c , n 0 和 m 0 , 使 对 所 有 n ≥ n 0 或 m ≥ m 0 , 有 0 ≤ f ( n , m ) ≤ c g ( n , m ) }
给出对应的
Ω
(
g
(
n
,
m
)
)
\Omega(g(n,m))
Ω ( g ( n , m ) ) 和
Θ
(
g
(
n
,
m
)
)
\Theta(g(n,m))
Θ ( g ( n , m ) ) 的定义。
存
在
正
整
数
和
,
使
对
所
有
或
,
有
Ω
(
g
(
n
,
m
)
)
=
{
f
(
n
,
m
)
:
存
在
正
整
数
c
,
n
0
和
m
0
,
使
对
所
有
n
≥
n
0
或
m
≥
m
0
,
有
0
≤
c
g
(
n
,
m
)
≤
f
(
n
,
m
)
}
存在正整数和,使对所有或,有\Omega(g(n,m))=\{f(n,m): 存在正整数c,n_0和m_0,使对所有n\geq n_0或m\geq m_0,有0\leq cg(n,m)\leq f(n,m)\}
存 在 正 整 数 和 , 使 对 所 有 或 , 有 Ω ( g ( n , m ) ) = { f ( n , m ) : 存 在 正 整 数 c , n 0 和 m 0 , 使 对 所 有 n ≥ n 0 或 m ≥ m 0 , 有 0 ≤ c g ( n , m ) ≤ f ( n , m ) }
2)
存
在
正
整
数
和
,
使
对
所
有
或
有
Θ
(
g
(
n
,
m
)
)
=
{
f
(
n
,
m
)
:
存
在
正
整
数
c
1
,
c
2
,
n
0
和
m
0
,
使
对
所
有
n
≥
n
0
或
m
≥
m
0
,
有
c
1
g
(
n
,
m
)
≤
f
(
n
,
m
)
≤
c
2
g
(
n
,
m
)
}
存在正整数和,使对所有或有\Theta(g(n,m))=\{f(n,m): 存在正整数c_1,c_2,n_0和m_0,使对所有n\geq n_0或m\geq m_0, 有c_1g(n,m)\leq f(n,m)\leq c_2g(n,m)\}
存 在 正 整 数 和 , 使 对 所 有 或 有 Θ ( g ( n , m ) ) = { f ( n , m ) : 存 在 正 整 数 c 1 , c 2 , n 0 和 m 0 , 使 对 所 有 n ≥ n 0 或 m ≥ m 0 , 有 c 1 g ( n , m ) ≤ f ( n , m ) ≤ c 2 g ( n , m ) }
3.2节练习
习题3.2-1
证明:若
f
(
n
)
f(n)
f ( n ) 和
g
(
n
)
g(n)
g ( n ) 是单调递增的函数,则函数
f
(
n
)
+
g
(
n
)
f(n)+g(n)
f ( n ) + g ( n ) 和
f
(
g
(
n
)
)
f(g(n))
f ( g ( n ) ) 也是单调递增的,此外,若
f
(
n
)
f(n)
f ( n ) 和
g
(
n
)
g(n)
g ( n ) 是非负的,则
f
(
n
)
⋅
g
(
n
)
f(n)\cdot g(n)
f ( n ) ⋅ g ( n ) 是单调递增的。
由于
f
(
n
)
f(n)
f ( n ) 和
g
(
n
)
g(n)
g ( n ) 单调递增,所以对于任意
x
1
<
x
2
x_1 < x_2
x 1 < x 2 ,都有
f
(
x
1
)
<
f
(
x
2
)
f(x_1) < f(x_2)
f ( x 1 ) < f ( x 2 ) ,
g
(
x
1
)
<
g
(
x
2
)
g(x_1) < g(x_2)
g ( x 1 ) < g ( x 2 ) 所以
f
(
x
1
)
+
g
(
x
1
)
<
f
(
x
2
)
+
g
(
x
2
)
f(x_1)+g(x_1) < f(x_2)+g(x_2)
f ( x 1 ) + g ( x 1 ) < f ( x 2 ) + g ( x 2 ) ,
f
(
g
(
x
1
)
)
<
f
(
g
(
x
2
)
)
f(g(x_1)) < f(g(x_2))
f ( g ( x 1 ) ) < f ( g ( x 2 ) ) 。如果当f(x)和g(x)都非负时显然有
f
(
x
1
)
∗
g
(
x
1
)
<
f
(
x
2
)
∗
g
(
x
2
)
f(x_1)*g(x_1) < f(x_2)*g(x_2)
f ( x 1 ) ∗ g ( x 1 ) < f ( x 2 ) ∗ g ( x 2 ) 。故均得证。
习题3.2-2
证明等式3.16
a
log
b
c
=
c
log
b
a
\LARGE{a^{\log_bc} = c^{\log_ba}}
a log b c = c log b a 。
lg
a
log
b
c
=
log
b
c
lg
a
=
lg
a
lg
c
lg
b
\lg {a^{\log_bc}}=\log_bc \lg a=\frac {\lg a \lg c} {\lg b}
lg a log b c = log b c lg a = lg b lg a lg c ,
lg
c
log
b
a
=
log
b
a
lg
c
=
lg
a
lg
c
lg
b
\lg {c^{\log_ba}}=\log_ba \lg c=\frac {\lg a \lg c} {\lg b}
lg c log b a = log b a lg c = lg b lg a lg c
⇒
a
log
b
c
=
c
log
b
a
\Rightarrow a^{\log_bc} = c^{\log_ba}
⇒ a log b c = c log b a 。(取下幂次,得证。)
习题3.2-3
证明等式3.19
l
g
(
n
!
)
=
Θ
(
n
l
g
n
)
lg(n!)=\Theta(nlgn)
l g ( n ! ) = Θ ( n l g n ) 。并证明
n
!
=
ω
(
2
n
)
n!=\omega (2^n)
n ! = ω ( 2 n ) 且
n
!
=
o
(
n
n
)
n!=o(n^n)
n ! = o ( n n ) 。
证明
lg
(
n
!
)
=
Θ
(
n
lg
n
)
\lg {(n!)} = \Theta (n \lg n)
lg ( n ! ) = Θ ( n lg n ) :
lg
n
!
=
∑
i
=
1
n
lg
i
<
∑
i
=
1
n
lg
n
=
n
lg
n
\lg {n!} = \sum_{i=1}^n{\lg i} < \sum_{i=1}^n{\lg n} = n \lg n
lg n ! = i = 1 ∑ n lg i < i = 1 ∑ n lg n = n lg n
∑
i
=
1
n
lg
i
=
∑
i
=
1
n
/
2
[
lg
i
+
lg
(
n
−
i
)
]
=
∑
i
=
1
n
/
2
[
lg
i
(
n
−
i
)
]
>
∑
i
=
1
n
/
2
lg
n
2
4
=
n
lg
n
−
n
>
1
2
n
lg
n
\sum_{i=1}^n{\lg i} = \sum_{i=1}^{n/2} {[\lg i + \lg {(n-i)}]} = \sum_{i=1}^{n/2} {[\lg {i (n-i)}]} > \sum_{i=1}^{n/2} {\lg {\frac {n^2}{4}}} = n \lg n - n > \frac 12 n \lg n
i = 1 ∑ n lg i = i = 1 ∑ n / 2 [ lg i + lg ( n − i ) ] = i = 1 ∑ n / 2 [ lg i ( n − i ) ] > i = 1 ∑ n / 2 lg 4 n 2 = n lg n − n > 2 1 n lg n
⇒
lg
(
n
!
)
=
Θ
(
n
lg
n
)
\Rightarrow \lg {(n!)} = \Theta (n \lg n)
⇒ lg ( n ! ) = Θ ( n lg n )
证明
n
!
=
ω
(
2
n
)
n! = \omega (2^n)
n ! = ω ( 2 n ) :
当
时
,
∵
当
n
>
4
时
,
i
(
n
−
i
)
>
2
2
当时,\because 当n > 4时,i (n-i) > 2^2
当 时 , ∵ 当 n > 4 时 , i ( n − i ) > 2 2
∴
n
!
=
∏
i
=
1
n
/
2
i
(
n
−
i
)
>
∏
i
=
1
n
/
2
2
2
=
2
n
\therefore n! = \prod_{i=1}^{n/2} {i (n-i)} > \prod_{i=1}^{n/2} {2^2} = 2^n
∴ n ! = i = 1 ∏ n / 2 i ( n − i ) > i = 1 ∏ n / 2 2 2 = 2 n
∴
n
!
=
ω
(
2
n
)
\therefore n! = \omega (2^n)
∴ n ! = ω ( 2 n )
证明
n
!
=
o
(
n
n
)
n! = o (n^n)
n ! = o ( n n ) :
当
时
,
∵
当
n
>
1
时
,
n
!
=
∏
i
=
1
n
i
<
∏
i
=
1
n
n
=
n
n
当时,\because 当n > 1时,n! = \prod_{i=1}^n i < \prod_{i=1}^n n = n^n
当 时 , ∵ 当 n > 1 时 , n ! = i = 1 ∏ n i < i = 1 ∏ n n = n n
∴
n
!
=
o
(
n
n
)
\therefore n! = o (n^n)
∴ n ! = o ( n n )
习题3.2-4
函数
⌈
lg
n
⌉
!
\lceil \lg n \rceil!
⌈ lg n ⌉ ! 多项式有界吗?函数$ \lceil \lg {\lg n} \rceil ! $多项式有界吗?
证明
f
(
n
)
f(n)
f ( n ) 是否多项式有界等价于证明
lg
f
(
n
)
=
O
(
lg
n
)
\lg {f(n)} = O (\lg n)
lg f ( n ) = O ( lg n ) ,这是因为如果
f
(
n
)
f(n)
f ( n ) 多项式有界,则存在正常数
c
,
k
,
n
0
c,k,n_0
c , k , n 0 使得对于所有的
n
>
n
0
n > n_0
n > n 0 都有
f
(
n
)
<
c
n
k
f(n) < c n^k
f ( n ) < c n k ,即
lg
f
(
n
)
<
k
c
lg
n
\lg {f(n)} < k c \lg n
lg f ( n ) < k c lg n ,所以
lg
f
(
n
)
=
O
(
lg
n
)
\lg {f(n)} = O (\lg n)
lg f ( n ) = O ( lg n ) ,反之亦然。 对于
⌈
lg
n
⌉
!
\lceil \lg n \rceil !
⌈ lg n ⌉ ! 我们有
lg
(
⌈
lg
n
⌉
!
)
=
Θ
(
⌈
lg
n
⌉
lg
⌈
lg
n
⌉
)
≥
Θ
(
lg
n
lg
lg
n
)
=
ω
(
lg
n
)
\lg {(\lceil \lg n \rceil !)} = \Theta (\lceil \lg n \rceil \lg {\lceil \lg n \rceil}) \geq \Theta (\lg n \lg {\lg n}) = \omega (\lg n)
lg ( ⌈ lg n ⌉ ! ) = Θ ( ⌈ lg n ⌉ lg ⌈ lg n ⌉ ) ≥ Θ ( lg n lg lg n ) = ω ( lg n ) 。
⌈
lg
n
⌉
!
\lceil \lg n \rceil !
⌈ lg n ⌉ ! 非多项式有界
对于 $ \lceil \lg {\lg n} \rceil ! $ 我们有 KaTeX parse error: Expected 'EOF', got '\eqalign' at position 1: \̲e̲q̲a̲l̲i̲g̲n̲ ̲{ & \lg {(\lcei… 。 $ \lceil \lg {\lg n} \rceil ! $ 多项式有界
习题3.2-5
如下两个函数中,哪一个渐近更大些:
lg
(
lg
∗
n
)
\lg(\lg^* n)
lg ( lg ∗ n ) 还是
lg
∗
(
lg
n
)
\lg^*(\lg n)
lg ∗ ( lg n ) 。
将
lg
∗
(
n
)
\lg^*(n)
lg ∗ ( n ) 看成一个整体,那么$ \lg^(\lg(n))$ 就是先对
n
n
n 求了一次对数,因此$ lg^ (lg(n)) = lg^*(n) - 1$。
故:
当
时
lg
∗
lg
n
=
lg
∗
n
−
1
>
lg
lg
∗
n
,
当
lg
∗
n
>
2
时
当时\lg^* {\lg n} = \lg^* n - 1 > \lg {\lg^* n},当\lg^* n > 2时
当 时 lg ∗ lg n = lg ∗ n − 1 > lg lg ∗ n , 当 lg ∗ n > 2 时
习题3.2-6
证明:黄金分割率
ϕ
\phi
ϕ 及其共轭数
ϕ
^
\hat \phi
ϕ ^ 都满足方程
x
2
=
x
+
1
x^2=x+1
x 2 = x + 1 。
ϕ
2
=
(
1
+
5
2
)
2
=
3
+
5
2
=
ϕ
+
1
\phi ^2 = (\frac {1+\sqrt 5} {2})^2 = \frac {3 + \sqrt5} {2} = \phi + 1
ϕ 2 = ( 2 1 + 5
) 2 = 2 3 + 5
= ϕ + 1 。
ϕ
^
2
=
(
1
−
5
2
)
2
=
3
−
5
2
=
ϕ
^
+
1
\hat {\phi} ^2 = (\frac {1-\sqrt 5} {2})^2 = \frac {3 - \sqrt5} {2} = \hat {\phi} + 1
ϕ ^ 2 = ( 2 1 − 5
) 2 = 2 3 − 5
= ϕ ^ + 1
习题3.2-7
用归纳法证明:第
i
i
i 个斐波那契数满足等式
F
i
=
ϕ
i
−
ϕ
^
i
5
\LARGE F_i=\frac {\phi ^i -\hat\phi^i}{\sqrt5}
F i = 5
ϕ i − ϕ ^ i 。其中
ϕ
\phi
ϕ 是黄金分割率且
ϕ
^
\hat\phi
ϕ ^ 是其共轭数。
证明: 当i = 0时,
ϕ
0
−
ϕ
^
0
5
=
0
=
F
0
\frac {\phi ^0 - \hat {\phi}^0}{\sqrt 5} = 0 = F_0
5
ϕ 0 − ϕ ^ 0 = 0 = F 0 当i = 1时,
ϕ
1
−
ϕ
^
1
5
=
1
=
F
1
\frac {\phi ^1 - \hat {\phi}^1}{\sqrt 5} = 1 = F_1
5
ϕ 1 − ϕ ^ 1 = 1 = F 1
假设当i = k-1和i = k时都满足公式,则当i = k+1,
F
k
+
1
=
F
k
+
F
k
−
1
=
(
ϕ
k
+
ϕ
k
−
1
)
−
(
ϕ
^
k
+
ϕ
^
k
−
1
)
5
=
ϕ
k
−
1
(
ϕ
+
1
)
−
ϕ
^
k
−
1
(
ϕ
^
+
1
)
5
F_{k+1}=F_k + F_{k-1} = \frac {(\phi ^k + \phi ^{k-1}) - (\hat {\phi}^k+\hat {\phi}^{k-1})}{\sqrt 5}=\frac {\phi^{k-1}(\phi + 1)-\hat {\phi}^{k-1}(\hat {\phi} + 1)}{\sqrt 5}
F k + 1 = F k + F k − 1 = 5
( ϕ k + ϕ k − 1 ) − ( ϕ ^ k + ϕ ^ k − 1 ) = 5
ϕ k − 1 ( ϕ + 1 ) − ϕ ^ k − 1 ( ϕ ^ + 1 ) ,因为
(
ϕ
+
1
)
=
ϕ
2
(\phi+1)=\phi^2
( ϕ + 1 ) = ϕ 2 且
(
ϕ
^
+
1
)
=
ϕ
^
2
(\hat\phi+1)=\hat\phi^2
( ϕ ^ + 1 ) = ϕ ^ 2
得
ϕ
k
−
1
(
ϕ
+
1
)
−
ϕ
^
k
−
1
(
ϕ
^
+
1
)
5
=
ϕ
k
+
1
−
ϕ
^
k
+
1
5
\frac {\phi^{k-1}(\phi + 1)-\hat {\phi}^{k-1}(\hat {\phi} + 1)}{\sqrt 5}=\frac {\phi ^{k+1} - \hat {\phi}^{k+1}}{\sqrt 5}
5
ϕ k − 1 ( ϕ + 1 ) − ϕ ^ k − 1 ( ϕ ^ + 1 ) = 5
ϕ k + 1 − ϕ ^ k + 1 。得证。
习题3.2-8
证明:
k
ln
k
=
Θ
(
n
)
k\ln k=\Theta(n)
k ln k = Θ ( n ) 蕴涵着
k
=
Θ
(
n
/
ln
n
)
k=\Theta(n/\ln n)
k = Θ ( n / ln n ) 。
这题要用到性质
g
(
n
)
=
Θ
(
f
(
n
)
)
⇔
f
(
n
)
=
Θ
(
g
(
n
)
)
g(n) = \Theta (f(n)) \Leftrightarrow f(n) = \Theta (g(n))
g ( n ) = Θ ( f ( n ) ) ⇔ f ( n ) = Θ ( g ( n ) ) ,所以
k
ln
k
=
Θ
(
n
)
⇔
n
=
Θ
(
k
ln
k
)
k \ln k = \Theta (n) \Leftrightarrow n = \Theta (k \ln k)
k ln k = Θ ( n ) ⇔ n = Θ ( k ln k ) , 要证
k
=
Θ
(
n
/
ln
n
)
k = \Theta (n / \ln n)
k = Θ ( n / ln n ) 等价于证
n
/
ln
n
=
Θ
(
k
)
n / \ln n = \Theta (k)
n / ln n = Θ ( k ) ,代入条件得
n
ln
n
=
Θ
(
k
ln
k
ln
(
k
ln
k
)
)
=
Θ
(
k
ln
k
ln
k
)
=
Θ
(
k
)
\frac {n}{\ln n} = \Theta (\frac {k \ln k} {\ln {(k \ln k})}) = \Theta (\frac {k \ln k} {\ln k}) = \Theta (k)
ln n n = Θ ( ln ( k ln k ) k ln k ) = Θ ( ln k k ln k ) = Θ ( k )
思考题
3-1(多项式的渐近行为)
假设
p
(
n
)
=
∑
i
=
0
d
a
i
n
i
p(n)=\sum^d_{i=0}a_in^i
p ( n ) = ∑ i = 0 d a i n i 是一个关于
n
n
n 的
d
d
d 次多项式,其中
a
d
>
0
a_d>0
a d > 0 ,
k
k
k 是一个常量。使用渐近记号的定义来证明下面的性质。
a. 若
k
≥
d
k\ge d
k ≥ d ,则
p
(
n
)
=
O
(
n
k
)
p(n)=O(n^k)
p ( n ) = O ( n k ) 。
b. 若
k
≤
d
k\le d
k ≤ d ,则
p
(
n
)
=
Ω
(
n
k
)
p(n)=\Omega(n^k)
p ( n ) = Ω ( n k ) 。
c. 若
k
=
d
k=d
k = d ,则
p
(
n
)
=
Θ
(
n
k
)
p(n)=\Theta(n^k)
p ( n ) = Θ ( n k ) 。
d. 若
k
>
d
k> d
k > d ,则
p
(
n
)
=
o
(
n
k
)
p(n)=o(n^k)
p ( n ) = o ( n k ) 。
e. 若
k
<
d
k< d
k < d ,则
p
(
n
)
=
ω
(
n
k
)
p(n)=\omega(n^k)
p ( n ) = ω ( n k ) 。
a.
P
(
n
)
=
∑
i
=
0
d
a
i
n
i
=
n
d
∑
i
=
0
d
a
i
n
i
−
d
≤
n
d
∑
i
=
0
d
a
i
≤
c
n
d
≤
c
n
k
P(n) = \sum_{i=0}^d {a_i n^i} = n^d \sum_{i=0}^d {a_i n^{i-d}} \le n^d \sum_{i=0}^d {a_i} \le cn^d\le cn^k
P ( n ) = i = 0 ∑ d a i n i = n d i = 0 ∑ d a i n i − d ≤ n d i = 0 ∑ d a i ≤ c n d ≤ c n k ,得证。
b.
P
(
n
)
=
∑
i
=
0
d
a
i
n
i
≥
n
d
≥
c
n
d
≥
c
n
k
P(n) = \sum_{i=0}^d {a_i n^i} \ge n^d \ge cn^d\ge cn_k
P ( n ) = i = 0 ∑ d a i n i ≥ n d ≥ c n d ≥ c n k ,得证。
c. 由前两问可证。
d.
P
(
n
)
=
∑
i
=
0
d
a
i
n
i
=
n
d
∑
i
=
0
d
a
i
n
i
−
d
<
n
d
∑
i
=
0
d
a
i
<
c
n
d
≤
c
n
k
P(n) = \sum_{i=0}^d {a_i n^i} = n^d \sum_{i=0}^d {a_i n^{i-d}}< n^d \sum_{i=0}^d {a_i} <cn^d\le cn^k
P ( n ) = i = 0 ∑ d a i n i = n d i = 0 ∑ d a i n i − d < n d i = 0 ∑ d a i < c n d ≤ c n k ,得证
e.
P
(
n
)
=
∑
i
=
0
d
a
i
n
i
>
n
d
>
c
n
d
>
c
n
k
P(n) = \sum_{i=0}^d {a_i n^i} >n^d > cn^d> cn_k
P ( n ) = i = 0 ∑ d a i n i > n d > c n d > c n k ,得证。
3-2(相对渐近增长)
为下标中的每对表达式(A,B)指出A是否是B的
、
、
、
或
O
、
o
、
Ω
、
ω
或
Θ
、、、或O、o、\Omega、\omega或\Theta
、 、 、 或 O 、 o 、 Ω 、 ω 或 Θ 。假设
、
且
k
≥
1
、
ϵ
>
0
且
c
>
1
、且k\ge1、\epsilon>0且c>1
、 且 k ≥ 1 、 ϵ > 0 且 c > 1 均为常量。回答应该以表格的形式,将"是"或"否"写在每个空格中。
A
B
O
O
O
o
o
o
Ω
\Omega
Ω
ω
\omega
ω
Θ
\Theta
Θ
lg
k
n
\lg^k n
lg k n
n
ϵ
n^{\epsilon}
n ϵ
否
否
是
是
否
n
k
n^k
n k
c
n
c^n
c n
否
否
是
是
否
n
\sqrt n
n
n
sin
n
n^{\sin n}
n sin n
否
否
否
否
否
2
n
2^n
2 n
2
n
/
2
2^{n/2}
2 n / 2
是
是
否
否
否
n
lg
c
n^{\lg c}
n lg c
c
lg
n
c^{\lg n}
c lg n
是
否
是
否
是
lg
(
n
!
)
\lg {(n!)}
lg ( n ! )
lg
(
n
n
)
\lg {(n^n)}
lg ( n n )
是
否
是
否
是
3-3(根据渐近增长率排序)
a.根据增长的阶来排序下面的函数,即求出满足
g
1
=
Ω
(
g
2
)
g_1=\Omega(g_2)
g 1 = Ω ( g 2 ) ,
,
g
2
=
Ω
(
g
3
)
,
⋯
,g_2=\Omega(g_3),\cdots
, g 2 = Ω ( g 3 ) , ⋯ ,
g
29
=
Ω
(
g
30
)
g_{29}=\Omega(g_{30})
g 2 9 = Ω ( g 3 0 ) 的函数的一种排列
g
1
,
g
2
,
⋯
 
,
g
30
g_1,g_2,\cdots,g_{30}
g 1 , g 2 , ⋯ , g 3 0 。把你的表划分成等价类,使得函数
f
(
n
)
f(n)
f ( n ) 和
g
(
n
)
g(n)
g ( n ) 在相同类中当且仅当
f
(
n
)
=
Θ
(
g
(
n
)
)
f(n)=\Theta(g(n))
f ( n ) = Θ ( g ( n ) ) 。
lg
(
lg
∗
n
)
\lg(\lg^*n)
lg ( lg ∗ n )
2
lg
n
2^{\lg^n}
2 lg n
(
2
)
lg
n
(\sqrt{2})^{\lg{n}}
( 2
) lg n
n
2
n^2
n 2
n
!
n!
n !
(
lg
n
)
!
(\lg{n})!
( lg n ) !
(
3
2
)
n
(\frac{3}{2})^n
( 2 3 ) n
n
3
n^3
n 3
lg
2
n
\lg^2{n}
lg 2 n
lg
(
n
!
)
\lg(n!)
lg ( n ! )
2
2
n
2^{2^n}
2 2 n
n
1
/
lg
n
n^{1/\lg{n}}
n 1 / lg n
ln
ln
n
\ln{\ln{n}}
ln ln n
lg
n
\lg^n
lg n
n
⋅
2
n
n \cdot 2^n
n ⋅ 2 n
n
lg
lg
n
n^{\lg\lg{n}}
n lg lg n
ln
n
\ln{n}
ln n
1
1
1
2
lg
n
2^{\lg{n}}
2 lg n
(
lg
n
)
lg
n
(\lg{n})^{\lg{n}}
( lg n ) lg n
e
n
e^n
e n
4
lg
n
4^{\lg{n}}
4 lg n
(
n
+
1
)
!
(n + 1)!
( n + 1 ) !
lg
n
\sqrt{\lg{n}}
lg n
lg
∗
(
lg
n
)
\lg^*(\lg{n})
lg ∗ ( lg n )
2
2
lg
n
2^{\sqrt{2\lg{n}}}
2 2 lg n
n
n
n
2
n
2^n
2 n
n
lg
n
n\lg{n}
n lg n
2
2
n
+
1
2^{2^{n + 1}}
2 2 n + 1
2
2
n
+
1
>
2
2
n
>
(
n
+
1
)
!
>
n
!
>
e
n
>
n
2
n
>
2
n
>
(
3
/
2
)
n
>
(
lg
n
)
lg
n
=
n
lg
lg
n
>
(
lg
n
)
!
2^{2^{n+1}} > 2^{2^n} > (n+1)! > n! > e^n > n 2^n > 2^n > (3/2)^n > (\lg n)^{\lg n} = n^{\lg {\lg n}} > (\lg n)!
2 2 n + 1 > 2 2 n > ( n + 1 ) ! > n ! > e n > n 2 n > 2 n > ( 3 / 2 ) n > ( lg n ) lg n = n lg lg n > ( lg n ) !
>
n
3
>
n
2
=
4
lg
n
>
n
lg
n
=
lg
(
n
!
)
>
n
=
2
lg
n
>
(
2
)
lg
n
=
n
>
2
2
lg
n
>
lg
2
n
>
ln
n
> n^3 > n^2 = 4^{\lg n} > n \lg n= \lg {(n!)} > n = 2^{\lg n} > (\sqrt 2)^{\lg n} = \sqrt n > 2^{\sqrt {2\lg n}} > \lg^2 n > \ln n
> n 3 > n 2 = 4 lg n > n lg n = lg ( n ! ) > n = 2 lg n > ( 2
) lg n = n
> 2 2 lg n
> lg 2 n > ln n
>
lg
n
>
ln
ln
n
>
2
lg
∗
n
>
lg
∗
n
=
lg
∗
(
lg
n
)
>
lg
(
lg
∗
n
)
>
n
1
/
lg
n
=
1
> \sqrt {\lg n} > \ln {\ln n} > 2^{\lg^* n} > \lg^* n = \lg^*{(\lg n)} > \lg {(\lg^* n)} > n^{1/ \lg n} =1
> lg n
> ln ln n > 2 lg ∗ n > lg ∗ n = lg ∗ ( lg n ) > lg ( lg ∗ n ) > n 1 / lg n = 1
b.给出非负函数
f
(
n
)
f(n)
f ( n ) 的一个例子,使得对所有在
(
a
)
(a)
( a ) 部分中的函数
,
g
i
(
n
)
,
f
(
n
)
,g_i(n),f(n)
, g i ( n ) , f ( n ) 既不是
O
(
g
i
(
n
)
)
O(g_i(n))
O ( g i ( n ) ) 也不是
Ω
(
g
i
(
n
)
)
\Omega(g_i(n))
Ω ( g i ( n ) ) 。
b. 非连续性函数或者震荡函数就能满足要求,比如 KaTeX parse error: Expected 'EOF', got '\cases' at position 6: f(n)=\̲c̲a̲s̲e̲s̲ ̲{ n, & $-1^n > … 或
(
2
2
2
n
+
1
)
s
i
n
x
\LARGE(2^{2^{2n+1}})^{sinx}
( 2 2 2 n + 1 ) s i n x
3-4渐近记号的性质
假设
f
(
n
)
f(n)
f ( n ) 和
g
(
n
)
g(n)
g ( n ) 为渐近正函数。证明或反驳下面的每个猜测。
a.
f
(
n
)
=
O
(
g
(
n
)
)
f(n)=O(g(n))
f ( n ) = O ( g ( n ) ) 蕴含
g
(
n
)
=
O
(
f
(
n
)
)
g(n)=O(f(n))
g ( n ) = O ( f ( n ) ) 。
错误。反例:
n
=
O
(
n
2
)
n=O(n^2)
n = O ( n 2 ) ,而
n
2
≠
O
(
n
)
n^2 \ne O(n)
n 2 ̸ = O ( n ) 。
b.
f
(
n
)
+
g
(
n
)
=
Θ
(
min
(
f
(
n
)
,
g
(
n
)
)
)
f(n)+g(n)=\Theta(\min(f(n),g(n)))
f ( n ) + g ( n ) = Θ ( min ( f ( n ) , g ( n ) ) ) 。
错误。反例:
n
+
n
2
≠
Θ
(
min
(
n
,
n
2
)
)
=
Θ
(
n
)
n+n^2\ne \Theta(\min (n, n^2)) =\Theta(n)
n + n 2 ̸ = Θ ( min ( n , n 2 ) ) = Θ ( n )
c.
f
(
n
)
=
O
(
g
(
n
)
)
f(n)=O(g(n))
f ( n ) = O ( g ( n ) ) 蕴含
lg
(
f
(
n
)
)
=
O
(
lg
(
f
(
n
)
)
)
\lg(f(n))=O(\lg(f(n)))
lg ( f ( n ) ) = O ( lg ( f ( n ) ) ) ,其中对所有足够大的
n
n
n ,有
lg
(
g
(
n
)
)
≥
1
\lg(g(n))\ge 1
lg ( g ( n ) ) ≥ 1 且
f
(
n
)
≥
1
f(n)\ge1
f ( n ) ≥ 1 。
正确。
f
(
n
)
≥
1
f(n)\ge1
f ( n ) ≥ 1 且
f
(
n
)
=
O
(
g
(
n
)
)
f(n)=O(g(n))
f ( n ) = O ( g ( n ) ) ,即存在
c
,
n
0
>
0
c,n_0>0
c , n 0 > 0 使得任意
n
>
n
0
n>n_0
n > n 0 有
0
≤
f
(
n
)
≤
c
g
(
n
)
⇒
0
≤
lg
f
(
n
)
≤
lg
(
c
g
(
n
)
)
=
lg
c
+
lg
g
(
n
)
0 \leq f(n) \leq cg(n) \Rightarrow 0 \leq \lg{f(n)} \leq \lg(cg(n)) = \lg{c} + \lg{g(n)}
0 ≤ f ( n ) ≤ c g ( n ) ⇒ 0 ≤ lg f ( n ) ≤ lg ( c g ( n ) ) = lg c + lg g ( n )
因为
lg
(
g
(
n
)
)
≥
1
\lg(g(n))\ge1
lg ( g ( n ) ) ≥ 1 ,当
c
′
=
lg
c
+
1
c'=\lg{c} +1
c ′ = lg c + 1 ,
n
0
′
n_0'
n 0 ′ 足够大,有 KaTeX parse error: No such environment: align at position 7: \begin{̲a̲l̲i̲g̲n̲}̲ \lg{f(n)} &\le…
即有
lg
(
f
(
n
)
)
=
O
(
l
g
(
g
(
n
)
)
)
\lg(f(n)) = O(lg(g(n)))
lg ( f ( n ) ) = O ( l g ( g ( n ) ) ) 。
d.
f
(
n
)
=
O
(
g
(
n
)
)
f(n)=O(g(n))
f ( n ) = O ( g ( n ) ) 蕴含
2
f
(
n
)
=
O
(
2
g
(
n
)
)
2^{f(n)}=O(2^{g(n)})
2 f ( n ) = O ( 2 g ( n ) ) 。
错误。反例:
2
n
=
O
(
n
)
2n = O(n)
2 n = O ( n ) 但
2
2
n
=
4
n
≠
O
(
2
n
)
2^{2n} = 4^n \neq O(2^n)
2 2 n = 4 n ̸ = O ( 2 n ) 。
e.
f
(
n
)
=
O
(
(
f
(
n
)
)
2
)
f(n)=O((f(n))^2)
f ( n ) = O ( ( f ( n ) ) 2 ) 。
,
n
>
n
0
,
f
(
n
)
≥
1
,n>n_0,f(n)\ge 1
, n > n 0 , f ( n ) ≥ 1 正确。
f
(
n
)
≤
c
f
(
n
)
≤
c
(
f
(
n
)
)
2
f(n)\le cf(n)\le c(f(n))^2
f ( n ) ≤ c f ( n ) ≤ c ( f ( n ) ) 2 。否则错误。
f.
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 ) ) 。
正确。
0
≤
f
(
n
)
≤
c
g
(
n
)
⇒
c
g
(
n
)
≥
f
(
n
)
≥
0
⇒
g
(
n
)
≥
(
1
/
c
)
f
(
n
)
≥
0
0\le f(n)\le cg(n)\Rightarrow cg(n)\ge f(n)\ge 0\Rightarrow g(n)\ge (1/c)f(n)\ge 0
0 ≤ f ( n ) ≤ c g ( n ) ⇒ c g ( n ) ≥ f ( n ) ≥ 0 ⇒ g ( n ) ≥ ( 1 / c ) f ( n ) ≥ 0 。得证。
g.
f
(
n
)
=
Θ
(
f
(
n
/
2
)
)
f(n)=\Theta(f(n/2))
f ( n ) = Θ ( f ( n / 2 ) ) 。
错误。反例:
2
n
=
Θ
(
2
n
)
=
ω
(
2
n
/
2
)
2^n = \Theta(2^n) = \omega(2^{n/2})
2 n = Θ ( 2 n ) = ω ( 2 n / 2 )
h.
f
(
n
)
+
o
(
f
(
n
)
)
=
Θ
(
f
(
n
)
)
f(n)+o(f(n))=\Theta(f(n))
f ( n ) + o ( f ( n ) ) = Θ ( f ( n ) ) 。
正确,
g
(
n
)
=
o
(
f
(
n
)
)
g(n)=o(f(n))
g ( n ) = o ( f ( n ) ) 表明存在正常数
n
0
n_0
n 0 对于任意正常数
c
c
c ,对所有
n
≥
n
0
n \ge n_0
n ≥ n 0 都有
g
(
n
)
<
f
(
n
)
g(n) < f(n)
g ( n ) < f ( n ) ,所以对于所有
n
≥
n
0
n \ge n_0
n ≥ n 0 都有
f
(
n
)
+
o
(
f
(
n
)
)
)
<
f
(
n
)
+
f
(
n
)
=
2
f
(
n
)
f(n)+o(f(n))) < f(n) + f(n) = 2f(n)
f ( n ) + o ( f ( n ) ) ) < f ( n ) + f ( n ) = 2 f ( n ) ,得证。
3-5
O
O
O 与
Ω
\Omega
Ω 的一些变形
某些作者用一种与我们稍微不同的方式来定义
Ω
\Omega
Ω :假设我们使用
Ω
∞
\overset{\infty}{\Omega}
Ω ∞ (读作“
Ω
\Omega
Ω 无穷”)来表示这种可选的定义。若存在正常量
c
c
c ,使得对无穷多个整数
n
n
n ,有
f
(
n
)
≥
c
g
(
n
)
≥
0
f(n)\ge cg(n)\ge 0
f ( n ) ≥ c g ( n ) ≥ 0 ,则称
f
(
n
)
=
Ω
∞
(
g
(
n
)
)
f(n) =\overset{\infty}{\Omega}(g(n))
f ( n ) = Ω ∞ ( g ( n ) ) 。
a.证明:对渐近非负的任意两个函数
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)=\overset{\infty}{\Omega}(g(n))
f ( n ) = Ω ∞ ( g ( n ) ) 或者二者均成立,然而,如果使用
Ω
\Omega
Ω 来替代
Ω
∞
\overset{\infty}{\Omega}
Ω ∞ ,那么该命题不为真。
反例:
n
=
Ω
∞
(
n
sin
n
)
n = \overset{\infty}{\Omega}(n^{\sin{n}})
n = Ω ∞ ( n sin n ) ,但
n
≠
Ω
(
n
sin
n
)
n \neq \Omega(n^{\sin{n}})
n ̸ = Ω ( n sin n ) 。
Ω
∞
\overset{\infty}{\Omega}
Ω ∞ 无法约束震荡函数。
b.描述用
Ω
∞
\overset{\infty}{\Omega}
Ω ∞ 代替
Ω
\Omega
Ω 来刻画程序运行时间的潜在优点与缺点。
优点:
Ω
∞
\overset{\infty}{\Omega}
Ω ∞ 对下界要求更松,兼容的更多的情况;缺点:导致非严格的渐进下界。因此实际意义并不大。
某些作者也用一种稍微不同的方式来定义
O
O
O ;假设使用
O
′
O'
O ′ 来表示这种可选的定义。我们称
f
(
n
)
=
O
′
(
g
(
n
)
)
f(n)=O'(g(n))
f ( n ) = O ′ ( g ( n ) ) 当且仅当
∣
f
(
n
)
∣
=
O
(
g
(
n
)
)
|f(n)|=O(g(n))
∣ f ( n ) ∣ = O ( g ( n ) ) 。
c.如果使用
O
′
O'
O ′ 代替
O
O
O 但仍然使用
Ω
\Omega
Ω ,定理3.1中的"当且仅当"的每个方向将出现什么情况?
O
′
O'
O ′ 的约束更弱了。定理3.1只能是充分条件不是必要条件了,因为
f
(
n
)
≥
c
g
(
n
)
f(n)\ge cg(n)
f ( n ) ≥ c g ( n ) 可以推出
∣
f
(
n
)
∣
≥
c
g
(
n
)
|f(n)|\ge cg(n)
∣ f ( n ) ∣ ≥ c g ( n ) 但是
∣
f
(
n
)
∣
≥
c
g
(
n
)
|f(n)|\ge cg(n)
∣ f ( n ) ∣ ≥ c g ( n ) 不能推出
f
(
n
)
≥
c
g
(
n
)
f(n)\ge cg(n)
f ( n ) ≥ c g ( n ) 。
有些作者定义KaTeX parse error: Expected group after '\tilde' at position 7: \tilde\̲O̲ (读作“软O”)来意指忽略对数因子的
O
O
O :
KaTeX parse error: Expected '}', got '\O' at position 21: …和,使得对所有有\tilde{\̲O̲}(g(n))=\{f(n):…
d.用一种类似的方式定义
Ω
~
\tilde{\Omega}
Ω ~ 和
Θ
~
\tilde{\Theta}
Θ ~ 。证明与定理3.1相对应的类似结论。
KaTeX parse error: Expected 'EOF', got '\eqalign' at position 3: 对有\̲e̲q̲a̲l̲i̲g̲n̲ ̲{ \tilde \Omega… KaTeX parse error: Expected 'EOF', got '\eqalign' at position 3: 对有\̲e̲q̲a̲l̲i̲g̲n̲ ̲{ \tilde \Theta… 定理3.1由定义可知。
3-6多重函数
我们可以把用于
lg
∗
\lg^*
lg ∗ 中的重复操作符
∗
*
∗ 应用于实数集上的任意单调递增函数
f
(
n
)
f(n)
f ( n ) 。对给定的常量
c
∈
R
c\in \mathbb{R}
c ∈ R ,我们定义多重函数
f
c
∗
f_c^*
f c ∗ 为
f
c
∗
(
n
)
=
min
{
i
≥
0
:
f
(
i
)
(
n
)
≤
c
}
f_c^*(n)=\min\{i\ge0:f^{(i)}(n)\le c\}
f c ∗ ( n ) = min { i ≥ 0 : f ( i ) ( n ) ≤ c } 。该函数不必在所有情况下都为良定义的。换句话说,值
f
c
∗
(
n
)
f_c^*(n)
f c ∗ ( n ) 是为缩小其参数到
c
c
c 或更小所需函数
f
f
f 重复应用的数目。对如下每个函数
f
(
n
)
f(n)
f ( n ) 和常量
c
c
c ,给出
f
c
∗
(
n
)
f_c^*(n)
f c ∗ ( n ) 的一个尽量准确的界。
f
(
n
)
f(n)
f ( n )
c
c
c
f
c
∗
(
n
)
f^∗_c(n)
f c ∗ ( n )
n
−
1
n−1
n − 1
0
0
0
Θ
(
n
)
\Theta(n)
Θ ( n )
lg
n
\lg n
lg n
1
1
1
Θ
(
lg
∗
n
)
\Theta(\lg^∗n)
Θ ( lg ∗ n )
n
/
2
n/2
n / 2
1
1
1
Θ
(
lg
n
)
\Theta(\lg n)
Θ ( lg n )
n
/
2
n/2
n / 2
2
2
2
Θ
(
lg
n
)
\Theta(\lg n)
Θ ( lg n )
n
\sqrt n
n
2
2
2
Θ
(
lg
lg
n
)
\Theta(\lg \lg n)
Θ ( lg lg n )
n
\sqrt n
n
1
1
1
无法收敛
n
1
/
3
n^{1/3}
n 1 / 3
2
2
2
Θ
(
log
3
lg
n
)
\Theta(\log_3\lg n)
Θ ( log 3 lg n )
n
/
lg
n
n/\lg n
n / lg n
2
2
2
ω
(
l
g
l
g
n
)
,
o
(
l
g
n
)
\omega(lglgn),o(lgn)
ω ( l g l g n ) , o ( l g n )
f
(
n
)
=
n
f(n)=\sqrt n
f ( n ) = n
。KaTeX parse error: No such environment: align at position 7: \begin{̲a̲l̲i̲g̲n̲}̲ {{{n^{\frac{1}…
f
(
n
)
=
n
/
lg
n
f(n)=n/\lg{n}
f ( n ) = n / lg n ,当
n
n
n 足够大,
n
/
n
<
n
/
lg
n
<
n
/
2
n / \sqrt{n} < n/\lg{n} < n/2
n / n
< n / lg n < n / 2 。