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)까지의 역방향 매핑

행/열 주요 순서가 좋습니다. 당신이 3 차원 배열을 사용하고 있기 때문에

답변

0

, 당신은 당신이 찾고있는 값을 포함하는 메모리 위치에 i, jk 점의 어떤 값 찾기 위해 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 = quotientnum = remainder.
  • quotient = num/Rxremainder = num % Rx.
  • j = quotienti = remainder.

마지막으로 우리는 (i, j, k)이됩니다. a[i][j][k]은 주어진 num에 해당합니다.

관련 문제