Korzystanie z następującego rekurencyjnego algorytmu Fibonacciego:
def fib(n):
if n==0:
return 0
elif n==1
return 1
return (fib(n-1)+fib(n-2))
Jeśli wprowadzę cyfrę 5, aby znaleźć Fib (5), wiem, że to da wynik 5, ale jak zbadać złożoność tego algorytmu? Jak obliczyć wymagane kroki?
algorithms
time-complexity
recursion
żartowniś
źródło
źródło
Odpowiedzi:
Jeśli chcesz dowiedzieć się więcej na temat rozwiązywania nawrotów, zdecydowanie zalecamy przeczytanie rozdziału 4 wstępu do algorytmów .
źródło
jako alternatywa dla relacji powtarzalności / analizy matematycznej (ale nie substytut ) prostym ćwiczeniem empirycznym, najwyraźniej nie uczonym zbyt często na zajęciach, ale bardzo pouczającym, jest policzenie liczby wykonań funkcji, a następnie wykres liczby dla zakresu małych n danych wejściowych, a następnie krzywa dopasowuje wynik. wyniki będą zasadniczo ściśle odpowiadać teoretycznemu podejściu matematycznemu.
dobry materiał pomocniczy do tego ćwiczenia można znaleźć w bezpłatnym internetowym rozdziale 3, czas działania algorytmów / Podstawy informatyki , Ullman
źródło
Wynik Fib (n) jest sumą wszystkich wywołań rekurencyjnych, które zwróciły 1. Dlatego istnieją dokładnie rekurencyjne wywołania Fib (n) oceniające Fib (1). Zatem czas wykonania wynosi Ω (fib (n)); musisz pokazać, że połączenia zwracające 0 i inne połączenia rekurencyjne nie dodają się do tego znacząco.
To samo rozumowanie dotyczyłoby każdej funkcji rekurencyjnie zdefiniowanej, która zwraca 1, 0 lub wynik innego wywołania rekurencyjnego.
źródło
źródło