[英]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.