找到这个算法的递归关系?

时间:2010-02-04 06:36:23

标签: algorithm big-o recurrence

假设n = B-A + 1,我需要推导出该算法的递归关系:

void recurringalgorithm(int *a, int A, int B){
  if (A == B){
    for (int j=0;j<B;j++){
      cout<<a[j];  
    }
    cout<<endl;
    return;
  }
  for (int i=A;i<B;i++){
    dosomething(a[A],a[i]);
    recurringalgorithm(a,A+1,B);
    dosomething(a[A],a[i]);
  }
}

帮助?

1 个答案:

答案 0 :(得分:4)

假设递归算法的复杂性为h(A,B)

您可以在代码中将h拆分为两种情况:

h(A,B) = { complexity-of-if-branch          if A = B
         { complexity-of-rest-of-the-code   otherwise

“复杂的分支”是微不足道的。对于“代码休息的复杂性”,由于它涉及recurringalgorithm,因此您需要再次添加h

例如,如果函数定义为

function hh(A,B) {
    for (var i = A+1; i < B; ++ i)
        hh(i, B);
}

然后复杂性将是

hh(A,B) = hh(A+1, B) + hh(A+2, B) + ... + hh(B-1, B)

您可以将其与您的代码进行比较以进行概括。

(顺便说一句,复杂性为h(A,B) = O(B * (B-A)!)