我必须找到以下函数的递推方程:
if(sup == inf)
基本情况为 T(1)= 1 (从sum += a[k];
到{{1}})。
相反,递归案例是什么?我会说 T(n)= 2T(n / 3)+ 1 ,但我不确定..
由于
答案 0 :(得分:0)
以下是递归案例的每一行的费用
static int f(int[] a, int inf, int sup) {
if(sup == inf)
return a[inf];
if(sup == inf+1)
return a[inf] + a[sup];
else {
int thrd = (sup - inf + 1)/3; //O(1)
int i = inf + thrd; //O(1)
int j = i + thrd; //O(1)
int sum = 0; //O(1)
for(int k = i; k < j; k++) sum += a[k]; //O(n/3)
return f(a, inf, i-1) + f(a, j, sup) + sum; //2 * T(n/3)
}
}
O(n / 3)来自于你的for循环迭代超过输入大小的三分之一,而2 * T(n / 3)这个术语来自于我们正在递归三分之一的事实输入大小的两倍。这给了我们
T(n) = O(1) + O(1) + O(1) + O(1) + O(n/3) + 2 * T(n/3)
由于O(1)+ O(1)仍为O(1),因此前4 O(1)坍缩为单个项,O(n / 3)与O(n)相同,我们留下了
T(n) = 2T(n/3) + O(n) + O(1)