1

私は、2 次元配列を使用して二項係数を決定する次のアルゴリズムを既に設計しています。たとえば、n の二項係数を計算するには、k を選択します。次のように 2 次元配列を作成できます。

int[][] arr = new int[n][k];

次の方法で配列にデータを入力できます。

for(int i = 0; i <= n; i++){
   for(int j = 0; j <= minimum(i, k); j++){
      if(j == 0 || i == j){
         arr[i, j] = 1;
      } else{
         arr[i, j] = arr[i - 1, j - 1] + arr[i - 1, j];
      }
   }
}

ただし、インデックス 0 ~ k の 1 次元配列を使用するには、このアルゴリズムを再設計する必要があります。これを行う方法を特定するのに苦労しています。私は小さなステップから始めて、いくつかの一般的な出来事に気付きました:

  • k = 0 の場合、arr[0] は 1 になり、n に関係なく返されます。
  • ループで設計している場合、k = 1 の場合、arr[0] は 1 になり、arr[1] は n になるはずです。

k = 2 と言うと、arr[2] の値は実際には前の値に依存するため、ここが難しいところです。ループすると (i = 0 から i = n まで)、arr[] の値が変化すると思いますが、その方法はよくわかりません。私はこれらの行に沿って何かを始めました:

for(int i = 0; i <= n; i++){
   for(int j = 0; j <= minimum(i, k); j++){
      if(j == 0 || i == j){
         arr[j] = 1;
      } else if(j == 1){
         arr[j] = i;
      } else{
         arr[j] = ??; // I can't access previous values, because I didn't record them?
      }
   }
}

これをどのように処理すればよいですか?

4

1 に答える 1