Dziś w klasie mój nauczyciel napisał na tablicy, to rekurencyjny algorytm silni:Złożoność algorytmu rekurencyjnego silni
int factorial(int n) {
if (n == 1)
return 1;
else
return n * factorial(n-1);
}
Powiedziała, że ma ona koszt T(n-1) + 1
.
Następnie za pomocą metody iteracji powiedziała, że T(n-1) = T(n-2) + 2 = T(n-3) + 3 ... T(n-j) + j
, więc algorytm zatrzymuje się, gdy n - j = 1
, czyli j = n - 1
.
Następnie zastąpiła j
w T(n-1) + 1
i uzyskała T(1) + n-1
.
ona bezpośrednio, że w tym n-1 = 2 (log n-1), więc koszt algorytmu jest wykładniczy.
Naprawdę straciłem dwa ostatnie kroki. Czy ktoś może mi je wytłumaczyć?
Bardzo pomogło. Wiele bardzo wielu dzięki. –
Brzmi jak [czas quasi-wielomianowy] (http://en.wikipedia.org/wiki/Quasi-polynomial_time#Quasi-polynomial_time). – Nuclearman
@ Nuclearman- Jest to zdecydowanie czas wielomianowy, a nie czas quasipolomalny. Jest po prostu napisany naprawdę myląco z wykładnikiem i logarytmami bez widocznych korzyści. – templatetypedef