特定功能的递归关系

时间:2019-02-22 15:30:19

标签: time-complexity

任务是找到此函数的递归关系,然后也为其找到复杂性类。提供我的工作和功能。我的问题是,我觉得我在递归关系和复杂性类上缺少一些步骤。它是否正确?以下代码在JavaScript中。

function divideAndConquerSum(x){
if(x.length<1){
return 0;
}
if(x.length == 1){
return x[0];
}
var third = Math.floor((x.length-1)/3);
var next = (third *2)+1;
var y = x.slice(0, third+1);
var z = x.slice(third+1, next+1);
var a = x.slice(next+1, x.length);
return divideAndConquerSum(y)+divideAndConquerSum(z)+divideAndConquerSum(a);

}

///

工作:

  1. 检查数组的长度是否为零...这是一个恒定时间,因此:+1

  2. 检查数组的长度是否为1,如果是,则返回。同样恒定的时间:+1

  3. 将数组拆分为3,无论n的大小如何,函数也都是常数:

  4. 函数然后将其自身加3次,但每次都是n大小的1/3的递归调用:3T(1/3)

1 + 1 + 1 + 3T(1/3)

3T(1/3)

调用自身,因此我们可以将关系定义为

3T(1/3)

9T(1/9)

27T(1/27)

此模式可以显示为

3log3n

所以我们有

1 + 1 + 1 + 3log3n

的复杂度类

O(log n)

对吗?

0 个答案:

没有答案