繁体   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