2016-07-09 3 views
1

私は3Dの配列arr[i][j][k]を持っています。 (i,j,k)を番号にマップする場合は、i*Ry*Rz + j*Ry + kを使用して実行できます。逆順にマップしたい場合、つまり番号を与えたら、(i,j,k)が必要です。私はその式を導くことができません。誰も助けることができますか? i, j, kの範囲は、それぞれ0~Rx, Ry, Rzです。数値から(i、j、k)への後方マッピング

いずれかの行/列の大部分の順序は問題ありません。

答えて

0

あなたは3次元配列を使用しているので、あなたが探している値が含まれているメモリ位置にijkポイントのどの値を見つけるためにO(n^3)にループする必要があります。

実際には、場所を設定するために与えた公式でこれを証明しています。

編集:私はあなたの質問に誤解しました。私はあなたが配列内の場所を見つけるためにメモリに格納されている値を逆引きしたいと思っていました。

+0

私はループを使用せずに取得したいです。 – Jaipreet

+0

できません。マッチアップを逆にするには、x次元の配列を 'O(n^x)'でループする必要があります。 –

1

次のように動作すると思います。 数字がnumで、配列がa[Rx][Ry][Rz]であるとします。次のように行い、インデックス(i, j, k)を取得するには(これは列メジャーの順序のためです):

  • int quotient = num/(Rx*Ry)int remainder = num % (Rx*Ry)
  • k = quotientおよびnum = remainder
  • quotient = num/Rxおよびremainder = num % Rx
  • j = quotientおよびi = remainder

最後に(i, j, k)となります。 a[i][j][k]は、numに対応します。

関連する問題