从数字向后映射到(i,j,k)

时间:2016-07-09 00:29:29

标签: arrays

我有一个3D数组arr[i][j][k]。如果我想将(i,j,k)映射到一个数字,那么我可以使用i*Ry*Rz + j*Ry + k来完成。如果我想向后映射它,即给定一个数字,我想要(i,j,k)。我无法得出那个公式。有人可以帮忙吗? i, j, k的范围分别为0Rx, Ry, Rz

行/列主要订单都可以。

2 个答案:

答案 0 :(得分:1)

我认为以下内容可行。 假设您有数字num和数组a[Rx][Ry][Rz]。要获取索引(i, j, k),请执行以下操作(这是针对列主要顺序):

  • int quotient = num/(Rx*Ry)int remainder = num % (Rx*Ry)
  • k = quotientnum = remainder
  • quotient = num/Rxremainder = num % Rx
  • j = quotienti = remainder

最后我们得到(i, j, k)a[i][j][k]将与给定的num对应。

答案 1 :(得分:0)

由于您使用的是3D阵列,因此您需要循环O(n^3)以查找ijk的哪些值指向内存包含您要搜索的值的位置。

您实际上已经通过设置位置的公式证明了这一点。

编辑:我误解了你的问题。我以为你想反向查找存储在内存中的值,以找到它在数组中的位置。