簡體   English   中英

計算遞歸關系 T(n)=T(n / log n) + Θ(1)

[英]Calculating the Recurrence Relation T(n)=T(n / log n) + Θ(1)

問題來自Introduction to Algorithms 3rd Edition, P63, Problem 3-6,在那里它被引入為Iterated functions 我改寫如下:

int T(int n){
   for(int count = 0; n > 2 ; ++count)
   {
      n = n/log₂(n); 
   }
   return count;
}

然后在T(n)上給出盡可能嚴格的界限。

我可以使它成為O(log n)Ω(log n / log log n) ,但它可以更緊嗎?


PS:使用 Mathematica,我了解到當n=1*10^3281039T(n)=500000

同時, T(n)=1.072435*log n/ log log n

並且系數隨着n1.22943 ( n = 2.07126*10^235 ) 1.0724351.072435 ( n = 1*10^3281039 )。

願此信息有所幫助。

看起來下界很不錯,所以我試圖證明上界是O(log n / log log n) 但讓我首先解釋其他界限(只是為了更好地理解)。

TL; 博士

T(n)Θ(log n / log log n)

T(n) 在O(log n)

這可以通過將n := n/log₂n修改為n := n/2 n := n/log₂n出。
它需要O(log₂ n)步直到n ≤ 2成立。

T(n) 單位為Ω(log n / log log n)

這可以通過將n := n/log₂(n)n := n/m來看出,其中mlog n的初始值。
求解方程n / (log n) x < 2 for x導致我們

log n - x log log n < log 2
    ⇔                log n - log 2 < x log log n
    ⇔  (log n - log 2) / log log n < x

    ⇒ x ∈ Ω(log n / log log n)

提高上限: O(log n) → O(log n / log log n)

現在讓我們嘗試改進上限。 代替除以n由固定常數(即2在上述證明)我們把n只要通過改變初始值log(n)/2為的當前值log(n)更大。 為了更清楚地看一下修改后的代碼:

int T₂(int n){
     n_old = n;
     for(int count=0; n>2 ;++count)
     {
         n = n / (log₂(n_old)/2);

         if(log₂(n)) <= log₂(n_old)/2)
         {
            n_old = n;
         }
     }
     return count;
}

的功能的復雜性T₂顯然是一個上限為函數T ,由於log₂(n_old)/2 < log₂(n)保持用於整個時間。

現在我們需要知道我們除以每個1/2⋅log(n_old)

n / (log(sqrt(n)))x ≤ sqrt(n)
⇔           n / sqrt(n) ≤ log(sqrt(n))x
⇔          log(sqrt(n)) ≤ x log(log(sqrt(n)))

⇔    log(sqrt(n)) / log(log(sqrt(n)))  ≤ x

所以我們得到遞歸公式T₂(n) = T(sqrt(n)) + O(log(sqrt(n)) / log(log(sqrt(n))))

現在我們需要知道這個公式必須多久擴展一次,直到n < 2成立。

n2-x < 2
⇔       2-x⋅log n < log 2
⇔       -x log 2 + log log n < log 2
⇔       log log n < log 2 + x log 2
⇔       log log n < (x + 1) log 2

所以我們需要將關於log log n次的公式展開。

現在它變得有點困難。 (也看看Mike_Dog 的回答

T₂(n) = T(sqrt(n)) + log(sqrt(n)) / log(log(sqrt(n)))
      = Σk=1,...,log log n - 1 2-k⋅log(n) / log(2-k⋅log n))
      = log(n) ⋅ Σk=1,...,log log n - 1 2-k / (-k + log log n))
(1)   = log(n) ⋅ Σk=1,...,log log n - 1 2k - log log n / k
      = log(n) ⋅ Σk=1,...,log log n - 1 2k ⋅ 2- log log n / k
      = log(n) ⋅ Σk=1,...,log log n - 1 2k / (k ⋅ log n)
      = Σk=1,...,log log n - 1 2k / k

在標有 (1) 的行中,我對總和進行了重新排序。

因此,最后我們“僅”必須為t = log log n - 1計算Σ k=1,...,t 2 k / k 此時 Maple 解決了這個問題

Σk=1,...,t 2k / k = -I⋅π - 2t⋅LerchPhi(2, 1, t)  +2t/t

其中I是虛數單位, LerchPhiLerch 超越數 由於上述總和的結果對於所有相關情況都是實數,我們可以忽略所有虛部。 Lerch 超越LerchPhi(2,1,t)似乎在O(-1/t) ,但我不是 100% 確定。 也許有人會證明這一點。

最后這導致

T₂(n) = -2t⋅O(-1/t) + 2t/t = O(2t/t) = O(log n / log log n)

我們總共有T(n) ∈ Ω(log n / log log n)T(n) ∈ O(log n/ log log n)
所以T(n) ∈ Θ(log n/ log log n)成立。 您的示例數據也支持此結果。

我希望這是可以理解的,它會有所幫助。

驗證推測估計的問題的本質是獲得一個很好的塞值估計

n / log(n)

進入函數

n --> log(n) / log(log(n))

定理

log( n/log(n) ) / log(log( n/log(n) )) = log(n)/log(log(n)) - 1 + o(1)

(在字體可讀性問題的情況下,那是小哦,不是大哦)

證明:

為了節省符號,寫

A = n
B = log(n)
C = log(log(n))

該工作基於(自然)對數的一階近似:當0 < y < x

log(x) - y/x < log(x - y) < log(x)

我們試圖估計的價值是

log(A/B) / log(log(A/B)) = (B - C) / log(B - C)

應用差異對數的界限給出

(B-C) / log(B) < (B-C) / log(B-C) < (B-C) / (log(B) - C/B)

那是,

(B-C) / C < (B-C) / log(B-C) < (B-C)B / (C (B-1))

我們試圖滿足的遞歸和下限都表明我們應該用B/C - 1來估計這一點。 把它從兩邊拉下來給

B/C - 1 < (B-C) / log(B-C) < B/C - 1 + (B-C)/(C(B-1))

因此我們得出結論

(B-C) / log(B-C) = B/C - 1 + o(1)

如果你從這個分析中拿走一個想法供你自己使用,那就讓它成為使用微分近似(甚至更高階泰勒級數)來用更簡單的函數替換復雜函數的重點。 例如,一旦你有了使用的想法

log(x-y) = log(x) + Θ(y/x) when y = o(x)

那么您的問題所需的所有代數計算都可以直接遵循。

感謝@AbcAeffchen 的回答

我是題主,利用昨天學到的“大師法”的知識,證明的“有點難”的部分可以簡單地做如下。主方法

我將從這里開始:

T(n) = T(sqrt(n)) + O(log(sqrt(n)) / log(log(sqrt(n))))
⇔ T(n)=T(sqrt(n)) + O(log n  / log log n)

n=2 k , S(k)=T(2 k )

那么我們有

T(2 k ) =T(2 k/2 ) + O(log 2 k / log log 2 k ) ⇔ S(k) =S(k/2) + O( k/log k)

使用主方法

S(k)=a*S(k/b)+f(k), 其中a=1, b=2 , f(k)=k/log k = Ω(k log 2 1 +ε ) = Ω( k ε ),

只要ε∈(0,1)

所以我們可以應用案例3。然后

S(k) = O(k/log k)

T(n) = S(k) = O(k/log k) = O(log n/ log log n)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM