Pierwszym z nich jest poprawna, i bardzo dobrze przemyślane.
Drugi nie jest. Algorytm obliczania kłamstw ma znacznie większą złożoność czasową niż O (n^4) (EDIT: , o co pytano, kiedy pisałem tę odpowiedź - w międzyczasie zaktualizowano pytanie:). To nawet nie jest wielomian. Rozumowanie jest następujący (#fib notacją (X): w szereg razy fib nazywa obliczyć fib (x))
- fib (1): #fib (1) = 1 (to zwraca się bezpośrednio z wynik)
- fib (2): #fib (2) = 3 (jeden dla fib (2), który wywołuje go dla fib (0) i fib (1))
- fib (3): #fib (3) = 5 (jeden dla fib (3), który wywołuje go dla fib (2) i fib (1), co daje 3 + 1 więcej połączeń)
- fib (4): #fib (4) = 9
- fib (5): #fib (5) = 15
- fib (6): #fib (6) = 25
- ...
- fib (I): #fib (i) = 1 + #fib (i-1) + #fib (I-2)
Tak, masz:
- #fib (I) ~ = #fib (i-1) + #fib (I-2)
Od tego, to byłoby uzasadnione przypuszczenie, że obliczenia fib (I) trwa „o "(faktycznie, tylko trochę mniej niż) 2 razy więcej czasu na obliczenie kłamstwa (i-1). W związku z tym można "zgadywać", że O (#fib (i)) = O (2^i). To jest poprawna odpowiedź, którą możesz łatwo dowieść dzięki indukcji.
Aby ukończyć temat sekwencji Fibonacciego, istnieje znacznie szybsze algorytmy do obliczenia liczby n-tej. Na przykład, algorytm z czasem liniowym (tj. O (n)) ma na celu zapamiętanie tej funkcji, którą napisałeś (tzn. Sprawić, by skonsultował się z mapą, aby sprawdzić, czy zna wynik dla n, jest tak zwrócony natychmiast, w przeciwnym razie, obliczyć zapisz i zwróć). Istnieje również algorytm stałokresowy (tzn. O (1)).
Wreszcie przykład O (N^4) algorytm jest cokolwiek z wewnętrznej pętli 4, każda pętla działa "o" n razy.
Na przykład, obliczenia objętości N kostki o boku n (w nieoptymalnej sposób):
int volume = 0;
for (int cube = 0; cube < n; cube++)
for (int x = 0; x < n; x++)
for (int y = 0; y < n; y++)
for (int z = 0; z < n; z++)
volume++;
return volume;
2) Fibonacci - To jest więcej O (2^n) iso O (n^4). Użyj 4 zagnieżdżonych pętli (które zaczynają się od 1 do n zwiększanych o 1) jako przykładu O (n^4) ;-) i 1) jest sprytnym przykładem :) –