C#
 Computer >> コンピューター >  >> プログラミング >> C#

C#でボトムアップアプローチを使ってフィボナッチ数列を実装する方法

フィボナッチ数列は、0または1から始まり、その後に1が続き、「各数値(フィボナッチ数)は直前の2つの数値の合計に等しい」という規則に従って進んでいく一連の数列です。具体的には、0, 1, 1, 2, 3, 5, 8, 13, 21, 34… のように数列が展開されます。

ボトムアップ(Bottom-up)アプローチとは、動的計画法(Dynamic Programming)における代表的な手法の一つです。このアプローチでは、まず最も基本的な小さな部分問題から解決していき、それらを段階的に統合しながら、最終的に全体の完全な解を導き出します。フィボナッチ数列の場合、dpArr[1] = 1 という初期値から出発し、forループによって小さい順に各フィボナッチ数を配列へ格納していくことで、再帰呼び出しによる重複計算を避け、効率的に求めることができます。

計算量

  • 時間計算量: O(N)
  • 空間計算量: O(N)

数値を一度ずつ計算して配列に保存するため、処理時間は入力サイズNに対して線形に増加します。また、結果を保存するためにサイズNの配列が必要となるため、空間計算量もO(N)となります。

実装例

public class DynamicProgramming{
    public int fibonacciBottomupApproach(int n){
        int[] dpArr = new int[150];
        dpArr[1] = 1;
        for (int i = 2; i <= n; i++){
            dpArr[i] = dpArr[i - 1] + dpArr[i - 2];
        }
        return dpArr[n];
    }
}

static void Main(string[] args){
    DynamicProgramming dp = new DynamicProgramming();
    Console.WriteLine(dp.fibonacciBottomupApproach(5));
}

コードの解説

このコードでは、あらかじめサイズ150のint型配列 dpArr を用意し、初期条件として dpArr[1] に 1 を設定しています。その後、i = 2 から n までループを回し、「直前の2つの要素の合計」を順次格納していきます。すべての計算が完了した時点で、dpArr[n] を返すことで n 番目のフィボナッチ数が得られます。

出力

5

n = 5 を指定した場合、フィボナッチ数列は 0, 1, 1, 2, 3, 5 と続くため、5番目のフィボナッチ数である「5」が出力されます。

  1. Java 9でJavaFXを使ってJShellをプログラムから実装する方法

    JShellは、サンプル式を対話的に実行できるツールです。通常はコマンドラインから利用しますが、JavaFXアプリケーションの中でプログラム的にJShellを実装することも可能です。その場合、Javaプログラムに以下のパッケージをインポートする必要があります。import jdk.jshell.JShell; import jdk.jshell.SnippetEvent; import jdk.jshell.VarSnippet;これらのクラスの役割は次のとおりです。JShell:評価エンジンの本体。式や文を評価(eval)するためのAPIを提供します。SnippetEvent:評価結果として

  2. Javaでスタックを使ってキュー(Queue)を実装する方法を解説

    キューとスタックの基本Queue(キュー)は Collection インターフェースを継承したクラスで、FIFO(First-In-First-Out:先入れ先出し)方式による要素の挿入と削除をサポートします。一方、Stack(スタック)は Vector クラスのサブクラスであり、LIFO(Last-In-First-Out:後入れ先出し)方式でオブジェクトを管理します。つまり、スタックの一番上に追加された最後の要素が、最初に取り出される要素になります。この2つのデータ構造の性質は正反対ですが、スタックを2つ組み合わせることで、キューを実装することが可能です。以下では、その具体的な実装方法を紹