그래서 기본적으로, 내가하고 싶은 것은 2 개의 행렬을 인수로 취하고이를 곱하는 메서드를 만드는 것입니다. 이것은 학교 과제이며, Im은 재귀적인 "Divide and Conquer"를 사용하여이를 해결하도록 요청했습니다. 지금까지 내 코드 :재귀 적 행렬 곱셈을위한 Java 메소드?
public class RecMult {
public int[][] calc(int[][] a, int[][] b) {
int n = a.length;
int[][] c = new int[n][n];
if (n == 1) {
c[0][0] = a[0][0] * b[0][0];
} else {
int sub = a.length/2;
int[][] smalla11 = new int[sub][sub];
int[][] smalla12 = new int[sub][sub];
int[][] smalla21 = new int[sub][sub];
int[][] smalla22 = new int[sub][sub];
int[][] smallb11 = new int[sub][sub];
int[][] smallb12 = new int[sub][sub];
int[][] smallb21 = new int[sub][sub];
int[][] smallb22 = new int[sub][sub];
for (int i = 0; i < sub; i++) {
for (int j = 0; j < sub; j++) {
smalla11[i][j] = a[i][j];
smalla12[sub + i][j] = a[sub + i][j];
smalla21[i][sub + j] = a[i][sub + j];
smalla22[sub + i][sub + j] = a[sub + i][sub + j];
smallb11[i][j] = b[i][j];
smallb12[sub + i][j] = b[sub + i][j];
smallb21[i][sub + j] = b[i][sub + j];
smallb22[sub + i][sub + j] = b[sub + i][sub + j];
}
}
c[0][0] = calc(smalla11, smallb11);
}
return c;
}
}
매우 빠른 문제가 발생하여 코드를 완료하지 못했습니다. c[0][0]
을 calc(smalla11, smallb11)
으로 설정할 수 없기 때문에 int를 사용하고 calc
메서드는 int [] []를 반환합니다. 이 시점에서 무엇을 해야할지 실제로 확신 할 수 없습니다. 때로는 하나의 int를 반환하고 싶지만 나중에 하위 행렬을 반환하고 마지막에는 전체 행렬을 반환하려고합니다. 누구든지이 반환 문제를 "고치는"방법이나 그러한 프로그램의 코드를 작성하는 방법에 대한 더 좋은 아이디어에 대해서도 제안 사항이 있습니까?
사실을 알고 있었고 나는 또한 이렇게 말하려고했다 : p 문제는, 그리고 내가 아는 한,이 코드 (의사 코드로 얻음)는 곱셈을 할 때까지 단지 1 int까지 작동한다. 다른 것과. 이 시점에서 코드는 단지 int를 반환합니다. 그것의 재귀 적, 그리고 지금부터, 그것은 결국 c [n] [n]을 반환 할 때까지 c int [sub] [sub]를 반환해야합니다. 여기서 n은 배열의 차원의 최대 길이입니다. 배열은 n x n btw입니다. 나는이 모든 것을 하나의 작업 재귀 적 메서드로 가져 오는 방법을 다소 혼란스럽게 생각하지만, 다른 방법으로 int를 선언하지 않는다면, 내가 아는 한, 다른 것을 사용해야한다. – mathkid91