【问题标题】:Java method for recursive matrix multiply?递归矩阵乘法的Java方法?
【发布时间】:2014-01-28 20:48:57
【问题描述】:

所以基本上,我想做的是创建一个将 2 个矩阵作为参数并将它们相乘的方法。这是一项学校任务,我要求通过使用递归“分而治之”来解决这个问题。到目前为止,这是我的代码:

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,但后来我想返回子矩阵,最后是整个矩阵。有没有人有任何建议,无论是关于如何“修复”这个返回问题,或者甚至是关于如何为这样的程序编写代码的更好的想法?

【问题讨论】:

    标签: java arrays return dimensional


    【解决方案1】:

    您正在尝试将二维数组(来自 calc(smalla11, smallb11) 的结果)存储到单个元素 c[0,0] 中。 c 已被声明为二维数组。您是否有意将结果存储在单个点 0,0 中?

    这能满足你的需要吗?

    c =  calc(smalla11, smallb11);
    

    这让我很头疼,但它很有趣! :)

    【讨论】:

    • 我意识到了这一点,我也试着这么说:p 事实是,据我所知,这段代码(我作为伪代码得到的)可以自行工作,直到它只有 1 int 与另一个相乘。此时,代码只是返回一个 int。但是它是递归的,从现在开始,它应该返回一个 c int[sub][sub] 直到它最终返回 c[n][n] 其中 n 是数组维度的最大长度。数组是 n x n 顺便说一句。我对如何将所有这些都纳入一个有效的递归方法有点困惑,但据我所知,我必须使用另一种,除非我以另一种方式声明 int。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-27
    • 1970-01-01
    • 1970-01-01
    • 2020-04-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多