任务是找到此函数的递归关系,然后也为其找到复杂性类。提供我的工作和功能。我的问题是,我觉得我在递归关系和复杂性类上缺少一些步骤。它是否正确?以下代码在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,如果是,则返回。同样恒定的时间:+1
将数组拆分为3,无论n的大小如何,函数也都是常数:
函数然后将其自身加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)
对吗?