int DoSomething(int n) {
if(n < 2) return 1;
else return DoSomething(floor(sqrt(n))) + n;
}
据我所知,相应的复发将是:
解决这个问题......
放
该功能变为
你能否验证一下&amp;纠正解决方案?
答案 0 :(得分:2)
你是正确的: -
S(m) = O(log(m))
,然后强>
T(2^m) = O(log(m))
n = 2^m
T(n) = O(log(m))
but m = log(n)
hence
T(n) = log(log(n))
答案 1 :(得分:1)
在第一步你的推导是错误的!
现在,通过你的步骤,你的复发方程是错误的。
重现的形式为---&gt; T(n) = a ⋅ T(n / b) + f(n)
,这里,a = 1,b = 2,f(n)= log n(因为n在堆栈中连续存储并且它每次减少一半,而你假设f(n)为1 //这是错误的来源!
T(2^m)=T(2^(m/2))+m
//改进您的步骤。
S(m)=S(m/2)+log m
//改进您的步骤
使用master theorem
解决这个等式---它将属于主定理的第二个公式
f(n)〜= log n~ = 1 == 0(n ^ log 2(1))== 0(n ^ 0)== 1 //,最重要的一步如果不清楚,请问......
,您将获得0(log (m)).
S(m) = O(log m)
接下来,在提升权力时,T(2^(m))=O(log m)
将进一步屈服
现在,在此等式中将m的值替换为(m=log 2 (n))
,您将获得
T(n)=O(log ( log (n)))
。
我希望这很清楚。如果您无法理解任何步骤,请随意发表评论......
答案 2 :(得分:1)
您可以依靠这样的方法来解决它: