zoukankan      html  css  js  c++  java
  • 《算法导论》第三章 练习题 Exercise

    3.1-1


      

      假设存在 h(n) = Θ(f(n)+g(n)) ,由渐进符号 Θ 的性质知存在三个正常量c1、 c2、n0,当n ≥ n0时,使得 c1·(f(n)+g(n)) ≤ h(n) ≤  c2·(f(n)+g(n)),当 h(n) = max(f(n), h(n)) 时,令 c1 = 0.5,此时 max((f(n)+g(n))) > 0.5×(f(n)+g(n)); 令c2 = 1 ,有 max((f(n)+g(n))) < 1×(f(n)+g(n)) 。所以有 c1·(f(n)+g(n)) ≤ h(n) ≤  c2·(f(n)+g(n)) 成立。

    3.1-2


      

      等价于证明 c1、c2为正常量,n0 ≥ n 时,c1·n≤ (n+a) ≤ c2·n成立。

      由定理 3.1 知,我们应该从渐进上界和渐进下界来证明渐进确界。所以我们即要证明上式的左半部分也要证明上式的右半部分。

      令 c2 = 2b,当 n0 足够大( n0 ≥ 2|a| )时,对于所有的 n ≥ n0,有 (n+a) ≤ (2n)b = c·nb成立。所以 (n+a) = O(nb)

      令 c1 = 0.5,当 n0 足够大( n0 ≥ 2|a| )时对于所有 n ≥ n0,有 c·nb = 0.5·n≤ (n+a)b 成立。所以 (n+a) = Ω(nb)

      所以 (n+a) = Θ(nb)

    3.1-3


      

      由渐进符号 O 的性质知,它是表示一个函数f(n)的上界,通俗地说就是表示增长率小于等于 n^2 的一些函数。而 “一个算法的运行时间至少是 O(n^2)” 表示运行时间函数 T(n) 取的是 f(n) 上方直到上界的区域,显然 O(1)等等的函数很可能也在这个区域里面,而T(n) 比 O(1) 增长率快并没有什么卵用。所以这种说法是没有意义的。

    3.1-4


      成立。令 c >= 2 即可。

      不成立。找不到一个正常量 c,当 n足够大时,还可以保持 c >= 2n

      

    3.1-5


      

      充分性:令 f(n) = Θ(g(n)),则 存在三个正常量c1、 c2、n0,当n ≥ n0时,使得 c1·g(n) ≤ f(n) ≤  c2·g(n),对于 c1·g(n) ≤ f(n),有 f(n) = Ω(g(n));对于 f(n) ≤  c2·g(n),有 f(n) = O(g(n))。

      必要性:存在 c1 > 0、n0 > 0,当n ≥ n0时,使得 c1·g(n) ≤ f(n);存在 c1 > 0、n2 > 0,当n ≥ n2时,使得 f(n) ≤  c2·g(n) 。取 max(n0, n2) ,有存在 c1>0、c2>0,当 n ≥  max(n0, n2) 时,c1·g(n) ≤ f(n) ≤  c2·g(n) 成立

    3.1-6


      

      充分性:利用定理3.1,可以知道如果一个算法的运行时间是 Θ(g(n)),那么存在 c2 > 0,只要 n > n0,不论你输入的 n 为何值,运行时间都会小等于 c2·g(n),此时包含了最坏情况的运行时间;再次利用定理3.1,可以知道如果一个算法的运行时间是 Θ(g(n)),那么存在 c1 > 0,只要 n > n0,不管你输入的 n 为何值,运行时间都会大等于 c1·g(n),此时包含了最好情况的运行时间。

      必要性:如果在一个算法中,任何输入的运行时间都在最坏情况与最好情况的运行时间之间,那么可知它既是 O(g(n)),又是 Ω(g(n)),这儿的”是“相当于”∈“。由定理 3.1 知,它是 Θ(g(n))

    3.1-7


      

      由于 ω(g(n)) = {f(n) | 对任意 c > 0,存在 n0 >0, 使得 n > n0 时有 0 ≤ c·g(n) < f(n)} ,它表示的是非渐进紧确的下界。现在令f(n) = ω(g(n)) ,则 f(n) ∩ g(n) = φ ,所以 ο( f(n) ∩ g(n) ) = φ

      或者利用反证法,假设 f(n) ∈ o(g(n)) ∩ ω(g(n)),则出现如下情况:

        

      矛盾。所以原命题不成立。

    3.1-8


      

      Ω(g(n, m)) = {f(n, m) | 存在 c > 0、n0 > 0、m0 > 0,使得对所有 n ≥ n0 或 m ≥ m0,有 0 ≤ c·g(n,m) ≤ f(n, m)}

      Θ(g(n, m)) = {f(n,m) | 存在 c1 > 0、c2 > 0、n0 > 0、m0 > 0,使得对所有 n ≥ n0 或 m ≥ m0,有 c1·g(n,m) ≤ f(n, m) ≤ c2·g(n,m)}

      这儿的函数都是渐进非负的。

    3.2-1


      

      已知对于 m <= n 时,f(m) <= f(n) ,g(m) <= g(n ) ,则由两函数相加,有 f(m) + g(m) <= f(n) + g(n) ,所以函数 f(n) + g(n) 是单调递增的。

      令 a = g(m), b = g(n) ,由于 g(n) 是单调递增的,则对于 a <= b,有f(a) <= f(b) 恒成立,所以 f(g(n)) 是单调递增的。

    3.2-2


      alogbc = a · (logac / logab) = c / logab = c · logba

    3.2-3


      

      我们用 stirling 公式将 lg(!n) 化简,有下式:

      

      将最后一项化成对数相减的形式,发现这两项是近似相等的,可以消去,则式子主要受 n·lg(n) 的影响,所以 lg(n!) = lg(n·lg(n))

      若证明 n! = ω(2n) ,可以令 f(n) = n!,g(n) = 2n,求 n 趋于无穷时 g(n)/f(n) 的极限,即

      

      让 n >= 4e,右式 = 0。所以证明成立。

      若想证明 n! = o(nn),同理,令 g(n) = nn,f(n) = n!,求 n 趋于无穷时 g(n)/f(n) 的极限为无穷即可。有

      

    3.2-4 


      

      多项式有界就是指存在常量 k ,使得 f(n) = O(nk) 成立。可以把这个等式两边取对数,有 lgf(n) ≤ lgc + k·lgn ,所以只要满足 lgf(n) = O(lgn) ,则称 f(n) 是多项式有界的。

      对于函数 f(n) = ⌈lgn⌉ ! ,有 lgf(n) = lg(⌈lgn⌉!) = Θ(⌈lgn⌉·lglgn⌉) > O(lgn)   ,所以

    lgn⌉ ! 不是多项式有界。

      对于函数 f(n) = ⌈lg(lgn)⌉ ! ,令 m = lg(lgn) ,有 lgf(n) = lg(m!) = Θ(m·lgm) = Θ(lg(lgn)·lg(lg(lgn))) = O(lg(lgn)·lg(lgn)) = O(lgn) ,所以函数 f(n) =  ⌈lg(lgn)⌉ ! 是多项式有界

    3.2-5


      根据迭代对数的性质: 

      可知 lg*n 是一个增长很慢的函数,比对数函数都慢。

      记 n = 2n,则 lg* 2n = 1 +  lg* (lg 2n) ,有如下推导:

      

      所以第二种增长的要更快。

    3.2-6


      

       

        

    3.2-7


      当 i = 0 时,  ;

      当 i = 1 时,  ;

      假设当 i = i - 1 时,  成立;

      当 i  = i 时,  ;

      证毕。

    3.2-8


      

      设存在 c1、c2 使得 c1·n ≤ k·lnk ≤ c2·n 。

      对 ( c1·n ≤ k·lnk )两边取对数,则有 lnc1 + lnn ≤ lnk + ln(lnk) ,得 lnn = O(lnk) 。设存在 c3 使得   lnn ≤ c3·lnk ,则有  ,所以 

      同理对 ( k·lnk ≤ c2·n)进行相同的推导,有  ,所以 

      由定理3.1 知,

      由于 Θ 的对称性,得 

      

    ————全心全意投入,拒绝画地为牢
  • 相关阅读:
    SPOJ SAMER08A
    SPOJ TRAFFICN
    CS Academy Set Subtraction
    CS Academy Bad Triplet
    CF Round 432 C. Five Dimensional Points
    CF Round 432 B. Arpa and an exam about geometry
    SPOJ INVCNT
    CS Academy Palindromic Tree
    身体训练
    简单瞎搞题
  • 原文地址:https://www.cnblogs.com/Bw98blogs/p/8287674.html
Copyright © 2011-2022 走看看