文章目录
- 3.1-1 证明两函数与两函数之和的渐进关系
- 3.1-2 证明指数函数的渐进关系
- 3.1-3 解释为什么“算法A的试运行时间至少是 O ( n 2 ) \Omicron(n^2) O(n2) "这一表述没有意思?
- 3.1-4 O 示例 \Omicron 示例 O示例
- 3.1-5 证明定理3.1
- 3.1-6 证明:一个算法的运行时间为 Θ [ g ( n ) ] \Theta[g(n)] Θ[g(n)]当前仅当其最坏情况运行时间 O [ g ( n ) ] \Omicron[g(n)] O[g(n)]且其最好情况运行时间为 Ω [ g ( n ) ] \Omega[g(n)] Ω[g(n)]。
- 3.1-7 证明: o [ g ( n ) ] ∩ ω [ g ( n ) ] = ∅ o[g(n)]\cap \omega[g(n)]=\varnothing o[g(n)]∩ω[g(n)]=∅
- 3.1-8 扩展多元渐进函数的定义
- 结语
3.1-1 证明两函数与两函数之和的渐进关系
假设
f
(
n
)
与
g
(
n
)
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)]。
max[f(n),g(n)]=Θ[f(n)+g(n)]。
证明:
f
(
n
)
与
g
(
n
)
都是渐进非负函数
∃
n
1
,
n
2
,
当
n
>
n
1
时,有
f
(
n
)
>
0
;
n
>
n
2
时,有
g
(
n
)
>
0
取
n
0
=
max
(
n
1
,
n
2
)
,当
n
>
n
0
时,有
0
≤
f
(
n
)
+
g
(
n
)
2
≤
m
a
x
[
f
(
n
)
+
g
(
n
)
]
≤
f
(
n
)
+
g
(
n
)
此时取
c
1
=
1
2
,
c
2
=
1
,
当
n
>
n
0
时,有
max
[
f
(
n
)
+
g
(
n
)
]
=
Θ
[
f
(
n
)
+
g
(
n
)
]
证明:\\ f(n)与g(n)都是渐进非负函数\\ \exist n_1,n_2,当n\gt n_1时,有f(n)\gt 0;n\gt n_2时,有g(n)\gt 0\\ 取n_0=\max(n_1,n_2),当n\gt n_0时,有\\ 0\le\frac{f(n)+g(n)}{2}\le max[f(n)+g(n)]\le f(n)+g(n)\\ 此时取c_1=\frac{1}{2},c_2=1,当n\gt n_0时,有\\ \max[f(n)+g(n)]=\Theta[f(n)+g(n)]
证明:f(n)与g(n)都是渐进非负函数∃n1,n2,当n>n1时,有f(n)>0;n>n2时,有g(n)>0取n0=max(n1,n2),当n>n0时,有0≤2f(n)+g(n)≤max[f(n)+g(n)]≤f(n)+g(n)此时取c1=21,c2=1,当n>n0时,有max[f(n)+g(n)]=Θ[f(n)+g(n)]
3.1-2 证明指数函数的渐进关系
证明:对任意实常量
a
,
b
a,b
a,b其中,
b
>
0
b\gt 0
b>0,有
(
n
+
a
)
b
=
Θ
(
n
b
)
(n+a)^b=\Theta(n^b)
(n+a)b=Θ(nb)
证明:
二项式展开
(
n
+
a
)
b
:
(
n
+
a
)
b
=
∑
k
=
0
b
C
k
b
n
b
−
k
a
k
=
C
0
b
n
b
a
0
+
C
1
b
n
b
−
1
a
1
+
⋯
+
C
b
b
n
0
a
b
当
n
≥
1
时,有
C
0
b
n
b
a
0
≤
∑
k
=
0
b
C
k
b
n
b
−
k
a
k
≤
(
C
0
b
a
0
+
C
1
b
a
1
+
⋯
+
C
b
b
a
b
)
n
b
令
c
1
=
1
,
c
2
=
(
C
0
b
a
0
+
C
1
b
a
1
+
⋯
+
C
b
b
a
b
)
∴
(
n
+
a
)
b
=
Θ
(
n
b
)
证明:\\ 二项式展开(n+a)^b:\\ (n+a)^b=\sum_{k=0}^bC_k^bn^{b-k}a^k=C_0^bn^ba^0+C_1^bn^{b-1}a^1+\cdots+C_b^bn^0a^b\\ 当n\ge 1时,有\\ C_0^bn^ba^0\le \sum_{k=0}^bC_k^bn^{b-k}a^k\le (C_0^ba^0+C_1^ba^1+\cdots+C_b^ba^b)n^b\\ 令c_1=1,c_2=(C_0^ba^0+C_1^ba^1+\cdots+C_b^ba^b)\\ \therefore (n+a)^b=\Theta(n^b)
证明:二项式展开(n+a)b:(n+a)b=k=0∑bCkbnb−kak=C0bnba0+C1bnb−1a1+⋯+Cbbn0ab当n≥1时,有C0bnba0≤k=0∑bCkbnb−kak≤(C0ba0+C1ba1+⋯+Cbbab)nb令c1=1,c2=(C0ba0+C1ba1+⋯+Cbbab)∴(n+a)b=Θ(nb)
3.1-3 解释为什么“算法A的试运行时间至少是 O ( n 2 ) \Omicron(n^2) O(n2) "这一表述没有意思?
解释 : T ( n ) 为算法的运行时间,我们讨论 T ( n ) 的上界和下界: 表述: T ( n ) ≥ O ( n 2 ) 上界:明显没有 下界: 假设 f ( n ) = O ( n 2 ) ,此时 f ( n ) 可以是任何小于 n 2 的函数 , 比如常数 , n 等等 ∴ 表述:算法 A 的运行时间至少是 O ( n 2 ) 没有意义 解释:\\ T(n)为算法的运行时间,我们讨论T(n)的上界和下界:\\ 表述:T(n)\ge \Omicron(n^2)\\ 上界:明显没有\\ 下界:\\ 假设f(n)=\Omicron(n^2),此时f(n)可以是任何小于n^2的函数,比如常数,n等等\\ \therefore 表述:算法A的运行时间至少是\Omicron(n^2)没有意义 解释:T(n)为算法的运行时间,我们讨论T(n)的上界和下界:表述:T(n)≥O(n2)上界:明显没有下界:假设f(n)=O(n2),此时f(n)可以是任何小于n2的函数,比如常数,n等等∴表述:算法A的运行时间至少是O(n2)没有意义
- 同理:“算法A的运行时间至多是 Ω ( n 2 ) \Omega(n^2) Ω(n2)”也是没有意义的
3.1-4 O 示例 \Omicron 示例 O示例
2
n
+
1
=
O
(
2
n
)
2^{n+1}=\Omicron(2^n)
2n+1=O(2n)成立吗?
2
2
n
=
O
(
2
n
)
2^{2n}=\Omicron(2^n)
22n=O(2n)成立吗?
2
n
+
1
=
O
(
2
n
)
成立;
2
2
n
=
O
(
2
n
)
不成立;
证明:
2
n
+
1
=
O
(
2
n
)
成立
取
c
≥
2
,
n
o
=
0
,
当
n
≥
n
0
时有
0
≤
2
n
+
1
≤
c
2
n
证明:
2
2
n
=
O
(
2
n
)
不成立
假设存在常量
c
,
n
0
当
n
≥
n
0
有
0
≤
2
2
n
=
4
n
≤
c
2
n
成立
c
≥
2
n
,
这样的
c
不存在
,
因此等式不成立
2^{n+1}=\Omicron(2^n)成立;2^{2n}=\Omicron(2^n)不成立;\\ 证明:2^{n+1}=\Omicron(2^n)成立\\ 取c\ge 2,no=0,当n\ge n_0时 有0\le 2^{n+1}\le c2^n\\ 证明:2^{2n}=\Omicron(2^n)不成立\\ 假设存在常量c,n_0 当n\ge n_0 有0\le 2^{2n}=4^n\le c2^n成立 c\ge 2^n,这样的c不存在,因此等式不成立
2n+1=O(2n)成立;22n=O(2n)不成立;证明:2n+1=O(2n)成立取c≥2,no=0,当n≥n0时有0≤2n+1≤c2n证明:22n=O(2n)不成立假设存在常量c,n0当n≥n0有0≤22n=4n≤c2n成立c≥2n,这样的c不存在,因此等式不成立
3.1-5 证明定理3.1
定理3.1 对人员两个函数 f ( n ) 和 g ( n ) f(n)和g(n) f(n)和g(n),我没有 f ( n ) = Θ [ g ( n ) ] f(n)=\Theta[g(n)] f(n)=Θ[g(n)],当且仅当 f ( n ) = O [ g ( n ) ] 且 f ( n ) = Ω [ g ( n ) ] f(n)=\Omicron[g(n)]且f(n)=\Omega[g(n)] f(n)=O[g(n)]且f(n)=Ω[g(n)]
证明: 必要性: f ( n ) = Θ [ g ( n ) ] ,存在常数 c 1 , c 2 , n 0 ,当 n ≥ n 0 时,有 0 ≤ c 1 f ( n ) ≤ g ( n ) ≤ c 2 f ( n ) 所以 f ( n ) = O [ g ( n ) ] 且 f ( n ) = Ω [ g ( n ) ] 充分性 : f ( n ) = O [ g ( n ) ] ,存在常数 c 1 , n 1 ,当 n ≥ n 1 时,有 0 ≤ c 1 f ( n ) ≤ g ( n ) f ( n ) = Ω [ g ( n ) ] ,存在常数 c 2 , n 2 ,当 n ≥ n 2 时,有 0 ≤ g ( n ) ≤ c 2 f ( n ) 令 n 0 = max ( n 1 , n 2 ) ,对上述 c 1 , c 2 ,有 0 ≤ c 1 f ( n ) ≤ g ( n ) ≤ c 2 f ( n ) ∴ f ( n ) = Θ [ g ( n ) ] 证明:\\ 必要性:\\ f(n)=\Theta[g(n)],存在常数c_1,c_2,n_0,当n\ge n_0时,有\\ 0\le c_1f(n)\le g(n)\le c_2f(n)\\ 所以f(n)=\Omicron[g(n)]且f(n)=\Omega[g(n)]\\ 充分性:\\ f(n)=\Omicron[g(n)],存在常数c_1,n_1,当n\ge n_1时,有\\ 0\le c_1f(n)\le g(n)\\ f(n)=\Omega[g(n)],存在常数c_2,n_2,当n\ge n_2时,有\\ 0\le g(n)\le c_2f(n)\\ 令n_0=\max(n_1,n_2),对上述c_1,c_2,有\\ 0\le c_1f(n)\le g(n)\le c_2f(n)\\ \therefore f(n)=\Theta[g(n)] 证明:必要性:f(n)=Θ[g(n)],存在常数c1,c2,n0,当n≥n0时,有0≤c1f(n)≤g(n)≤c2f(n)所以f(n)=O[g(n)]且f(n)=Ω[g(n)]充分性:f(n)=O[g(n)],存在常数c1,n1,当n≥n1时,有0≤c1f(n)≤g(n)f(n)=Ω[g(n)],存在常数c2,n2,当n≥n2时,有0≤g(n)≤c2f(n)令n0=max(n1,n2),对上述c1,c2,有0≤c1f(n)≤g(n)≤c2f(n)∴f(n)=Θ[g(n)]
3.1-6 证明:一个算法的运行时间为 Θ [ g ( n ) ] \Theta[g(n)] Θ[g(n)]当前仅当其最坏情况运行时间 O [ g ( n ) ] \Omicron[g(n)] O[g(n)]且其最好情况运行时间为 Ω [ g ( n ) ] \Omega[g(n)] Ω[g(n)]。
证明: 必要性不在证明 充分性 设 T w ( n ) 为算法最坏情况运行时间, T b ( n ) 为算法最好情况运行时间 , T ( n ) 运行时间 存在常数 c 1 , n 1 , 当 n ≥ n 1 时,有 0 ≤ T w ( n ) ≤ c 1 g ( n ) 存在常数 c 2 , n 2 , 当 n ≥ n 2 时,有 0 ≤ c 2 g ( n ) ≤ T b ( n ) 取 n 0 = max ( n 1 , n 2 ) ,对上述 c 1 , c 2 有 0 ≤ c 2 g ( n ) ≤ T b ( n ) ≤ T ( n ) ≤ T w ( n ) ≤ c 1 g ( n ) 证明完毕 . 证明:\\ 必要性不在证明\\ 充分性\\ 设T_w(n)为算法最坏情况运行时间,T_b(n)为算法最好情况运行时间,T(n)运行时间\\ 存在常数c_1,n_1,当n\ge n_1时,有\\ 0\le T_w(n) \le c_1g(n)\\ 存在常数c_2,n_2,当n\ge n_2时,有\\ 0\le c_2g(n)\le T_b(n)\\ 取n_0=\max(n_1,n_2),对上述c_1,c_2有\\ 0\le c_2g(n)\le T_b(n)\le T(n)\le T_w(n)\le c_1g(n)\\ 证明完毕. 证明:必要性不在证明充分性设Tw(n)为算法最坏情况运行时间,Tb(n)为算法最好情况运行时间,T(n)运行时间存在常数c1,n1,当n≥n1时,有0≤Tw(n)≤c1g(n)存在常数c2,n2,当n≥n2时,有0≤c2g(n)≤Tb(n)取n0=max(n1,n2),对上述c1,c2有0≤c2g(n)≤Tb(n)≤T(n)≤Tw(n)≤c1g(n)证明完毕.
3.1-7 证明: o [ g ( n ) ] ∩ ω [ g ( n ) ] = ∅ o[g(n)]\cap \omega[g(n)]=\varnothing o[g(n)]∩ω[g(n)]=∅
证明: 令 f ( n ) = o [ g ( n ) ] ∩ ω [ g ( n ) ] = ∅ 对于 ∀ c 1 > 0 , c 2 > 0 , ∃ n 1 > 0 , 当 n > n 1 时,有 0 ≤ c 1 g ( n ) < f ( n ) ∃ n 2 > 0 , 当 n > n 2 时,有 0 ≤ f ( n ) < c 2 g ( n ) 取 n 0 = max ( n 1 , n 2 ) , c = c 1 = c 2 , 有 0 ≤ c g ( n ) < f ( n ) < c g ( n ) 显然等式不成立 ∴ f ( n ) = o [ g ( n ) ] ∩ ω [ g ( n ) ] = ∅ 证明:\\ 令f(n)=o[g(n)]\cap \omega[g(n)]=\varnothing\\ 对于\forall c_1\gt 0,c_2\gt 0,\\ \exist n_1\gt 0,当n\gt n_1时,有0\le c_1g(n)\lt f(n) \\ \exist n_2\gt 0,当n\gt n_2时,有0\le f(n)\lt c_2g(n)\\ 取n_0=\max(n_1,n_2),c=c_1=c_2,有0\le cg(n)\lt f(n)\lt cg(n)\\ 显然等式不成立\\ \therefore f(n)=o[g(n)]\cap \omega[g(n)]=\varnothing 证明:令f(n)=o[g(n)]∩ω[g(n)]=∅对于∀c1>0,c2>0,∃n1>0,当n>n1时,有0≤c1g(n)<f(n)∃n2>0,当n>n2时,有0≤f(n)<c2g(n)取n0=max(n1,n2),c=c1=c2,有0≤cg(n)<f(n)<cg(n)显然等式不成立∴f(n)=o[g(n)]∩ω[g(n)]=∅
3.1-8 扩展多元渐进函数的定义
可以扩展我们的记号到两个参数n和m的情形,其中n和m可以按照不同速率独立地趋于无穷。对应给定的函数 g ( n , m ) g(n,m) g(n,m),用 O [ g ( n , m ) ] \Omicron[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 ) } \Omicron[g(n,m)]=\{f(n,m):\exist c、n_0和m_0,当n\ge n_0或m\ge m_0时,有0\le f(n,m)\le cg(n,m)\} O[g(n,m)]={f(n,m):∃c、n0和m0,当n≥n0或m≥m0时,有0≤f(n,m)≤cg(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 ) ) } \Omega[g(n,m)]=\{f(n,m):\exist c、n_0和m_0,当n\ge n_0或m\ge m_0时,有0\le cg(n,m)\le f(n))\} Ω[g(n,m)]={f(n,m):∃c、n0和m0,当n≥n0或m≥m0时,有0≤cg(n,m)≤f(n))}
Θ [ g ( n , m ) ] = { f ( n , m ) : ∃ c 1 、 c 2 、 n 0 和 m 0 , 当 n ≥ n 0 或 m ≥ m 0 时,有 0 ≤ c 1 g ( n , m ) ≤ f ( n ) ) ≤ c 2 g ( n , m ) } \Theta[g(n,m)]=\{f(n,m):\exist c_1、c_2、n_0和m_0,当n\ge n_0或m\ge m_0时,有0\le c_1g(n,m)\le f(n))\le c_2g(n,m)\} Θ[g(n,m)]={f(n,m):∃c1、c2、n0和m0,当n≥n0或m≥m0时,有0≤c1g(n,m)≤f(n))≤c2g(n,m)}
结语
欢迎小伙伴一起学习交流,需要啥工具或者有啥问题随时联系我。
❓QQ:806797785
⭐️源代码地址:https://gitee.com/gaogzhen/algorithm
[1]算法导论(原书第三版)/(美)科尔曼(Cormen, T.H.)等著;殷建平等译 [M].北京:机械工业出版社,2013.1(2021.1重印).p25-30
[2]Solutions to Introduction to Algorithms Third Edition[CP/OL]