算法导论第三章练习参考答案(4) - 3.1-3.2

算法导论第三章练习参考答案(4) - 3.1-3.2_第1张图片算法导论第三章练习参考答案(4) - 3.1-3.2_第2张图片


Exercise 3.1-1

设max ( f(n) , g(n) ) = g(n),又由max ( f(n) , g(n) ) = Θ(f(n) + g(n)) ,

 即证 c1* ( f(n) + g(n) ) ≤ g(n) ≤ c2* ( f(n) +g(n) ), 取c1=1/2 ,c2=1 即可。

参考答案:由于我们要求f和g都是渐近非负的,假设我们超过了某个n1,其中它们都是非负的(取f和g对应的n的两个边界的最大值)。设c1 = 0.5和c2 = 1。

0    ≤   0 . 5( f ( n ) + g ( n ))    ≤   0 . 5(max( f ( n ) , g ( n ))  +  max( f ( n ) , g ( n )))
=    max( f ( n ) , g ( n ))     ≤    max( f ( n ) , g ( n ))  +  min( f ( n ) , g ( n ))   =   ( f ( n ) + g ( n ))

Exercise 3.1-2

即证 c1* n^b  ≤ (n+a) ^ b ≤ c2* n^b ,取c1 = 1 , c2 = (1+a)^b 即可。

1.(证明上界)设c = 2^b , n0 2*a。那么对于所有n ≥ n0 ,我们有(n + a)^b ≤ (2*n)^b = c * n^b(我们有 ),因此 (n+a)^b = O(n^b)(因此) 。

2.(证明下界)设 n0 ≥ − a / (1- 1/2^(1/b)) ,c = 1/2 (),

那么当且仅当当且仅当当且仅当,因此

根据定理3.1,

因此,(n+a)^b = Θ(n^b)。( 

Exercise 3.1-3  

至少意指下界,O意指上界。

有很多不同的函数的增长率小于或等于n2。特别是常数函数或收缩到0的速度可以任意快。说增长速度比收缩到零的函数快,没有任何意义。

Exercise 3.1-4

对于所有n≥0,2^(n+1)≥2·2^n,所以2^(n+1) = O(2^n)。然而,2^(2n)不等于O(2^n)。如果是,那么就会存在n0和c,使得n≥n0意味着(2^n)·(2^n) = 2^(2*n)≤c*(2^n),所以当n≥n0时,2^n≤c,这显然是不可能的,因为c是常数。

Exercise 3.1-5

假设f(n)∈Θ(g(n)),则∃c1, c2, n0,∀n≥n0,0≤c1g(n)≤f(n)≤c2g(n),如果我们单独看这些不等式,我们有c1g(n)≤f(n)  (f(n)∈Ω(g(n))和f(n)≤c2g(n) (f(n)∈O(g(n)))。
假设我们有∃n1, c1,∀n≥n1, c1g(n)≤f(n)和∃n2, c2,∀n≥n2, f(n)≤c2g(n)。把这些放在一起,并让n0 = max(n1, n2),我们有∀n≥n0, c1g(n)≤f(n)≤c2g(n)。 

 Exercise 3.1-6

假设运行时间为Θ(g(n))。根据3.1定理,运行时间为O(g(n)),这意味着对于任何大小为n≥n0的输入,对于某个c1,运行时间上界为c1g(n)。这包括最坏情况下输入的运行时间。定理3.1还暗示运行时间为Ω(g(n)),这意味着对于任何大小为n≥n0的输入,对于某些c2,运行时间以c2g(n)为界。这包括最佳情况输入的运行时间。另一方面,任何输入的运行时间都以最坏情况的运行时间为界,以最佳情况的运行时间为界。如果最坏情况和最佳情况的运行时间分别是O(g(n))和Ω(g(n)),那么任何大小为n的输入的运行时间必须是O(g(n))和Ω(g(n))。定理3.1推导出运行时间为Θ(g(n))。

 Exercise 3.1-7

集合证明: o( g(n) ) 即 0 ≤ f(n) < c* g(n) ; ω( g(n) ) 即 0 ≤ c* g(n)

极限的矛盾:假设我们有f(n)∈o(g(n))∩ω(g(n))。然后,我们有一个矛盾

 Exercise 3.1-8

算法导论第三章练习参考答案(4) - 3.1-3.2_第3张图片

Ω(g(n, m)) = {f(n, m):存在正常数c, n0和m0,使得对于所有n≥n0或m≥m0,f(n, m)≥cg(n, m) }

Θ(g(n, m)) = {f(n, m):存在正常数c1, c2, n0和m0,使得对于所有n≥n0或m≥m0,c1g(n,m)≤f(n, m≤c2g(n, m)}

 Exercise 3.2-1

设n1 < n2为任意值。

1)由于f和g是单调递增的,我们知道f(n1) < f(n2),g(n1) < g(n2)。所以f(n1) + g(n1) < f(n2) + g(n2)。

2)由于g (n1) < g (n2),我们有f (g (n1)) < f (g (n2))。

最后,如果两者都是非负的,则

f(n1)g(n1)  =   f(n2)g(n1) + (f(n2) - f(n1))g(n1)

=  f(n2)g(n2) + f(n2)(g(n2) - g(n1)) + (f(n2) - f(n1))g(n1)

3)由于f(n1)≥0,f(n2) > 0,因此,式中的第二项大于零。第三项是非负的,所以整个

 Exercise 3.2-2

 Exercise 3.2-3

正如提示所示,我们将应用斯特林近似

算法导论第三章练习参考答案(4) - 3.1-3.2_第4张图片

 注意最后一项是O(lg(n))。如果我们把分解lg得到的两个表达式相加而不是相减。整个表达式由nlg (n)支配。我们得到lg(n!) = Θ(nlg (n))。

如果我们限制n > 4e,那么这是

算法导论第三章练习参考答案(4) - 3.1-3.2_第5张图片

Exercise 3.2-4

函数 不是多项式有界的。如果有,则存在常数c, a,和n0,使得对于所有n≥n0,不等式 成立。特别地,当n = 2 ^ k时成立。对于k∈n,则这变成了 ,这是一个矛盾,因为阶乘函数不是指数有界的。

我们会证明 ,在不失一般性的前提下,假设 ,那么这就等价于证明 ,或 ,对于k≥1,这显然是正确的。因此它是多项式有界的。
Exercise 3.2-5
注意lg∗(2n) = 1 + lg∗(n),因此, 算法导论第三章练习参考答案(4) - 3.1-3.2_第6张图片

我们得出 lg * (lg(n))增长得更快 

Exercise 3.2-6

算法导论第三章练习参考答案(4) - 3.1-3.2_第7张图片

 Exercise 3.2-7

算法导论第三章练习参考答案(4) - 3.1-3.2_第8张图片

首先,证明。因此,对于每一个i, ,同理。

当i = 0, 

当i = 1,

然后,通过归纳法,

Exercise 3.2-8

设c1和c2满足c1*n ≤ klnk ≤ c2*n。然后我们有ln c1 + ln n =ln(c1n) ≤ ln(k ln k) = ln k + ln(ln k)所以ln n = O(ln k)。令c3满足ln n≤c3 ln k,那么

 因此,n / ln n = Ω(k)。类似地,我们有ln k + ln(ln k) =ln(k ln k) ≤ ln(c2 n) = ln(c2) + ln(n)所以ln(n) = Ω(ln k)。令c4满足ln n≥c4 ln k,那么

 使n / ln n = O(k)。由3.1定理可知 n / ln n = Θ(k)。根据对称性,k = Θ(n / ln n)。

你可能感兴趣的:(算法导论,算法)