什么是以下功能的时间复杂度?

时间:2014-08-18 05:21:27

标签: performance algorithm functional-programming time-complexity

int DoSomething(int n) {
    if(n < 2) return 1;
    else return DoSomething(floor(sqrt(n))) + n;
}

据我所知,相应的复发将是:

Recurence Relatio

解决这个问题......

Substitute 1

该功能变为

Rest of the image

你能否验证一下&amp;纠正解决方案?

3 个答案:

答案 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)

您可以依靠这样的方法来解决它:

enter image description here