2014-01-28 9 views
0

그래서 기본적으로, 내가하고 싶은 것은 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를 반환하고 싶지만 나중에 하위 행렬을 반환하고 마지막에는 전체 행렬을 반환하려고합니다. 누구든지이 반환 문제를 "고치는"방법이나 그러한 프로그램의 코드를 작성하는 방법에 대한 더 좋은 아이디어에 대해서도 제안 사항이 있습니까?

답변

0

2 차원 배열 (calc (smalla11, smallb11)의 결과)을 단일 요소 c [0,0]에 저장하려고합니다. c는 이미 2 차원 배열로 선언되었습니다. 의도적으로 단일 점 0,0에 결과를 저장하려고합니까?

필요한 조치가 있습니까?

c = calc(smalla11, smallb11); 

이것은 내 머리를 아프게하지만 재미 있습니다! :)

+0

사실을 알고 있었고 나는 또한 이렇게 말하려고했다 : p 문제는, 그리고 내가 아는 한,이 코드 (의사 코드로 얻음)는 곱셈을 할 때까지 단지 1 int까지 작동한다. 다른 것과. 이 시점에서 코드는 단지 int를 반환합니다. 그것의 재귀 적, 그리고 지금부터, 그것은 결국 c [n] [n]을 반환 할 때까지 c int [sub] [sub]를 반환해야합니다. 여기서 n은 배열의 차원의 최대 길이입니다. 배열은 n x n btw입니다. 나는이 모든 것을 하나의 작업 재귀 적 메서드로 가져 오는 방법을 다소 혼란스럽게 생각하지만, 다른 방법으로 int를 선언하지 않는다면, 내가 아는 한, 다른 것을 사용해야한다. – mathkid91