次の再帰フィボナッチアルゴリズムを使用します。
def fib(n):
if n==0:
return 0
elif n==1
return 1
return (fib(n-1)+fib(n-2))
fib(5)を見つけるために数値5を入力した場合、これが5を出力することがわかりますが、このアルゴリズムの複雑さをどのように調べることができますか?関連するステップを計算するにはどうすればよいですか?
次の再帰フィボナッチアルゴリズムを使用します。
def fib(n):
if n==0:
return 0
elif n==1
return 1
return (fib(n-1)+fib(n-2))
fib(5)を見つけるために数値5を入力した場合、これが5を出力することがわかりますが、このアルゴリズムの複雑さをどのように調べることができますか?関連するステップを計算するにはどうすればよいですか?
回答:
繰り返しの関係/数学分析の代替として(しかし代替ではない)、クラスではあまり頻繁に教えられていないが非常に有益な単純な経験的演習は、関数の実行回数をカウントし、範囲のカウントをグラフ化することですn個の小さな入力から、結果を曲線近似します。結果は、一般的に理論的な数学アプローチとほぼ一致します。
この演習の優れたサポート資料は、無料のオンラインの第3章、アルゴリズムの実行時間 / コンピューターサイエンスの基礎、ウルマンにあります。
fib(n)の結果は、1を返したすべての再帰呼び出しの合計です。したがって、fib(1)を評価するfib(n)再帰呼び出しが正確にあります。したがって、実行時間はΩ(fib(n))です。0を返す呼び出しと他の再帰呼び出しがこれに大きく追加しないことを示す必要があります。
同じ推論は、1、0、または別の再帰呼び出しの結果を返す再帰的に定義された関数にも適用されます。