Question

En supposant n = B-A + 1, je dois déduire la relation de récurrence de cet algorithme:

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]);
  }
}

Aide?

Était-ce utile?

La solution

On suppose que la complexité de votre algorithme récursif est h(A,B).

A partir de votre code, vous pouvez diviser h en 2 cas:

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

La "complexité-de-si-branche" est trivial. Pour la "complexité-de-repos-of-the-code", car il implique recurringalgorithm, vous devrez inclure h à nouveau.

Par exemple, si la fonction est définie comme

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

Alors la complexité sera

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

Vous pouvez comparer avec votre code de généraliser.

(BTW, la complexité est h(A,B) = O(B * (B-A)!))

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top