【问题标题】:regenerate 3D Array from its 3 projection sum 2D arrays从其 3 个投影和 2D 数组重新生成 3D 数组
【发布时间】:2016-10-16 08:30:04
【问题描述】:

我正在尝试找到一种可编程的方式来重新生成任何大小的 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 出现更多错误时 谁能解释或建议一个正确的算法来解决这个问题?

【问题讨论】:

    标签: arrays algorithm multidimensional-array 3d


    【解决方案1】:

    虽然对于大小>3 的特定值可能碰巧有解决方案,但没有保证的解决方案,因为求和时会丢失信息 - 就像大小为 3 的情况一样,3-D 数组中有 27 个元素,以及投影中的 27 个元素,因此可能总是有解决方案。但是对于更大的尺寸,例如 5,3-D 数组中有 125 个元素,而投影的 2-D 数组中只有 75 个。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-15
      • 1970-01-01
      • 1970-01-01
      • 2022-11-23
      • 1970-01-01
      相关资源
      最近更新 更多