【问题标题】:How do I turn a matrix into a even dimension?如何将矩阵变成偶数维?
【发布时间】:2020-09-09 14:32:38
【问题描述】:

我想为奇数矩阵实现 Strauss 算法。为了解决这个问题,我需要在底部添加一行零,并在最后一列之后添加一列新的零。如何在我的代码中做到这一点?

例如: int[][] matrix1 = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}}; int[][] matrix2 = {{3, 2, 1}, {6, 5, 4}, {9, 8, 7}};

should be converted to
int[][] matrix1 = {{1, 2, 3, 0}, {4, 5, 6, 0}, {7, 8, 9, 0}, {0, 0, 0, 0}};
int[][] matrix2 = {{3, 2, 1, 0}, {6, 5, 4, 0}, {9, 8, 7, 0}, {0, 0, 0, 0}};

This is my current code for odd matrices:
The code for even matrix dimensions works.


public static int[][] strassenGeneral(int[][] m1, int[][] m2) {
        int n = m1.length;
        if (n % 2 == 0) {
            strassen(m1, m2);
        } else {
            n += 1;
            int newresult[][] = new int[n][n];
            for (int i = 0; i < n-1; i++) {
                for (int j = 0; j < n; j++) {
                    newresult[i][n - 1] = 0;
                    newresult[n - 1][j] = 0;
                }
            }
        }
        return strassen(m1, m2);
}

Thank you very much.

【问题讨论】:

    标签: java arrays matrix


    【解决方案1】:

    你可以像这样修改你的函数: 这适用于奇数和偶数数组。

    public static int[][] strassenGeneral(int[][] m1) {
        int rows = m1.length;
        int cols = m1[0].length;
        int[][] res = new int[rows+1][cols+1];
        for(int i=0;i<res.length;i++) {
            for(int j=0;j<res[i].length;j++) {
                if(j<cols && i<rows) {
                    res[i][j] = m1[i][j];
                } else {
                    res[i][j] = 0;
                }
            }
        }
        return res;
    }
    

    您不需要同时传递两个数组。您可以将它们一一传递给函数。

    【讨论】:

      【解决方案2】:

      这会起作用

      public static int[][] strassenGeneral(int[][] A, int[][] B) {
          
          int n = A.length;
          int[][] res = new int[n][n];
      
          if ((n % 2 != 0) && (n != 1)) {
      
              int[][] A1, B1, C1;
              int n1 = n + 1;
              A1 = new int[n1][n1];
              B1 = new int[n1][n1];
      
              for (int i = 0; i < n; i++)
                  for (int j = 0; j < n; j++)
                      A1[i][j] = A[i][j];
              for (int i = 0; i < n; i++)
                  for (int j = 0; j < n; j++)
                      B1[i][j] = B[i][j];
      
              C1 = strassenGeneral(A1, B1);
              for (int i = 0; i < n; i++)
                  for (int j = 0; j < n; j++)
                      res[i][j] = C1[i][j];
              return res;
          }
          return null;
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-11-19
        • 2016-10-19
        • 1970-01-01
        • 1970-01-01
        • 2020-03-19
        • 2020-08-11
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多