私は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)への後方マッピング
いずれかの行/列の大部分の順序は問題ありません。
私は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)への後方マッピング
いずれかの行/列の大部分の順序は問題ありません。
あなたは3次元配列を使用しているので、あなたが探している値が含まれているメモリ位置にi
、j
とk
ポイントのどの値を見つけるためにO(n^3)
にループする必要があります。
実際には、場所を設定するために与えた公式でこれを証明しています。
編集:私はあなたの質問に誤解しました。私はあなたが配列内の場所を見つけるためにメモリに格納されている値を逆引きしたいと思っていました。
次のように動作すると思います。 数字が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
に対応します。
私はループを使用せずに取得したいです。 – Jaipreet
できません。マッチアップを逆にするには、x次元の配列を 'O(n^x)'でループする必要があります。 –