2016-07-09 7 views
1

Ich habe eine 3D Anordnung arr[i][j][k]. Wenn ich (i,j,k) zu einer Nummer zuordnen möchte, kann ich es mit i*Ry*Rz + j*Ry + k tun. Was, wenn ich es rückwärts abbilden möchte, d. H. Eine Nummer gegeben habe, möchte ich (i,j,k). Ich kann die Formel dafür nicht ableiten. Kann jemand helfen? Bereich von i, j, k sind 0 bis Rx, Ry, Rz bzw..Rückwärtsabbildung von einer Zahl zu (i, j, k)

Entweder der Reihe/Spalte Großauftrag ist in Ordnung.

Antwort

0

Da Sie ein 3D-Array verwenden, werden Sie in einer Schleife in O(n^3) Nötige zu finden, welche i Werte von j und k Punkt auf einen Speicherplatz, der den Wert Sie suchen, enthält.

Sie haben dies bereits mit der Formel, die Sie zum Festlegen eines Standorts angegeben haben, bereits bewiesen.

EDIT: Ich habe Ihre Frage missverstanden. Ich dachte, Sie wollten einen im Speicher gespeicherten Wert reversieren, um dessen Position im Array zu finden.

+0

Ich möchte es ohne die Schleifen zu bekommen. – Jaipreet

+0

Sie können nicht. Ein x-dimensionales Array muss in "O (n^x)" geloopt werden, um die Übereinstimmung umzukehren. –

1

Ich denke, das folgende wird funktionieren. Angenommen, Sie haben die Nummer num und Array a[Rx][Ry][Rz]. Um Indizes (i, j, k), gehen Sie wie folgt vor (dies ist für Spaltenhauptordnung):

  • int quotient = num/(Rx*Ry) und int remainder = num % (Rx*Ry).
  • k = quotient und num = remainder.
  • quotient = num/Rx und remainder = num % Rx.
  • j = quotient und i = remainder.

Endlich bekommen wir (i, j, k). a[i][j][k] entspricht num.

Verwandte Themen