【C#】【アルゴリズム】カエルの移動(動的計画法の例)

カエルの移動というのはこんな感じの問題です。

アルゴリズムのテキストから抜粋しました。

これを計算するのに動的計画法を使用します。

動的計画法とは、数列の漸化式のように問題を小さな問題(一つ前の)計算結果を使用して解くアルゴリズムで、

では漸化式とは?というと、例えばフィボナッチ数列のように、1+1=2、1+2=3、2+3=5、3+5=8のような数列です。

一般化すると、H[i-1]を使用して計算した値と、H[i-2]を使用して計算した値を比較して、適用する値を決定、それを繰り返していく、というやりかたですな。(現時点での理解)

        public int FrogMove(int[] H)
        {
            int[] dp = new int[H.Length];

            for(int i = 0; i < H.Length; i++)
            {
                if(i == 0)
                {
                    dp[i] = 0;
                }
                if(i == 1)
                {
                    dp[i] = Math.Abs(H[i - 1] - H[1]);
                }
                if(i >= 2)
                {
                    int v1 = dp[i - 1] + Math.Abs(H[i - 1] - H[i]);
                    int v2 = dp[i - 2] + Math.Abs(H[i - 2] - H[i]);
                    dp[i] = Math.Min(v1, v2);
                }
            }
            return dp[H.Length - 1];
        }

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください