Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

linear simulation of multidimensional array

I know how to simulate a 2d array in a linear array using [x + y * width] as a linear index.

I can extend this to 3d arrays: [x + y * width + z * width * height].

Is there a general formula for N-dimensional array?

I'm looking for a language-agnostic answer.

like image 808
hasen Avatar asked Mar 24 '09 19:03

hasen


People also ask

Is multidimensional array linear?

Multi-dimensional arrays are stored in a linear fashion as one long array. In memory, there will only be one single array which is logically separated into multiple dimensions of the same size (equal to the number of rows).

What are multidimensional arrays explain with example?

Multidimensional arrays use one set of square brackets per dimension or axis of the array. For example, a table which has two dimensions would use two sets of square brackets to define the array variable and two sets of square brackets for the index operators to access the members of the array.

What is an multidimensional array?

Multidimensional arrays are an extension of 2-D matrices and use additional subscripts for indexing. A 3-D array, for example, uses three subscripts. The first two are just like a matrix, but the third dimension represents pages or sheets of elements.

What are the applications of the multidimensional array?

Minimum Spanning Tree, Finding connectivity between nodes, and Matrix-Multiplication are the applications of a multidimensional array.


2 Answers

Sure. Just extending your example gives x + y*width + z*width*height + w*width*height*depth + ...

In other words, dim1 + dim2*size1 + dim3*size1*size2 + dim4*size1*size2*size3 + ...

like image 138
Michael Myers Avatar answered Nov 16 '22 03:11

Michael Myers


Eh, if you want some code... :-) C is language-agnostic enough, ya?

Assume input: location[dimensions]

Assume a table exists maxBound[dimensions] that contains the maximum boundaries of each dimension of the table.

int index = 0;
int multiplier = 1;
for (int i = 0;i < dimensions;i++)
{
  index += location[i] * multiplier;
  multiplier *= maxBound[i];
}

Your index will end up in the index field.

Test:
location = [3,4,5]
maxBound = [10,20,30]
loop initial: index = 0, multiplier = 1.
loop i=0: index = 3, multiplier = 10.
loop i=1: index = 43, multiplier = 200.
loop i=2: index = 1043, multipler = 6000.

I think this makes sense, but this is just coming out of the top of my head.

like image 20
Lomilar Avatar answered Nov 16 '22 04:11

Lomilar