0

基本的に、0.01 刻みで 150 の位置を持つ配列 Tp を定義しました。また、同じ 0.01 刻みで 600 の位置を持つ配列 Dp を定義しました。Tp が最初の列に、Dp が 2 番目の列にあるように、Tp と Dp の配列値のすべての組み合わせを 2 つの列に入れる 1 つの大きな配列 TpDp を書き込もうとしています。TpDp[][] の位置が等しくなるように定義する方法がわかりません。たとえば、(構文的に正しくありません) int TpDp[0][0] = new int [Tp[0]][Dp[0]].

これにはあらゆる種類のエラーが含まれている可能性がありますが、これまでのところ、Tp と Dp が既に定義された状態でセットアップされています (A = 150、B = 600、これらはそれぞれ Tp と Dp の位置の数です)。

int [][] TpDp = new int [A*B][A*B]; //declaring new 2-dimensional array TpDp, size needed for combos 

int i; //iteration counter for Tp

int j; //iteration counter for Dp



for (i=0; i<=A; i++)
{ //i counting through all positions in Tp until exhausts A column options
    for (j=0; j<=B; j++)
    { //j counting through all positions in Dp until exhausts B column options
         TpDp[i][j] = Tp[i], Dp[j]; //This is where I'm not sure how do define TpDp[i][j]
    }
}
4

1 に答える 1

0

あなたが今持っている表現は最高です。

まず、値を配列に合わせるために、独自のデータ表現をロールする必要があります。第二に、配列は巨大になります。第三に、巨大なアレイは、すでに持っている2つの別個のアレイ以上のことは何もしないので、すべてのコストがかかり、メリットはありません。

ルックアップの観点から:どちらの場合も、2つのルックアップを実行する必要があります。現在、1つの配列から1つのルックアップを実行し、2番目の配列から別のルックアップを実行します。もう1つの方法では、1つのディメンションで1つのルックアップを実行し、次に2番目のディメンションで別のルックアップを実行する必要があります。

メモリの観点から:数量は32ビット値です。150 + 600を格納し、合計で3000バイトになります。逆にすると、64ビット幅(両方の数値を格納するため)の150 * 600の値が必要になります。これは720000バイトです(現在の方法と比較して約0.4%の効率です)。

時間の観点から:両方のルックアップには同じ時間がかかります。

データの観点から:2番目の方法は大量の冗長データを持ち、最初の方法は必要な各値を1回保存します。

于 2012-07-25T16:33:33.283 に答える