Finden Rekursion diesen Algorithmus?
-
25-09-2019 - |
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?
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