私は現在、頻繁にアクセスするデータをどのように格納するかについて考えています。これは配列に格納されることを意味し、現在次のように生成されています。ネストされたforループによって生成されたインデックスを計算する方法はありますか?
public static void generateData() {
int index = 0;
for(int a1 = 0; a1 < 52; a1++) {
for(int a2 = a1 + 1; a2 < 52; a2++) {
for(int a3 = a2 + 1; a3 < 52; a3++) {
for(int a4 = a3 + 1; a4 < 52; a4++) {
for(int a5 = a4 + 1; a5 < 52; a5++) {
for(int a6 = a5 + 1; a6 < 52; a6++) {
for(int a7 = a6 + 1; a7 < 52; a7++) {
data[index++] = compute(a1,a2,a3,a4,a5,a6,a7);
}
}
}
}
}
}
}
}
私の問題はすぐにA7のパラメータにA1を使用して計算されたデータにアクセスすることになりました。私は考えることができる唯一の方法は、速いだけの十分な量を考慮されていない、線形時間で実行されるパラメータが同じになるまで、この
public static int getIndex(int i1, int i2, int i3, int i4, int i5, int i6, int i7) {
int index = 0;
for(int a1 = 0; a1 < 52; a1++) {
for(int a2 = a1 + 1; a2 < 52; a2++) {
for(int a3 = a2 + 1; a3 < 52; a3++) {
for(int a4 = a3 + 1; a4 < 52; a4++) {
for(int a5 = a4 + 1; a5 < 52; a5++) {
for(int a6 = a5 + 1; a6 < 52; a6++) {
for(int a7 = a6 + 1; a7 < 52; a7++) {
if(a1 == i1 && a2 == i2 && a3 == i3 && a4 == i4 && a5 == i5 && a6 == i6 && a7 == i7) {
return index;
} else {
index++;
}
}
}
}
}
}
}
}
throw new IllegalArgumentException();
}
しかし、このアプローチのように、反復期間中と同様の反復することですデータ。そのため、インデックスを一定または対数の時間で計算する方法があるかどうか疑問に思っていました。 私の質問はかなり曖昧に思えるかもしれません。私は可能なすべての可能な結果を格納していますTexas hold'em
手は、いくつかのさらなるテストを行う。
これはプログラミングに関する質問よりも多くの問題です –
データはソートされているので、各a1、a2、...、a7の値をバイナリ検索してからインデックスを計算したいと思うかもしれません。 ex:index = a1の確立インデックス* a2の確立インデックス* a3の確立インデックス... – Minh