heute in der Klasse mein Lehrer schrieb an die Tafel dieses rekursiven faktorielles Algorithmus:Komplexität faktorieller rekursiven Algorithmus
int factorial(int n) {
if (n == 1)
return 1;
else
return n * factorial(n-1);
}
Sie sagte, dass es eine Gebühr von T(n-1) + 1
hat.
Dann mit der Iterationsmethode sagte sie, dass T(n-1) = T(n-2) + 2 = T(n-3) + 3 ... T(n-j) + j
, so dass der Algorithmus stoppt, wenn n - j = 1
, also j = n - 1
.
Danach ersetzte sie j
in T(n-1) + 1
und erhielt T(1) + n-1
.
Sie sagte direkt die für diese n-1 = 2 (log n-1), so dass die Kosten des Algorithmus ist exponentiell.
Ich habe wirklich die letzten zwei Schritte verloren. Kann mir bitte jemand erklären?
Es hat sehr geholfen. Vielen vielen vielen Dank. –
Klingt wie [Quasi-Polynomialzeit] (http://en.wikipedia.org/wiki/Quasi-polynomial_time#Quasi-polynomial_time). – Nuclearman
@ Nuclearman- Dies ist definitiv Polynomzeit, nicht Quasipolynomialzeit. Es ist nur wirklich verwirrend mit einem Exponenten und Logarithmen ohne wahrnehmbare Vorteile geschrieben. – templatetypedef