矩阵乘法Java

时间:2011-02-14 19:18:52

标签: 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 Video

2 个答案:

答案 0 :(得分:2)

要沿对角方向移动,您需要递增x和y:

// Loop though the diagonal of an array
x = 0;
y = 0;
while (x < ARR_X_SIZE && y < ARR_Y_SIZE) {
   // Do something with arr[x][y]
   x++;
   y++;
}

这是基本循环;您可以更改x和y增量以确定您需要的方向。遍历整个数组的关键是进入循环的坐标值。阵列:

1 2 3
4 5 6
7 8 9

如果您在循环开始时设置x = 1; y=0,则会获得2 6。设置x = 0, y = 1,您将获得4 8

我希望这可以帮助您完成作业。祝其他人好运!这绝对是一个有趣的算法来实现。

答案 1 :(得分:2)

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

2 3 5
  8 3
  2 4 0

现在,只需总结一下这些列就可以获得总数。

您当然必须先将数字拆分为数字数组。最简单的方法是将它们转换为字符串......

祝你好运!