如何通过检查此伪代码找到主定理中使用的c / d常量?
FastPower(a,b) :
if b = 1
return a
otherwise
c := a*a
ans := FastPower(c,[b/2])
if b is odd
return a*ans
otherwise return ans
end
答案 0 :(得分:2)
首先,你需要找到你的重复关系:T(n)= a T(n / b)+ O(D)+ O(C)其中O(D)是将问题分成的时间子问题,O(C)是将子问题重新组合到答案中所花费的时间,a是子问题的数量,n / b是子问题的大小。然后,一旦复发,您可以使用主定理进行分析。
在你的算法中,我认为有一个大小为n / 2的子问题,所以a为1,b为2.分割时间为O(1),重组时间为O(1),假设分析为不是在位操作方面。
使用主定理,O(1)=Θ(n log 2 1 )因此总运行时间为Θ(n log 2 1 log n)=Θ(log n)