从3个投影和2D阵列重新生成3D阵列

时间:2016-10-16 08:30:04

标签: arrays algorithm multidimensional-array 3d

我试图找到一种可编程的方法来重新生成任何大小的3D数组 - 仅由1和0组成 - 通过知道显示每个轴上原始数组总和的三个2d数组,如图所示:

original 3d array

the projection sum concept

总和代码示例:

int D = 3 ; 
int xsum[D][D] =  {0};
int ysum[D][D] =  {0};
int zsum[D][D] =  {0};

for(int x = 0 ; x<D ;x++){
    for(int y = 0 ; y<D ;y++){
        for(int d = 0 ;d<D;d++){
            zsum[x][y] = zsum[x][y] + array[d][y][x];
        }
    }
}
for(int x = 0 ; x<D ;x++){
    for(int z = 0 ;z<D ;z++){
        for(int d = 0 ;d<D;d++){
            ysum[x][z] = ysum[x][z]+array[z][d][x];
        }
    }
}
for(int z = 0 ;z<D ;z++){
    for(int y = 0 ; y<D ;y++){
        for(int d = 0 ;d<D;d++){
            xsum[z][y] = xsum[z][y]+ array[z][y][d];
        }
    }
}

我尝试了最简单的算法,我可以想到:

for(int x = 0 ; x<D ; x++) {
   for(int y = 0 ; y<D ; y++) {
        if(zsum[x][y]> 0 ){
            for(int z = 0 ; z<D ;z++){
                if(xsum[z][y] > 0 && ysum[x][z] > 0){
                    rearray[z][y][x]= 1;
                    zsum[x][y]-- ;
                    xsum[z][y]-- ;
                    ysum[x][z]-- ;
                }
            }
        }
    }
}

它产生与原始数组非常相似的东西 粗体数字不同:

1,1,0
0,1,0
0,0,0

1 下,1,的 0
1,1,1
0 ,1, 1

1,0,1 0,0,1
0,0,1

然而,当我发出D = 4或5时,会发生更多错误 任何人都可以解释或建议一个正确的算法来解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

虽然可能会出现大小为&gt; 3的特定值的解决方案,但由于信息在求和中丢失,因此无法保证解决方案 - 正如大小3所发生的那样,3-D阵列中有27个元素,并且在投影中还有27个元素,因此总是可以存在解决方案。然而,对于较大的尺寸,例如5,在3-D阵列中有125个元素,在投影的2-D阵列中只有75个。