Умножение разреженных матриц в Java

Здравствуйте, я знаю, что есть много вопросов об умножении разреженных матриц, но во многих ответах говорится, что нужно просто использовать библиотеки. Я хочу сделать это без использования библиотечных функций. До сих пор я делал самую простую часть, приводя свои матрицы в форму
массива элементов
массива столбцов
массива строк.

Мне нужна помощь с логической частью. Если матрица A равна M*N, а матрица B равна N*P, как мне это сделать? Я решил перебрать элементы в матрице A и проверить, является ли это rowA == colB, и если да, то если colA == rowB, и если это правда, то умножить. В настоящее время я знаю, что моя версия неверна, но я не могу придумать, как исправить ее.

for(int i = 0; i < rows; i++)
{
    sum = 0;    
    for(int k = 0; k < cols; k++)
        if (row_values.get(i) == col_valuesb.get(k))
            if (col_values.get(i) == row_valuesb.get(k))
            {
                sum += (short) (elements.get(i)*elementsb.get(k));
            }
    elementsc.add(sum);
    row_valuesc.add(row_values.get(i));
    col_valuesc.add(col_values.get(k));
}

person user630606    schedule 09.04.2012    source источник


Ответы (1)


Вы сказали:

«Я решил перебрать элементы в матрице A и проверить, является ли это rowA == colB,> и если да, то если colA == rowB»

Ну, так как две матрицы по определению могут умножаться тогда и только тогда, когда colA==rowB, то не следует ли вам изменять

if (row_values.get(i) == col_valuesb.get(k)){
            if (col_values.get(i) == row_valuesb.get(k))
            {

и просто сделай это

if (row_values.get(i) == col_valuesb.get(k)){

вместо?

person OcelotXL    schedule 15.02.2013