#arrays #algorithm #multidimensional-array #3d
#массивы #алгоритм #многомерный-массив #3D
Вопрос:
Я пытаюсь найти программируемый способ регенерации 3D-массива любого размера — состоит только из 1 и 0 — зная три 2d-массива, которые показывают сумму исходного массива на каждой оси, как показано на рисунках :
пример кода 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-массивах.