Добавление двух карт разреженных матриц

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

1 ответ

Я хотел бы предложить что-то вроде этого - обратите внимание, что это непроверенный код.

public static SparseMatrix add(SparseMatrix a, SparseMatrix b) {
  if (a.rows != b.rows || a.cols != b.cols) {
    // They must be the same dimensions.
    return null;
  }
  return new SparseMatrix(a.rows, a.cols).add(a).add(b);
}

private SparseMatrix add(SparseMatrix a) {
  // Walk all of his.
  for (Integer i : a.matrix.keySet()) {
    // Do I have one of these?
    if (matrix.containsKey(i)) {
      // Yes! Add them together.
      TreeMap<Integer, Double> mine = matrix.get(i);
      TreeMap<Integer, Double> his = a.matrix.get(i);
      // Walk all values in there
      for (Integer j : his.keySet()) {
        // Do I have one of these?
        if (mine.containsKey(j)) {
          // We both have this one - add them.
          mine.put(j, mine.get(j) + his.get(j));
        } else {
          // I do not have this one.
          mine.put(j, his.get(j));
        }
      }
    } else {
      // I do not have any of these - copy them all in.
      matrix.put(i, new TreeMap(a.matrix.get(i)));
    }
  }
  return this;
}
Другие вопросы по тегам