Умножение матриц Java - PullRequest
       1

Умножение матриц Java

1 голос
/ 14 февраля 2011

Мне нужна помощь, я пытаюсь использовать Lattice Multiplication в Java для использования в классе 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];
            }
        }

** ниже приведен оператор возврата и т. Д.

Это может помочь как лучше объяснить решетку multi: Решетка Мульти Видео

Ответы [ 2 ]

2 голосов
/ 14 февраля 2011

Я бы попробовал другой подход.Посмотрите на решетку в видео и представьте, что вы поворачиваете массив немного влево, чтобы диагонали становились вертикальными.В таком случае массив будет выглядеть следующим образом:

2 3 5
  8 3
  2 4 0

Теперь просто суммируйте столбцы, и вы получите итоговое значение.

Конечно, сначала нужно разбить числа на массивы цифр.,Самый простой способ сделать это (но не самый эффективный) - преобразовать их в строки ...

Удачи!

2 голосов
/ 14 февраля 2011

Чтобы двигаться по диагонали, вы должны увеличивать и 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.

Надеюсь, это поможет вам с заданием.Удачи на отдыхе!Это, безусловно, интересный алгоритм для реализации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...