1
比方說,我有一個NxN矩陣,其中包含1到10範圍內的隨機整數。現在,我想打電話給 PROC(A(1:n/2, 1:n/2)+A(n/2+1:n, n/2+1:n)...
其中n是矩陣的大小。換句話說,我想創建一個從A的第一行和第一列開始的子矩陣,直到A的大小的一半,然後將其添加到以A的大小的一半加1開始的子矩陣並且一直延續到A.Strassen算法的矩陣分區
,我使用的分區函數是這樣的:
public Matrix partition(int rowStart, int rowEnd, int colStart, int colEnd) {
// int r = 0;
// int c = 0;
if (this.N%2 != 0) throw new RuntimeException("Illegal matrix dimensions.");
Matrix C = new Matrix((this.N)/2);
for (int i=rowStart-1; i<rowEnd; i++) {
for (int j=colStart-1; j<colEnd; j++) {
C.data[i][j] = this.data[i][j];
// C.data[r][c] = this.data[i][j];
c++;
}
r++;
}
return C;
}
現在,這個工程在給定矩陣的左上角(Matrix C = m.partition(1, m.size()/2, 1, m.size()/2);
)找到子矩陣。
9.00 5.00 0.00 3.00
0.00 7.00 8.00 3.00
9.00 3.00 10.00 8.00
0.00 6.00 2.00 0.00
9.00 5.00
0.00 7.00
但是,當我試圖讓另一個子矩陣(Matrix D = m.partition(m.size()/2+1, m.size(), m.size()/2+1, m.size());
)我得到一個ArrayIndexOutOfBoundsException: 2
。我試過向分區函數添加單獨的行和列計數器,但它給出了相同的錯誤。我如何修改我的分區函數以處理所有輸入並仍然輸出正確的輸出?