линейное моделирование многомерного массива - PullRequest
8 голосов
/ 24 марта 2009

Я знаю, как имитировать двумерный массив в линейном массиве, используя [x + y * width] в качестве линейного индекса.

Я могу расширить это до 3d массивов: [x + y * width + z * width * height].

Существует ли общая формула для N-мерного массива?

Я ищу не зависящий от языка ответ.

Ответы [ 2 ]

7 голосов
/ 24 марта 2009

Конечно. Простое расширение вашего примера дает x + y*width + z*width*height + w*width*height*depth + ...

Другими словами, dim1 + dim2*size1 + dim3*size1*size2 + dim4*size1*size2*size3 + ...

1 голос
/ 24 марта 2009

Эх, если вам нужен код ... :-) C достаточно независим от языка, да?

Предположим, ввод: местоположение [размеры]

Предположим, существует таблица maxBound [измерения], которая содержит максимальные границы каждого измерения таблицы.

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

Ваш индекс окажется в поле индекса.

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.

Я думаю, что это имеет смысл, но это только выходит из макушки моей головы.

...