平方矩阵乘法递归java实现

平方矩阵乘法递归java实现,java,recursion,matrix,square,Java,Recursion,Matrix,Square,我正在尝试制作子矩阵,将两个矩阵相乘成一个矩阵。我已经得到了伪代码,因此所有试图在java中找到实现它的正确方法的尝试,我仍然停留在基础上。这个pseoudocode的java代码的总体结构是什么样的 SQUARE-MATRIX-MULTITPLY-RECURSIVE(A,B) n = A.rows let C be a n x n matrix if n == 1 c11 = a11 * b11 else partition A, B and C C11 = SQURA

我正在尝试制作子矩阵,将两个矩阵相乘成一个矩阵。我已经得到了伪代码,因此所有试图在java中找到实现它的正确方法的尝试,我仍然停留在基础上。这个pseoudocode的java代码的总体结构是什么样的

SQUARE-MATRIX-MULTITPLY-RECURSIVE(A,B)

n = A.rows
let C be a n x n matrix 
if n == 1  
   c11 = a11 * b11
else partition A, B and C
     C11 = SQURAE-MATRIX-MULTIPLY.RECURSIVE(A11,B11)
          + SQUARE-MARTIX-MULTIPLY-RECURSIVE(A12,B21)
     C12 = SQUARE-MATRIX-MULTIPLY-RECURSUÌVE(A11,B12)
          + SQUARE-MATRIX-MULTIPLY-RECURSIVE(A11,B12)
     C21 = SQUARE-MATRIX-MULTIPLY-RECURSUÌVE(A12,B22)
          + SQUARE-MATRIX-MULTIPLY-RECURSUÌVE(A22,B21)
     C22 = SQUARE-MATRIX-MULTIPLY-RECURSUÌVE()A21,B12)
          + SQUARE-MATRIX-MULTIPLY-RECURSUÌVE(A22,B22)
     return C;
由于矩阵A和B是nxn矩阵,它们可以用大小为n^2的正则数组表示。矩阵(0索引)中的系数Cij在数组a中以[in+j]访问


我的任务是实现两个版本:一个是将子矩阵复制到新数组中,另一个是使用两个索引变量来设置正在使用的矩阵的哪个部分

稀疏表示的向量类:

public class SparseVector {
    private HashST<Integer, Double> st;

    public SparseVector() {
        st = new HashST<Integer, Double>();
    }

    public int size() {
        return st.size();
    }

    public void put(int i, double x) {
        st.put(i, x);
    }

    public double get(int i) {
        if (!st.contains(i))
            return 0.0;
        else
            return st.get(i);
    }

    public double dot(double[] that) {
        double sum = 0.0;
        for (int i : st.keys())
            sum += that[i] * this.get(i);
        return sum;
    }
}
公共类SparseVector{
私人哈希斯特;
公共SparseVector(){
st=新的HashST();
}
公共整数大小(){
返回标准尺寸();
}
公开作废认沽权(整数i,双x){
圣普特(i,x);
}
公共双获取(int i){
如果(!st.包含(i))
返回0.0;
其他的
返回圣吉(一);
}
公共双点(double[]that){
双和=0.0;
对于(int i:st.keys())
sum+=that[i]*this.get(i);
回报金额;
}
}
主要方法/调用代码:

SparseVector[] a;
a = new SparseVector[N];
double[] x = new double[N];
double[] b = new double[N]; // Initialize a[] and x[]. ...
for (int i = 0; i < N; i++)
    b[i] = a[i].dot(x);
SparseVector[]a;
a=新SparseVector[N];
双精度[]x=新双精度[N];
双精度[]b=新的双精度[N];//初始化a[]和x[]。。。
对于(int i=0;i
另一个线程中已经提出了相同的问题。