首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Strassen算法的矩阵划分

Strassen算法的矩阵划分
EN

Stack Overflow用户
提问于 2012-10-04 22:31:20
回答 1查看 1K关注 0票数 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的末尾。

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

代码语言:javascript
复制
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);)的子矩阵。

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-10-04 22:35:45

代码语言:javascript
复制
C.data[i][j] = this.data[i][j];<-- Culprit

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

代码语言:javascript
复制
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];
        }
    }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12729588

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档