我有一个3D
数组arr[i][j][k]
。如果我想将(i,j,k)
映射到一个数字,那么我可以使用i*Ry*Rz + j*Ry + k
来完成。如果我想向后映射它,即给定一个数字,我想要(i,j,k)
。我无法得出那个公式。有人可以帮忙吗?
i, j, k
的范围分别为0
到Rx, Ry, Rz
。
行/列主要订单都可以。
答案 0 :(得分: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
对应。
答案 1 :(得分:0)
由于您使用的是3D阵列,因此您需要循环O(n^3)
以查找i
,j
和k
的哪些值指向内存包含您要搜索的值的位置。
您实际上已经通过设置位置的公式证明了这一点。
编辑:我误解了你的问题。我以为你想反向查找存储在内存中的值,以找到它在数组中的位置。