簡體   English   中英

T(n) = T(n/10) + T(an) + n,如何解決?

[英]T(n) = T(n/10) + T(an) + n, how to solve this?

更新:我仍在尋找不使用外部資源的解決方案。

鑒於: T(n) = T(n/10) + T(an) + n對於某些a ,並且: T(n) = 1 if n < 10 ,我想檢查以下是否可能(對於某些a值,我想找到盡可能小的a ):

such that for every , 對於每個c > 0使得對於每個

我試圖一步一步地打開函數聲明,但它變得非常復雜,我被卡住了,因為我看不到任何進展。

這是我所做的:(抱歉添加了圖片,那是因為我在 word 上寫了很多,無法將其粘貼為文本)

請問有什么幫助嗎?

在此處輸入圖片說明

調用Akra–Bazzi ,g(n) = n¹,所以臨界指數是 p = 1,所以我們想要 (1/10)¹ + a¹ = 1,因此 a = 9/10。

直觀地說,這就像歸並遞歸:每次調用都有線性開銷,如果我們不減少子問題的總大小,我們將在運行時間中得到一個額外的日志(這將超過任何常數 c) .

另一個角度:繪制一個遞歸樹並計算每個級別完成的工作。 樹的每一層所做的工作將是 (1/10 + a) 與其上一層所做的工作一樣多。 (你明白為什么嗎?)

如果 (1/10 + a) < 1,這意味着每級的功在幾何上衰減,因此所做的總功將與 n 的某個常數倍數相加(其領先系數取決於 a)。 如果 (1 / 10 + a) ≥ 1,則每一層所做的工作保持不變或從一層增長到下一層,所以現在完成的總工作(至少)取決於樹中的層數,即是 Θ(log n) 是因為子問題的大小從一層到下一層以一個常數下降,並且這種情況不會發生超過 Θ(log n) 次。 因此,一旦 (1 / 10 + a) = 1,您的運行時間突然變為 Ω(n log n) = ω(n)。

(這基本上是主定理背后的推理,只是應用於非均勻子問題的大小,這就是 Akra-Bazzi 定理的來源。)

要求:

對於每個 c > 0 有 n0 > 0 使得對於每個 n > n0,T(n) >= c*n

通過代入不等式中的遞歸並求解 a,您將得到:

T(n) >= c*n

(c*n/10) + (c*a*n) + n >= c*n 

a >= 0.9 - (1/c)

由於我們期望的結果是針對所有 c(將 c 視為無窮大),因此我們得到 a >= 0.9。 因此,最小值a是0.9,這將滿足T(n) >= c*n為所有的C。

暫無
暫無

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

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