找到函数的递推方程

时间:2015-06-01 21:48:53

标签: recurrence

我必须找到以下函数的递推方程:

if(sup == inf)

基本情况为 T(1)= 1 (从sum += a[k];到{{1}})。 相反,递归案例是什么?我会说 T(n)= 2T(n / 3)+ 1 ,但我不确定..

由于

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)