ダイナミックプログラミングを使用したフィボナッチシリーズの実装について考えてみましょう。ダイナミックプログラミングを使用したフィボナッチシリーズ
// Fibonacci Series using Dynamic Programming
class fibonacci
{
static int fib(int n)
{
/* Declare an array to store Fibonacci numbers. */
int f[] = new int[n+1];
int i;
/* 0th and 1st number of the series are 0 and 1*/
f[0] = 0;
f[1] = 1;
for (i = 2; i <= n; i++)
{
/* Add the previous 2 numbers in the series
and store it */
f[i] = f[i-1] + f[i-2];
}
return f[n];
}
public static void main (String args[])
{
int n = 9;
System.out.println(fib(n));
}
}
再帰的な作業の繰り返しが発生しないように動的プログラミングを使用します。しかし、ここで関数が呼び出されるたびに、新しい配列が生成されます。では、このアルゴリズムはどのようにしてより最適化されたと言えますか?
毎回? 。私は配列が関数呼び出しごとに一度作成されると思います。フィボナッチ数が100番目であるとします。したがって、100の配列は、数値を格納するために1回だけ作成されます。 – FallAndLearn
'fib'を呼び出すたびに配列を作成したくない場合は、' fib'に作成しないでください。 – zmbq
また、再帰的なものを追加するには、ツリーを作成するときにO(n)スペースを取ることになります。 – FallAndLearn