[英]Master Method: Divide and Conquer
根據我的評估,以下算法的總體漸近運行時間為O(n)
,因為x
(遞歸次數)為 1, y
為(拆分次數)為 2 ,最后為z
(數量的冪)在遞歸調用之外完成的工作)為 1,因此 x<y^{d},但我的回答是錯誤的。 為什么?
FastPower(a,b) :
if b = 1
return a
else
c := a*a
ans := FastPower(c,[b/2])
if b is odd
return a*ans
else return ans
end
所以,首先,你說的n
是什么意思並不是很清楚,但我猜|b|
將是最自然的(因為a
不影響運行時)。 你的分析大部分是正確的,但錯誤是說 z=1。 在遞歸之外有持續的工作要做,但這並不意味着 z,“在遞歸調用之外完成的工作量的冪”,是 1。要得到 z,你可以將該工作表示為多項式函數n:f(n)=n^z=1,所以z=0。
所以這意味着 x = y^d (1 = 2^0) 而不是 x < y^d,改變了你應用的主定理的情況。 你得到的不是 T(n) = O(n),而是 T(n) = n^0*log(n) = O(log(n)),這應該是你所期望的,因為問題被一分為二在每次遞歸調用中,在每次調用中只進行持續的工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.