java - 矩阵乘法Java

标签 java algorithm

我需要帮助,我正在尝试在 Java 中使用 Lattice Multiplication,以便在我必须为一个类编写的 BigInt 类中使用。

现在我有代码将算法的加法部分所需的数字存储在一个二维数组中。从那里开始,我不知道如何制作一个循环来遍历数组并将数字添加到对角线中。

例如这里是测试号等:

200 *311 = 62200

数组持有:

6 0 0

2 0 0

2 0 0

6在数组中是(2,2),右下是(0,0)

我需要加入一条对角线,比如(1,0) + (0,1) = 0

问题是我该怎么做,因为它不仅以不同的方式向上和向左移动,而且从 1 个元素到 2 个元素再到 3 个元素,然后以另一种方式返回,当然这会得到数字越大越长。

这是我的代码:

public int multiply(BigInt val){
        int[] bigger;
        int[] smaller;
        int[] dStore;

        int lengthMax = (val.getSize()+this.getSize()) - 1;
        int first = 0;
        int second = 0;

        int[][] tempResult;


        //Checks to see which is bigger and then adds that to bigger
        if(val.getSize() >= this.getSize()){
            bigger = val.getData();
            smaller = this.getData();
            dStore = new int[val.getSize()+this.getSize()];
        }else{
            bigger = this.getData();
            smaller = val.getData();
            dStore = new int[val.getSize()+this.getSize()];
        }

        tempResult = new int[smaller.length][bigger.length];

        for(int i=0;i < smaller.length;i++){
            for(int j = 0;j < bigger.length;j++){
                tempResult[i][j] = smaller[i] * bigger[j];
            }
        }

** 下面有返回语句等

这可能有助于更好地解释 lattice multi:Lattice Multi Video

最佳答案

我会尝试不同的方法。查看视频中的格子,想象一下您将阵列向左旋转一点,使对角线变为垂直。该数组将如下所示:

2 3 5
  8 3
  2 4 0

现在,只需汇总各列即可得到总数。

您当然必须首先将数字拆分为数字数组。最简单的方法(但不是最有效的)是将它们转换成字符串......

祝你好运!

关于java - 矩阵乘法Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4996299/

相关文章:

python - 具有自定义比较谓词的 heapq

algorithm - 寻找算法(二维二分查找的版本)

algorithm - 正好有 k 个反转的 n 元素排列数

java - 通过 JSCH 使用 sftp 连接时出现安全异常

java - JUnit 5 TestSuite 替代方案?

java - 刷新引起的延迟初始化错误

java - 为什么DDMS不再开放?

algorithm - 如何找到最长的可能路径?

java - 如何将 ArrayList 数据添加到 Derby 中的相同#?

c++ - 为什么我用这个背包问题求解器得到 "unknown signal 11"?