簡體   English   中英

大師法:分而治之

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

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