1. 算法运行时间
在分析算法的效率时,常用用时间复杂度和空间复杂度来描述其运行时间和临时占用的存储空间大小。在多数情况下,我们更加关心一个算法的时间复杂度,当我们在分析算法的效率时,大多数情况下是指的时间效率。如果一个算法的最坏情况运行时间有比另一个算法更低的增长量级,那么我们通常认为前者比后者更加有效。例如,当一个算法的运行时间随输入规模 n n n的增长是以 n 2 n^2 n2的量级增长,而另一个算法以 n lg n n\lg n nlgn的量级增长时,则认为后者更加有效。
2. 渐近记号
当算法的输入规模足够大,使得运行时间只与增长量级有关时,研究算法的渐近效率通常比计算算法的实际运行时间更有意义。
渐近上界(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\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))
O(g(n))是一个函数集合,对于其中的某个元素
f
(
n
)
f(n)
f(n),存在一个常数
c
c
c和
n
0
n_0
n0,对于所有的
n
≥
n
0
n\ge n_0
n≥n0,
0
≤
f
(
n
)
≤
c
g
(
n
)
0\le f(n)\le cg(n)
0≤f(n)≤cg(n)成立。
例如,对于集合
O
(
n
2
)
O(n^2)
O(n2),
f
(
n
)
=
2
n
2
+
3
n
+
5
∈
O
(
n
2
)
f(n)=2n^2+3n+5\in O(n^2)
f(n)=2n2+3n+5∈O(n2),要证明存在常数
c
c
c和
n
0
n_0
n0,有
0
≤
2
n
2
+
3
n
+
5
≤
c
n
2
0\le 2n^2+3n+5\le cn^2
0≤2n2+3n+5≤cn2
将不等式除以
n
2
n^2
n2得:
0
≤
2
+
3
n
+
5
n
2
≤
c
0\le 2+\frac{3}{n}+\frac{5}{n^2}\le c
0≤2+n3+n25≤c
任取
c
=
2
+
ϵ
>
2
c=2+\epsilon \gt2
c=2+ϵ>2,得
ϵ
≥
3
n
+
5
n
2
\displaystyle \epsilon \ge \frac{3}{n}+\frac{5}{n^2}
ϵ≥n3+n25
设
3
n
0
+
5
n
0
2
=
ϵ
\displaystyle \frac{3}{n_0}+\frac{5}{n_0^2}=\epsilon
n03+n025=ϵ,由于
3
n
+
5
n
2
\displaystyle \frac{3}{n}+\frac{5}{n^2}
n3+n25在
[
1
,
+
∞
)
[1, +\infty)
[1,+∞)单调递减,因此
n
≥
n
0
n\ge n_0
n≥n0时,
ϵ
≥
3
n
+
5
n
2
\displaystyle \epsilon \ge \frac{3}{n}+\frac{5}{n^2}
ϵ≥n3+n25成立,故存在常数
c
c
c和
n
0
n_0
n0,对于所有的
n
≥
n
0
n\ge n_0
n≥n0,
0
≤
2
n
2
+
3
n
+
5
≤
c
n
2
0\le 2n^2+3n+5\le cn^2
0≤2n2+3n+5≤cn2成立。
注意:
O
O
O记号表示的只是一个增长量级的一个渐近上界,例如
f
(
n
)
=
2
n
2
+
3
n
+
5
∈
O
(
n
3
)
f(n)=2n^2+3n+5\in O(n^3)
f(n)=2n2+3n+5∈O(n3)、
f
(
n
)
=
2
n
+
1
∈
O
(
n
2
)
f(n)=2n+1\in O(n^2)
f(n)=2n+1∈O(n2)都是成立的。
渐近下界(Ω记号)
类似于渐近上界,
Ω
(
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\ge n_0,有0\le cg(n)\le f(n)\}
Ω(g(n))={f(n):存在正常量c和n0,使得对所有n≥n0,有0≤cg(n)≤f(n)}
下面证明:
f
(
n
)
=
2
n
2
+
3
n
+
5
∈
Ω
(
n
2
)
f(n)=2n^2+3n+5\in \Omega(n^2)
f(n)=2n2+3n+5∈Ω(n2)(即证明存在正常量
c
c
c和
n
0
n_0
n0,使得对所有
n
≥
n
0
n\ge n_0
n≥n0,有
0
≤
c
g
(
n
)
≤
f
(
n
)
0\le cg(n)\le f(n)
0≤cg(n)≤f(n))
证:对于
2
n
2
+
3
n
+
5
≥
c
n
2
2n^2+3n+5\ge cn^2
2n2+3n+5≥cn2,两边除以
n
2
n^2
n2得:
2
+
3
n
+
5
n
2
≥
c
\displaystyle 2+\frac{3}{n}+\frac{5}{n^2}\ge c
2+n3+n25≥c
由于
3
n
+
5
n
2
∈
(
0
,
8
]
\displaystyle \frac{3}{n}+\frac{5}{n^2}\in(0,8]
n3+n25∈(0,8],则
2
+
3
n
+
5
n
2
∈
(
2
,
10
]
\displaystyle 2+\frac{3}{n}+\frac{5}{n^2}\in (2, 10]
2+n3+n25∈(2,10]
因此当
c
∈
(
0
,
2
]
c\in (0, 2]
c∈(0,2]时,原不等式成立。
可得,
f
(
n
)
=
2
n
2
+
3
n
+
5
∈
Ω
(
n
2
)
f(n)=2n^2+3n+5\in \Omega(n^2)
f(n)=2n2+3n+5∈Ω(n2)
渐近紧确界(Θ记号)
对于以下函数的集合:
Θ
(
g
(
n
)
)
=
{
f
(
n
)
:
存
在
正
常
量
c
1
、
c
2
和
n
0
,
使
得
对
所
有
n
≥
n
0
,
有
c
1
g
(
n
)
≤
f
(
n
)
≤
c
2
g
(
n
)
}
\Theta(g(n))=\{f(n):存在正常量c_1、c_2和n_0,使得对所有n\ge n_0,有c_1g(n)\le f(n)\le c_2g(n)\}
Θ(g(n))={f(n):存在正常量c1、c2和n0,使得对所有n≥n0,有c1g(n)≤f(n)≤c2g(n)}下面将看到,
g
(
n
)
=
n
2
g(n)=n^2
g(n)=n2是函数
f
(
n
)
=
2
n
2
+
3
n
+
5
f(n)=2n^2+3n+5
f(n)=2n2+3n+5的一个渐近紧确界。
对于不等式:
c
1
n
2
≤
2
n
2
+
3
n
+
5
≤
c
2
n
2
c_1n^2\le 2n^2+3n+5\le c_2n^2
c1n2≤2n2+3n+5≤c2n2用
n
2
n^2
n2除上式得:
c
1
≤
2
+
3
n
+
5
n
2
≤
c
2
c_1\le 2+\frac{3}{n}+\frac{5}{n^2}\le c_2
c1≤2+n3+n25≤c2因此,可以任取
c
1
=
1
、
c
2
=
3
c_1=1、c_2=3
c1=1、c2=3使得上式成立。
因此,存在正常量
c
1
c_1
c1、
c
2
c_2
c2和
n
0
n_0
n0,使得对所有
n
≥
n
0
n\ge n_0
n≥n0,有
c
1
g
(
n
)
≤
f
(
n
)
≤
c
2
g
(
n
)
c_1g(n)\le f(n)\le c_2g(n)
c1g(n)≤f(n)≤c2g(n)
因此,
f
(
n
)
=
2
n
2
+
3
n
+
5
∈
Θ
(
n
2
)
f(n)=2n^2+3n+5\in \Theta(n^2)
f(n)=2n2+3n+5∈Θ(n2).
注:常见的时间复杂度如下:
Θ
(
1
)
<
Θ
(
ln
n
)
<
Θ
(
n
)
<
Θ
(
n
ln
n
)
<
Θ
(
n
2
)
<
Θ
(
n
3
)
<
Θ
(
2
n
)
<
Θ
(
2
!
)
<
Θ
(
n
n
)
\Theta(1)\lt\Theta(\ln n)\lt\Theta(n)\lt\Theta(n\ln n)\lt\Theta(n^2)\lt\Theta(n^3)\lt\Theta(2^n)\lt\Theta(2!)\lt\Theta(n^n)
Θ(1)<Θ(lnn)<Θ(n)<Θ(nlnn)<Θ(n2)<Θ(n3)<Θ(2n)<Θ(2!)<Θ(nn)
常见用法解释
①当渐近记号独立于等式(或不等式)的右边时,如在
n
=
O
(
n
2
)
n=O(n^2)
n=O(n2)中,这里意指集合的成员关系:
n
∈
O
(
n
2
)
n\in O(n^2)
n∈O(n2).
②当渐近记号出现在某个公式中时,我们将其解释为代表某个我们不关心名称的匿名函数。例如:
2
n
2
+
3
n
+
1
=
2
n
2
+
Θ
(
n
)
2n^2+3n+1=2n^2+\Theta(n)
2n2+3n+1=2n2+Θ(n)意指
2
n
2
+
3
n
+
1
=
2
n
2
+
f
(
n
)
2n^2+3n+1=2n^2+f(n)
2n2+3n+1=2n2+f(n),其中
f
(
n
)
f(n)
f(n)是集合
Θ
(
n
)
\Theta(n)
Θ(n)中的一个函数。
注:一个表达式中匿名函数的数目可以理解为等于渐近记号出现的次数。???
③当渐进记号出现在等式的左边,如:
2
n
2
+
Θ
(
n
)
=
Θ
(
n
2
)
2n^2+\Theta(n)=\Theta(n^2)
2n2+Θ(n)=Θ(n2)这里可理解为右边比左边忽略了更多的细节。
3. 其他渐近记号
上述用
O
O
O和
Ω
\Omega
Ω记号提供的渐近界限可能不是渐近紧确的,例如
2
n
2
+
1
=
O
(
n
2
)
2n^2+1=O(n^2)
2n2+1=O(n2)是渐近紧确的,而
2
n
2
+
1
=
O
(
n
3
)
2n^2+1=O(n^3)
2n2+1=O(n3)不是渐近紧确的。
下面用
o
o
o和
ω
\omega
ω记号所提供的渐进界限是非渐近紧确的。
o记号
定义
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\ge n_0,有0\le f(n)\lt cg(n)\}
o(g(n))={f(n):对任意正常量c>0,存在常量n0>0,使得对所有n≥n0,有0≤f(n)<cg(n)}例如:
2
n
=
o
(
n
2
)
2n=o(n^2)
2n=o(n2)
ω记号
定义
ω
(
g
(
n
)
)
\omega(g(n))
ω(g(n)) 为以下集合:
o
(
g
(
n
)
)
=
{
f
(
n
)
:
对
任
意
正
常
量
c
>
0
,
存
在
常
量
n
0
>
0
,
使
得
对
所
有
n
≥
n
0
,
有
0
≤
c
g
(
n
)
<
f
(
n
)
}
o(g(n))=\{f(n):对任意正常量c>0,存在常量n_0>0,使得对所有n\ge n_0,有0\le cg(n) \lt f(n)\}
o(g(n))={f(n):对任意正常量c>0,存在常量n0>0,使得对所有n≥n0,有0≤cg(n)<f(n)}例如:
2
n
2
=
ω
(
n
)
2n^2=\omega(n)
2n2=ω(n)
注:其中 f ( n ) ∈ ω ( g ( n ) ) f(n)\in\omega(g(n)) f(n)∈ω(g(n))当且仅当 g ( n ) ∈ o ( f ( n ) ) g(n)\in o(f(n)) g(n)∈o(f(n)).
4. 性质
①传递性(
Θ
、
O
、
Ω
、
o
、
ω
\Theta、O、\Omega、o、\omega
Θ、O、Ω、o、ω):
f
(
n
)
=
Θ
(
g
(
n
)
)
、
g
(
n
)
=
Θ
(
h
(
n
)
)
→
f
(
n
)
=
Θ
(
h
(
n
)
)
f
(
n
)
=
O
(
g
(
n
)
)
、
g
(
n
)
=
O
(
h
(
n
)
)
→
f
(
n
)
=
O
(
h
(
n
)
)
f
(
n
)
=
Ω
(
g
(
n
)
)
、
g
(
n
)
=
Ω
(
h
(
n
)
)
→
f
(
n
)
=
Ω
(
h
(
n
)
)
f
(
n
)
=
o
(
g
(
n
)
)
、
g
(
n
)
=
o
(
h
(
n
)
)
→
f
(
n
)
=
o
(
h
(
n
)
)
f
(
n
)
=
ω
(
g
(
n
)
)
、
g
(
n
)
=
ω
(
h
(
n
)
)
→
f
(
n
)
=
ω
(
h
(
n
)
)
f(n)=\Theta(g(n)) 、g(n)=\Theta(h(n))\rightarrow f(n)=\Theta(h(n)) \\f(n)=O(g(n))、g(n)=O(h(n))\rightarrow f(n)=O(h(n)) \\f(n)=\Omega(g(n))、g(n)=\Omega(h(n))\rightarrow f(n)=\Omega(h(n)) \\f(n)=o(g(n))、g(n)=o(h(n))\rightarrow f(n)=o(h(n)) \\f(n)=\omega(g(n))、g(n)=\omega(h(n))\rightarrow f(n)=\omega(h(n))
f(n)=Θ(g(n))、g(n)=Θ(h(n))→f(n)=Θ(h(n))f(n)=O(g(n))、g(n)=O(h(n))→f(n)=O(h(n))f(n)=Ω(g(n))、g(n)=Ω(h(n))→f(n)=Ω(h(n))f(n)=o(g(n))、g(n)=o(h(n))→f(n)=o(h(n))f(n)=ω(g(n))、g(n)=ω(h(n))→f(n)=ω(h(n))
②自反性(
Θ
、
O
、
Ω
\Theta、O、\Omega
Θ、O、Ω):
f
(
n
)
=
Θ
(
f
(
n
)
)
f
(
n
)
=
O
(
f
(
n
)
)
f
(
n
)
=
Ω
(
f
(
n
)
)
f(n)=\Theta(f(n)) \\f(n)=O(f(n)) \\f(n)=\Omega(f(n))
f(n)=Θ(f(n))f(n)=O(f(n))f(n)=Ω(f(n))
注意:渐近记号
o
o
o和
ω
\omega
ω不满足自反性。
③对称性(
Θ
\Theta
Θ)
f
(
n
)
=
Θ
(
g
(
n
)
)
当
且
仅
当
g
(
n
)
=
Θ
(
f
(
n
)
)
f(n)=\Theta(g(n))当且仅当g(n)=\Theta(f(n))
f(n)=Θ(g(n))当且仅当g(n)=Θ(f(n))
④转置对称性(
O
、
Ω
、
o
、
ω
O、\Omega、o、\omega
O、Ω、o、ω)
f
(
n
)
=
O
(
g
(
n
)
)
当
且
仅
当
g
(
n
)
=
Ω
(
f
(
n
)
)
f
(
n
)
=
o
(
g
(
n
)
)
当
且
仅
当
g
(
n
)
=
ω
(
f
(
n
)
)
f(n)=O(g(n))当且仅当g(n)=\Omega(f(n)) \\f(n)=o(g(n))当且仅当g(n)=\omega(f(n))
f(n)=O(g(n))当且仅当g(n)=Ω(f(n))f(n)=o(g(n))当且仅当g(n)=ω(f(n))
⑤三分性
对于实数来说,下面三种情况必有一种情况成立:
a
<
b
,
a
>
b
,
a
=
b
a<b,a>b,a=b
a<b,a>b,a=b但对于函数来说,不是所有函数都可以进行渐近比较,例如:
n
与
n
1
+
sin
n
n与n^{1+\sin n}
n与n1+sinn。
⑥与实数进行类比
f
(
n
)
=
O
(
g
(
n
)
)
类
似
于
a
≤
b
f
(
n
)
=
Ω
(
g
(
n
)
)
类
似
于
a
≥
b
f
(
n
)
=
Θ
(
g
(
n
)
)
类
似
于
a
=
b
f
(
n
)
=
o
(
g
(
n
)
)
类
似
于
a
<
b
f
(
n
)
=
ω
(
g
(
n
)
)
类
似
于
a
>
b
f(n)=O(g(n))类似于a\le b \\f(n)=\Omega(g(n))类似于a\ge b \\f(n)=\Theta(g(n))类似于a = b \\f(n)=o(g(n))类似于a\lt b \\f(n)=\omega (g(n))类似于a\gt b
f(n)=O(g(n))类似于a≤bf(n)=Ω(g(n))类似于a≥bf(n)=Θ(g(n))类似于a=bf(n)=o(g(n))类似于a<bf(n)=ω(g(n))类似于a>b因此,
Θ
、
O
、
Ω
、
o
、
ω
\Theta、O、\Omega、o、\omega
Θ、O、Ω、o、ω可用渐近等于、渐近小于等于、渐近大于等于、渐近小于、渐近大于来描述。
5. 习题
3.1-1 假设
f
(
n
)
f(n)
f(n)与
g
(
n
)
g(n)
g(n)都是渐近非负函数。使用
Θ
\Theta
Θ记号的基本定义来证明
max
(
f
(
n
)
,
g
(
n
)
)
=
Θ
(
f
(
n
)
+
g
(
n
)
)
\max(f(n),g(n))=\Theta(f(n)+g(n))
max(f(n),g(n))=Θ(f(n)+g(n)).
证明:
由于
f
(
n
)
f(n)
f(n)与
g
(
n
)
g(n)
g(n)都是渐近非负函数,则必存在
n
0
n_0
n0使得
n
≥
n
0
n\ge n_0
n≥n0时,
f
(
n
)
≥
0
f(n)\ge 0
f(n)≥0且
g
(
n
)
≥
0
g(n)\ge 0
g(n)≥0
因此,当
n
≥
n
0
n\ge n_0
n≥n0时,
max
(
f
(
n
)
,
g
(
n
)
)
≤
f
(
n
)
+
g
(
n
)
\max (f(n), g(n))\le f(n)+g(n)
max(f(n),g(n))≤f(n)+g(n)因此,存在
c
=
1
、
n
0
>
0
c=1、n_0>0
c=1、n0>0使得对所有
n
≥
n
0
n\ge n_0
n≥n0时,
max
(
f
(
n
)
,
g
(
n
)
)
≤
c
(
f
(
n
)
+
g
(
n
)
)
\max (f(n), g(n))\le c(f(n)+g(n))
max(f(n),g(n))≤c(f(n)+g(n))因此,
max
(
f
(
n
)
,
g
(
n
)
)
=
O
(
f
(
n
)
+
g
(
n
)
)
\max (f(n), g(n))= O(f(n)+g(n))
max(f(n),g(n))=O(f(n)+g(n))。
同理可得:
max
(
f
(
n
)
,
g
(
n
)
)
≥
1
2
(
f
(
n
)
+
g
(
n
)
)
\displaystyle \max(f(n), g(n)) \ge \frac{1}{2}(f(n)+g(n))
max(f(n),g(n))≥21(f(n)+g(n))
因此,存在
c
=
1
/
2
、
n
0
>
0
c=1/2、n_0>0
c=1/2、n0>0使得对所有
n
≥
n
0
n\ge n_0
n≥n0时,
max
(
f
(
n
)
,
g
(
n
)
)
≥
c
(
f
(
n
)
+
g
(
n
)
)
\max (f(n), g(n))\ge c(f(n)+g(n))
max(f(n),g(n))≥c(f(n)+g(n))因此,
max
(
f
(
n
)
,
g
(
n
)
)
=
Ω
(
f
(
n
)
+
g
(
n
)
)
\max (f(n), g(n))= \Omega(f(n)+g(n))
max(f(n),g(n))=Ω(f(n)+g(n))。
综上,
max
(
f
(
n
)
,
g
(
n
)
)
=
Θ
(
f
(
n
)
+
g
(
n
)
)
\max (f(n), g(n))= \Theta(f(n)+g(n))
max(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=Θ(nb)
证明:
展开
(
n
+
a
)
b
=
n
b
+
c
1
n
b
−
1
+
c
2
n
b
−
2
+
.
.
.
+
c
b
n
0
(n+a)^b=n^b+c_1n^{b-1}+c_2n^{b-2}+...+c_bn^0
(n+a)b=nb+c1nb−1+c2nb−2+...+cbn0
则不等式:
d
1
n
b
≤
(
n
+
a
)
b
≤
d
2
n
b
d_1n^b\le (n+a)^b\le d_2n^b
d1nb≤(n+a)b≤d2nb等价于:
d
1
n
b
≤
n
b
+
c
1
n
b
−
1
+
c
2
n
b
−
2
+
.
.
.
+
c
b
n
0
≤
d
2
n
b
d_1n^b\le n^b+c_1n^{b-1}+c_2n^{b-2}+...+c_bn^0\le d_2n^b
d1nb≤nb+c1nb−1+c2nb−2+...+cbn0≤d2nb用
n
b
n^b
nb除上式得:
d
1
≤
1
+
c
1
n
+
c
2
n
2
+
.
.
.
+
c
b
n
b
≤
d
2
d_1\le 1+\frac{c_1}{n}+\frac{c_2}{n^2}+...+\frac{c_b}{n^b}\le d_2
d1≤1+nc1+n2c2+...+nbcb≤d2可取
d
1
=
0.5
,
d
2
=
1.5
d_1=0.5,d_2=1.5
d1=0.5,d2=1.5,则存在
n
0
n_0
n0使得对所有
n
≥
n
0
n\ge n_0
n≥n0上式成立。
因此,
(
n
+
a
)
b
=
Θ
(
n
b
)
(n+a)^b=\Theta(n^b)
(n+a)b=Θ(nb)
3.1-3 解释为什么“算法A的运行时间至少是
O
(
n
2
)
O(n^2)
O(n2)”这一表述是无意义的。
因为
O
(
n
)
O(n)
O(n)是描述的渐近上界,而至少应该用渐近下界来描述。
3.1-4
2
n
+
1
=
O
(
2
n
)
2^{n+1}=O(2^n)
2n+1=O(2n)成立吗?
2
2
n
=
O
(
2
n
)
2^{2n}=O(2^n)
22n=O(2n)成立吗?
①成立
证:存在
c
≥
2
c\ge2
c≥2使得对任意n,
c
×
2
n
≥
2
×
2
n
c×2^n\ge2×2^n
c×2n≥2×2n成立,即
2
n
+
1
≤
c
2
n
2^{n+1}\le c2^n
2n+1≤c2n成立。因此
2
n
+
1
=
O
(
2
n
)
2^{n+1}=O(2^n)
2n+1=O(2n)。
②不成立
证:要使
2
2
n
≤
c
2
n
2^{2n}\le c2^n
22n≤c2n,则
2
n
≤
c
2^{n}\le c
2n≤c
显然不存在
c
、
n
0
c、n_0
c、n0使得对任意
n
≥
n
0
n\ge n_0
n≥n0,
2
n
≤
c
2^{n}\le c
2n≤c成立,故
2
n
+
1
≠
O
(
2
n
)
2^{n+1}\neq O(2^n)
2n+1̸=O(2n)。
3.1-5 证明定理:对任意两个函数
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)),当且仅当
f
(
n
)
=
O
(
g
(
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
)
=
O
(
g
(
n
)
)
\because f(n)=O(g(n))
∵f(n)=O(g(n))且
f
(
n
)
=
Ω
(
g
(
n
)
)
f(n)=\Omega(g(n))
f(n)=Ω(g(n))
∴
\therefore
∴存在
c
1
、
n
1
c_1、n_1
c1、n1使得对任意
n
≥
n
1
n\ge n_1
n≥n1,
0
<
f
(
n
)
≤
c
1
g
(
n
)
0<f(n)\le c_1g(n)
0<f(n)≤c1g(n);
\space\space\space
存在
c
2
、
n
2
c_2、n_2
c2、n2使得对任意
n
≥
n
2
n\ge n_2
n≥n2,
0
<
c
2
g
(
n
)
≤
f
(
n
)
0< c_2g(n)\le f(n)
0<c2g(n)≤f(n);
取
n
0
=
max
(
n
1
,
n
2
)
n_0=\max(n_1, n_2)
n0=max(n1,n2),因此任意
n
≥
n
0
n\ge n_0
n≥n0,
c
2
g
(
n
)
≤
f
(
n
)
≤
c
1
g
(
n
)
c_2g(n)\le f(n) \le c_1g(n)
c2g(n)≤f(n)≤c1g(n)
由定义得,
f
(
n
)
=
Θ
(
g
(
n
)
)
f(n)=\Theta(g(n))
f(n)=Θ(g(n))
3.1-7 证明:
o
(
g
(
n
)
)
∩
ω
(
g
(
n
)
)
o(g(n))\cap\omega(g(n))
o(g(n))∩ω(g(n))为空集
证明:设
h
(
n
)
∈
o
(
g
(
n
)
)
∩
ω
(
g
(
n
)
)
h(n)\in o(g(n))\cap\omega(g(n))
h(n)∈o(g(n))∩ω(g(n))则有:
lim
n
→
∞
h
(
n
)
g
(
n
)
=
0
且
lim
n
→
∞
h
(
n
)
g
(
n
)
=
∞
\lim_{n\rightarrow\infty}\frac{h(n)}{g(n)}=0且\lim_{n\rightarrow\infty}\frac{h(n)}{g(n)}=\infty
n→∞limg(n)h(n)=0且n→∞limg(n)h(n)=∞
显然不存在
h
(
n
)
h(n)
h(n)使得上述二式成立,因此
h
(
n
)
h(n)
h(n)不存在,即
o
(
g
(
n
)
)
∩
ω
(
g
(
n
)
)
o(g(n))\cap\omega(g(n))
o(g(n))∩ω(g(n))为空集。