Oggi in classe il mio insegnante ha scritto sulla lavagna questo ricorsivo algoritmo fattoriale:Complessità del fattoriale algoritmo ricorsivo
int factorial(int n) {
if (n == 1)
return 1;
else
return n * factorial(n-1);
}
Ha detto che ha un costo di T(n-1) + 1
.
Quindi con il metodo di iterazione ha detto che T(n-1) = T(n-2) + 2 = T(n-3) + 3 ... T(n-j) + j
, quindi l'algoritmo si interrompe quando n - j = 1
, quindi j = n - 1
.
Successivamente, ha sostituito j
in T(n-1) + 1
e ha ottenuto T(1) + n-1
.
ha direttamente detto che per quella n-1 = 2 (log 2 n-1), quindi il costo dell'algoritmo è esponenziale.
Ho davvero perso gli ultimi due passaggi. Può piacere che qualcuno me lo spieghi?
Ha aiutato molto. Molte molte molte grazie. –
Sembra [Tempo quasi polinomiale] (http://en.wikipedia.org/wiki/Quasi-polynomial_time#Quasi-polynomial_time). – Nuclearman
@ Nuclearman- Questo è sicuramente il tempo polinomiale, non il tempo quasipolynomial. È solo scritto in modo davvero confuso con un esponente e logaritmi senza alcun beneficio percepibile. – templatetypedef