0301渐进记号课后练习-函数的增长-算法导论第三版

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)>0n0=max(n1,n2),当n>n0时,有02f(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=0bCkbnbkak=C0bnba0+C1bnb1a1++Cbbn0abn1时,有C0bnba0k=0bCkbnbkak(C0ba0+C1ba1++Cbbab)nbc1=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)成立c2,no=0,nn0时有02n+1c2n证明:22n=O(2n)不成立假设存在常量c,n0nn0022n=4nc2n成立c2n,这样的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,当nn0时,有0c1f(n)g(n)c2f(n)所以f(n)=O[g(n)]f(n)=Ω[g(n)]充分性:f(n)=O[g(n)],存在常数c1,n1,当nn1时,有0c1f(n)g(n)f(n)=Ω[g(n)],存在常数c2,n2,当nn2时,有0g(n)c2f(n)n0=max(n1,n2),对上述c1,c2,有0c1f(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,nn1时,有0Tw(n)c1g(n)存在常数c2,n2,nn2时,有0c2g(n)Tb(n)n0=max(n1,n2),对上述c1,c20c2g(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>0n1>0,n>n1时,有0c1g(n)<f(n)n2>0,n>n2时,有0f(n)<c2g(n)n0=max(n1,n2),c=c1=c2,0cg(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):cn0m0,nn0mm0时,有0f(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):cn0m0,nn0mm0时,有0cg(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):c1c2n0m0,nn0mm0时,有0c1g(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]

  • 26
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

gaog2zh

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值