[理工] [分享] Extension of Master Theorem

看板Grad-ProbAsk作者 (J.K.Lee)時間6年前 (2018/03/12 14:52), 6年前編輯推噓2(200)
留言2則, 2人參與, 6年前最新討論串1/1
Master Theorem 假設 T(n) = a*T(n/b) + f(n). 我這裡令 E = log_b a. 下圖表示出 f(n) 與 T(n) 之間的複雜度關係。 https://i.imgur.com/y21Kv4o.png
在 f(n) 的複雜度介於 n^(E-ε) 與 n^(E+ε) 之間時 (圖中紅虛線), M.T.可以處理的例子很有限。 我希望複雜度在這個範圍內的所有 f(n),依然可以代公式來求 T(n)。 以下是我得到的結果。 ---------------------------------------------- 警告: 這是一道沒有醬汁的炸鳳尾蝦(X) 這是沒有嚴謹證明過的定理(O) 如果你發現任何反例或錯誤,請讓我知道,謝謝。 ---------------------------------------------- 為了儘可能的將複雜度介於 n^(E-ε) 與 n^(E+ε) 之間的 f(n) 一網打盡, 於是假設: f(n) = c * n^E * (log n)^(α_1) * (log log n)^(α_2) * (log log log n)^(α_3) * ... 其中 c 為 constant。 並且令 max{ i | α_i ≠ 0 } 為 constant,以確保 f(n) 為常數個函數相乘。 為了表示方便,這裡定義 log~x n 代表 log log ...log n,即 log 疊代x次。 ^^^^^^^^^^^^^^ 上面有x個 log 重新表示 f(n) : f(n) = c * n^E * (log n)^(α_1) * (log~2 n)^(α_2) * (log~3 n)^(α_3) * ... = c * n^E * Π_{i=1}^∞ (log~i n)^(α_i) 則 T(n) = Θ( n^E + f(n) * Π_{i=1}^β (log~i n) ) where β = min{ j | α_j ≠ -1 }. β的找法: 從疊代次數為 1 的 log 疊代函數開始找,找到第一個次方不等於 -1 的 log 疊代函數, 則它的疊代次數就是 β。 ------ 例1 T(n) = 5*T(n/25) + n^0.5/log n 解1 E = log_b a = 0.5 f(n) = n^0.5/log n = n^E * (log n)^(-1) * (log~2 n)^0 β = min{ j | α_j ≠ -1 } = 2 所以 T(n) = Θ( n^E + f(n) * Π_{i=1}^β (log~i n) ) = Θ( n^0.5 + n^0.5/log n * log n * log~2 n ) = Θ( n^0.5 + n^0.5 * log~2 n ) = Θ( n^0.5 * log~2 n ) = Θ( n^0.5 * log log n ) ------ 例2 T(n) = 2*T(n/2) + n/(lg n)^2 解2 E = log_b a = 1 f(n) = n/(lg n)^2 = n^1 * (lg n)^(-2) = n^E * (lg n)^(-2) β = min{ j | α_j ≠ -1 } = 1 所以 T(n) = Θ( n^E + f(n) * Π_{i=1}^β (log~i n) ) = Θ( n^1 + n/(lg n)^2 * log n ) = Θ( n + n/(lg n) ) = Θ(n) ------ 例3 T(n) = 9*T(n/3) + n^2 解3 E = log_b a = 2 f(n) = n^2 = n^E * (log n)^0 β = min{ j | α_j ≠ -1 } = 1 所以 T(n) = Θ( n^E + f(n) * Π_{i=1}^β (log~i n) ) = Θ( n^2 + n^2 * log n ) = Θ( n^2 * log n ) -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 211.72.73.139 ※ 文章網址: https://www.ptt.cc/bbs/Grad-ProbAsk/M.1520837535.A.EE4.html

03/12 14:58, 6年前 , 1F
推 謝謝分享
03/12 14:58, 1F

03/12 18:11, 6年前 , 2F
推 不過資工會考natural log嗎
03/12 18:11, 2F
不是很懂你的意思。 因為 (log_x n)=(log_x y)*(log_y n) 所以就算是自然對數也可以換底 ※ 編輯: JKLee (1.160.108.53), 03/13/2018 22:07:58
文章代碼(AID): #1QfYEVxa (Grad-ProbAsk)