Frage

Unter der Annahme n = B-A + 1, ich brauche die Rekursion dieses Algorithmus abzuleiten:

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

Hilfe?

War es hilfreich?

Lösung

Angenommen, die Komplexität des rekursiven Algorithmus h(A,B) ist.

Von Ihrem Code Sie h in zwei Fälle aufgeteilt werden:

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

Der "Komplexität-of-if-Zweig" ist trivial. Für "Komplexität-of-rest-of-the-Code", da es recurringalgorithm beinhaltet, müssen Sie h wieder aufzunehmen.

Zum Beispiel, wenn die Funktion definiert wie

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

Dann wird die Komplexität sein

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

Sie können mit Ihrem Code vergleichen, dies zu verallgemeinern.

(BTW, die Komplexität ist h(A,B) = O(B * (B-A)!))

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top