2016-10-16 22 views
-1

元の配列の合計を示す3つの2次元配列を知ることで、任意のサイズの3D配列を再生成するプログラム可能な方法を見つけようとしています各軸上に画像が表示とおり和コードの3D配列を3つの投影和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,1,1-
、1、しかし、私はD = 4つのまたは5以上のエラーが を発生するとき

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

誰もこの問題を解決する正しいアルゴリズムを説明したり提案したりできますか?

答えて

1

サイズが3より大きい特定の値に対しては解決策があるかもしれませんが、合計で情報が失われているため、保証された解決策はありません。サイズ3の場合と同様に、3次元配列、また投影の要素が27個あるため、常に解決策が存在する可能性があります。しかし、より大きなサイズ、例えば5の場合、3次元配列には125個の要素があり、投影された2次元配列には75個だけ存在する。

関連する問題