Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 循环中可变调用的递归函数的时间复杂度_Algorithm_Recursion_Time Complexity_Big O_Complexity Theory - Fatal编程技术网

Algorithm 循环中可变调用的递归函数的时间复杂度

Algorithm 循环中可变调用的递归函数的时间复杂度,algorithm,recursion,time-complexity,big-o,complexity-theory,Algorithm,Recursion,Time Complexity,Big O,Complexity Theory,此功能的时间复杂度是多少: public int calculate(int[] arr, int index) { int max = 0, sum = 0; for (int i = index; i < arr.length && i < index + arr[index]; i++) { sum += arr[i]; max = Math.max(max, calculate(arr, i + 1)); } return M

此功能的时间复杂度是多少:

 public int calculate(int[] arr, int index) {
  int max = 0, sum = 0;
  for (int i = index; i < arr.length && i < index + arr[index]; i++) {
    sum += arr[i];
    max = Math.max(max, calculate(arr, i + 1));
  }
  return Math.max(max, sum);
}
public int-calculate(int[]arr,int-index){
int max=0,sum=0;
对于(int i=index;i

使用数组和索引调用函数。由于函数对自身进行arr[index]递归调用,我们可以说它的时间复杂度是O(max(arr)^n)('n'是arr中的元素数)?有可能找到老虎的极限吗?时间复杂度绝对不是2^n,对吗?

让我们首先从循环条件中删除
i
部分,这只会(有时)减少迭代次数。通过移除它,我们可以得到最坏的情况

在每次循环迭代中调用函数时,计算函数的执行次数(在任何递归深度)是时间复杂性的一个很好的度量。我们称之为c伯爵

现在将k定义为循环的迭代次数,而不考虑递归,因此k是
arr.length-i

c依赖于k,所以我们来谈谈ck

对于k=0,没有迭代,所以只有一个调用,所以c0=1。我们可以继续增加k:

c1=1+c0=2
c2=1+c0+c1=2c1=4
c3=1+c0+c1+c2=2c2=8

ck=1+∑k-1i=0(ci)=1+∑k-2i=0(ci)+ck-1=2.ck-1=2k

当您使用
i=0
调用函数,并将n定义为
arr.length
时,得出的结论是该函数的时间复杂度为O(2n)