長い質問になりますが、深呼吸してから読んでください。
1 次元配列のインデックスを多次元配列のベクトル インデックスに変換する最速のアルゴリズムを理解したいと思います。
なぜそれが必要なのかを理解するために、例を見てみましょう。
私は 2 次元配列を持っています: Array[i1][i2]
i1 は i1_b=0 から i1_e=2 まで実行されます
i2 は i2_b=0 から i2_e=1 まで実行されます
したがって、この配列はファイルに 1 行ずつ出力されます。
配列[0][0]
配列[0][1]
配列[0][2]
配列[1][0]
配列[1][1]
配列[1][2]
ここで、ファイルを 1 行ずつ読み取ります。インデックス k は、最後に読み取られる行の番号です。
Array[0][0] と k=0 である最初の行を読みました
Array[0][1] と k=1 である 2 行目を読みました
...
k は k_b=0 から k_e=5 までで、
k=0 は i1=0、i2=0 に対応します
k=1 は i1=0、i2=1 に対応します
...
問題: だから私の問題は、k を i1 と i2 に最速で変換する方法ですか? (ファイルの読み取り中は必要ありませんが、後でプログラムで必要です)
この例では、ソリューションの 1 つが次のようになります。
i1=k/(i1_e - i1_b + 1);
i2=k%(i1_e - i1_b + 1);
質問 1: サイクルとコンピューター時間の点で最速のソリューションですか?
わかった。質問 2: このアルゴリズムを多次元配列に一般化するにはどうすればよいですか?
配列[i1][i2][i3][i4]
i1=k/(i1_e - i1_b + 1);
i2=k%(i1_e - i1_b + 1);
i3=i2/(i1_e - i1_b + 1);
i4=i2%(i1_e - i1_b + 1);
質問 3: それが最速の方法ですか?
質問 4: 関連する質問は、剰余除算、整数除算、整数の加算、および整数の乗算のレイテンシはどのくらいですか? これらの数値がアーキテクチャに依存する場合は、私にも知らせてください。
前もって感謝します!
PS この問題を、秒を日-時-分-秒に変換する最速のアルゴリズムと考える方が簡単かもしれません。