如何计算矩阵中每个方格(较小矩阵)的长度

时间:2016-02-01 18:29:14

标签: java algorithm matrix implementation

我正在解决涉及矩阵的算法任务。 我需要计算一个较大的内部正方形(较小的矩阵)。 原始长度和下一个长度之间是否有任何依赖关系? 作为一个例子,我有这个矩阵:

1  2  3  4  5  6
7  8  9  10 11 12
13 14 15 16 17 18 
19 20 21 22 23 24 
25 26 27 28 29 30
31 32 33 34 35 36

您可能会看到Rows = 6Cols = 6Length = Rows * Cols;

问题陈述:如何计算内矩阵的长度:

8  9  10 11
14 15 16 17
20 21 22 23
26 27 28 29

最后一个

15 16
21 22

我能做什么:

for(int i = 0; i < row; i++){ 
    for(int j = 0; j < col; j++){
        //mirrored row and col e.g. 0 1 2 3 2 1 0
        int rowMir = i >= (int)Math.round(M/2.0d) ? (M - 1 - i) : i; 
        int colMir = j >= (int)Math.round(N/2.0d) ? (N - 1 - j) : j; 
        int depth = row > col ? col : row; //depth of inner square for each element in iteration. square's border in other words. 
        //In current matrix there are 3 inner squares (0, 1, 2)
    } 
}

它有用吗?我试图根据我所获得的价值来计算它,但直到现在都没有成功。在这种情况下,谷歌搜索没有给我任何东西。

修改 我正在寻找的解决方案是动态获取每个元素的矩阵大小。 [i][j]处的值示例我计算了它所属的内部矩阵depth

2 个答案:

答案 0 :(得分:2)

您可以在每次迭代时简单地减少2步:

int minDim = Math.min(rows, columns);
for(int i = minDim ; i >= 0 ; i -= 2) {
    System.out.println("Inner length: " + ((rows - i) * (columns - i)))
}

答案 1 :(得分:0)

如果您确实要打印所有内部矩阵并获得计数,那么您可以执行以下操作:

public static void main (String[] args)
{
    /* Define Matrix */
    int matrixSize = 6;
    int[][] matrix = new int[][]{{1, 2, 3, 4, 5, 6 },
                                 {7, 8, 9, 10,11,12},
                                 {13,14,15,16,17,18},
                                 {19,20,21,22,23,24},
                                 {25,26,27,28,29,30},
                                 {31,32,33,34,35,36}};

    /* Initialize Count Counter */
    int count = 0;

    /* Count/Print Inner Matrices */                             
    for(int x = 2; x < matrixSize; x++) {
        for(int i = 0; i <= matrixSize - x; i++) {
            for(int j = 0; j <= matrixSize - x; j++) {
                /* Call Print Matrix Function */
                printMatrix(matrix, i, j, x);
                ++count; /* Increment Counter */
            }
        }
    }

    /* Print Actual Count */
    System.out.println("\nTotal Inner Square Matrices Count: " + count);
}

/**
 * Print Matrix
 * Arguments: Matrix, Row Index, Column Index, Matrix Size
**/
public static void printMatrix(int[][] matrix, int i, int j, int size) {
    System.out.println();
    /* Row Iterator */
    for(int iIndex = i; iIndex < i + size; iIndex++) {
        System.out.println();
        /* Column Iterator */
        for(int jIndex = j; jIndex < j + size; jIndex++) {
            System.out.print(" " + matrix[iIndex][jIndex]);
        }
    }
}

<强>输出:

1 2
7 8

2 3
8 9

...

Total Inner Matrices: 54