算法导论 第三章 函数的增长,3.1练习个人解答(Sor)

来源:互联网 发布:linux cpu 进程 编辑:程序博客网 时间:2024/05/29 16:32

3.1-1 假设f(n)与g(n)都是渐近非负函数。使用Θ

记号的基本定义来证明max(f(n),g(n)) = Θ(f(n)+g(n))。

证:不妨假设max(f(n),g(n)) = f(n),则0 ≤ g(n)/f(n) ≤ 1

设有正常量c1,c2,n0,使得所有对n ≥ n0, 有

0 ≤ c1*f(n) ≤ f(n) + g(n) ≤ c2*f(n)

 

解得 c1 ≤ 1 + g(n)/f(n), c2 ≥ 1 + g(n)/f(n)

可取 c1 = 1, c2 = 2 , 此时 n0 ≥ 1 即可

 

3.1-2 证明: 对于任意实常量a和b,其中b>0,有(n+a)^b = Θ(n^b)

证:(n+a)^b的最高次数项为 n^b,根据直觉可得出结论,下面给出具体过程

a,b为任意实常量,设f(n) = (n+a)^b

设有正常量c1,c2,n0,使得所有对n ≥ n0,有

0 ≤ c1*f(n) ≤ n^b ≤ c2*f(n),

c1 ≤ [n/(n+a)]^b, c2 ≥ [n/(n+a)]^b

可取c1 = [1/(1+a)]^b, c2 = 2, n0 ≥ 1即成立

 

3.1-3 解释为什么“算法A的运行时间至少是O(n^2)”这一表述是无意义的

自己想不太清楚,网上大家解释也欠妥,下面的话都是根据算法导论教师手册上来的:

假设运行时间为T(n),

T(n) ≥ O(n^2) 意味着 对于某个f(n) = O(n^2)有

T(n) ≥ f(n)。然而因为g(n) = 0 ∈ O(n^2),这意味着

T(n) ≥ 0, 但是运行时间总是非负的,所以这句话并没有告诉我们有用的信息。(英语不好,献丑了)

 

3.1-4 2^(n+1) = O(2^n) 成立吗? 2^2n = O(2^n)成立吗?

要使2^(n+1) = O(2^n)成立,我们需要找到正常量 c,n0,使得0 ≤ 2^(n+1) ≤ c*2^n,这非常容易,我们取c = 2,n0 ≥1即可。

所以前者成立。

 

要使2^2n = O(2^n)成立,同理,假设有正常量c,n0

使得 0 ≤ 2^2n ≤ c*2^n

=> 2^n ≤ c

不可能找到这样的c,所以后者不成立

 

3.1-5 证明定理3.1

 

证:

充分性

f(n) = Θ(g(n)),意味存在正常量c1,c2,n0,使得对所有n ≥ n0有

0 ≤ c1f(n) ≤ g(n) ≤ c2f(n)

读者可以轻易地分离出

0 ≤ c1f(n) ≤ g(n),即f(n) = O(n)

0 ≤ g(n) ≤ c2f(n) , 即f(n) = Ω(n)

充分性成立;

必要性:

与充分性证明类似,此处不再赘述

 

3.1-6 证明:一个算法的运行时间为Θ(g(n))当且仅当其最坏的运行时间为O(g(n)),且其最好情况为Ω(g(n))

Θ符号渐近给出一个算法运行时间的上下界,而O,Ω都是渐近的给出上界和下界,个人感觉是定理3.1的阐述,所以不赘述了。

 

3.1-7 证明:o(g(n)) ∩ ω(g(n)) 为 ∅

一个不严谨的证明如下:

f(n) = o(g(n)) 类似于  {x|x < b}

f(n) = ω(g(n)) 类似于 {x|x > b}

o(g(n)) ∩ ω(g(n))类似于{x|x>b 且 x < b} = ∅

 

3.1-8可以将我们的表示法扩展到有两个参数n和m的情形,其中n和m的值可以以不同的速率,互相独立地趋于无穷。对给定的函数g(n,m),O(g(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))和Θ(g(n,m))的定义。

想想还是略吧。


0 0