регенерировать 3D массив из его 3 проекционных суммарных 2D массивов

#arrays #algorithm #multidimensional-array #3d

#массивы #алгоритм #многомерный-массив #3D

Вопрос:

Я пытаюсь найти программируемый способ регенерации 3D-массива любого размера — состоит только из 1 и 0 — зная три 2d-массива, которые показывают сумму исходного массива на каждой оси, как показано на рисунках :

исходный 3D-массив

концепция проекционной суммы

пример кода sum :

 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 amp;amp; 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:

Хотя могут быть решения для определенных значений с размерами> 3, гарантированного решения не существует, поскольку информация теряется при суммировании — как это происходит для размера 3, в трехмерном массиве 27 элементов, а также 27 элементов в проекции, поэтому может быть возможночтобы всегда было решение. Однако для больших размеров, например 5, в трехмерном массиве 125 элементов и только 75 в проецируемых 2D-массивах.