gpt4 book ai didi

java - Strassen 算法的矩阵划分

转载 作者:太空宇宙 更新时间:2023-11-04 08:01:55 25 4
gpt4 key购买 nike

假设我有一个 NxN 矩阵,其中充满 1 到 10 范围内的随机整数。现在我想打电话PROC(A(1:n/2, 1:n/2)+A(n/2+1:n, n/2+1:n)... 其中 n 是矩阵的大小。换句话说,我想创建一个子矩阵,从 A 的第一行和第一列开始,一直到 A 大小的一半,然后将其添加到从 A 大小的一半加一开始一直到 A 末尾的子矩阵中。

我使用的分区函数是这样的:

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。我尝试将单独的行和列计数器添加到我的分区函数中,但它给出了相同的错误。如何修改分区函数以处理所有输入并仍然给出正确的输出?

最佳答案

C.data[i][j] = this.data[i][j];<-- Culprit

irowStart-1 且 j 是 rowEnd-1 对于 C.data,您需要 ij 从 0 开始

for (int i=rowStart-1,p=0; i<rowEnd; i++,p++) {
for (int j=colStart-1,q=0; j<colEnd; j++,q++) {
C.data[p][q] = this.data[i][j];
}
}

关于java - Strassen 算法的矩阵划分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12729588/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com