以下是情况:我正在尝试实现一种可以使用N维数组的解决方案,类似下面的代码将会使其成为可能(并非真正的编程语言):
会创建一个三维数组(即立方体):或者:
int a[10,14,56]
会创建一个三维数组(即立方体):或者:
int a[10,20]
显然会创建一个矩阵。
为了能够表示数据,我决定为元素创建一个“平坦”的内存区域。因此,对于三维向量,我分配了10 * 14 * 56
个整数,对于第二个向量,我分配了10 * 20
个整数。
现在,问题来了:对于给定索引的元素的检索,对于一维数组的解决方案是自解释的,对于二维数组(值为(i, j)
,其中i
计算行数,j
计算列数,在数组N x M
中,N
是行数,M
是列数),我想出了以下公式:
array[N, M] -> flat_memory [N * M]
flat_index(i,j) = M * i + j
就三维数组而言,我想到了以下方法:
array[N, M, L] -> flat_memory[N * M * L]
flat_index(i, j, k) = L * i + M * j + k
但是这感觉不太好……而且似乎我也无法进行归纳步骤:( 所以我向社区求助:我的逻辑/计算有什么缺陷?是否有任何算法可解决此类问题?