java - 生成具有一些限制的矩阵的所有可能配置

标签 java matrix

我已经为此苦苦挣扎了一段时间,我真的很困惑如何解决这个问题。 我发现了一些可以与 MatLab 配合使用的东西,但这不是我需要的。

这是我的场景:

private int[][] c = {{1,1,1,1,1,1,1},
                     {0,0,0,0,0,0,0},
                     {0,0,0,0,0,0,0}
                    };

c 是一个矩阵,其中每一列中只能将一个值设置为 1。 这意味着像这样的配置

private int[][] c = {{0,1,0,1,1,0,0},
                     {1,0,0,0,0,1,1},
                     {0,0,1,0,0,0,0}
                    };

有效,同时

private int[][] c = {{1,0,1,1,0,1,1},
                     {0,0,1,0,0,0,0},
                     {0,0,0,0,1,0,0}
                    };

不是。 我需要的是生成一个包含该矩阵所有有效组合的Set,但我不知道如何开始。 我不知道是否只是因为已经很晚了,我处于半睡半醒的状态,但我想不出一个好的方法来做到这一点。

你有什么想法吗?

最佳答案

有很多可能的方法来实际实现这一点。但您基本上必须从 0 数到 37,并为每个数字创建一个矩阵。

将矩阵的每个可能的列想象为一个数字:

1
0 = 0
0

0
1 = 1
0

0
0 = 2
1

然后,矩阵可以用三元形式的数字表示。数字0000000将对应于矩阵

1 1 1 1 1 1 1
0 0 0 0 0 0 0
0 0 0 0 0 0 0

数字0000001将对应于矩阵

1 1 1 1 1 1 0
0 0 0 0 0 0 1
0 0 0 0 0 0 0

等等。

然后,您可以计算矩阵的总数,从 0 计数到该数字,将每个数字转换为三进制形式的字符串,并根据该字符串填充矩阵。

第 895 个矩阵的编号为 1020011,这是您的示例矩阵之一:

 0 1 0 1 1 0 0
 1 0 0 0 0 1 1
 0 0 1 0 0 0 0

一个简单的实现:

public class MatrixCombinations
{
    public static void main(String[] args)
    {
        int cols = 7;
        int rows = 3;
        int count = (int)Math.pow(rows, cols);
        for (int i=0; i<count; i++)
        {
            String s = String.format("%"+cols+"s", 
                Integer.toString(i, rows)).replaceAll(" ", "0");
            int[][] matrix = createMatrix(rows, cols, s);
            System.out.println("Matrix "+i+", string "+s);
            printMatrix(matrix);
        }
    }

    private static int[][] createMatrix(int rows, int cols, String s)
    {
        int result[][] = new int[rows][cols];
        for (int c=0; c<cols; c++)
        {
            int r = s.charAt(c) - '0';
            result[r][c] = 1;
        }
        return result;
    }

    private static void printMatrix(int matrix[][])
    {
        for (int r=0; r<matrix.length; r++)
        {
            for (int c=0; c<matrix[r].length; c++)
            {
                System.out.printf("%2d", matrix[r][c]);
            }
            System.out.println();
        }
    }
}

关于java - 生成具有一些限制的矩阵的所有可能配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25099789/

相关文章:

java - 代码 401,需要登录,同时在 Android 上使用 YouTube Data API V3

java - DFS 方法未产生预期输出

R - 具有不同列的矩阵的总和列表

java - 第一人称相机胶卷

java - 使用扫描仪时出现无限循环?

java - 生成随机数并在前面加0以保证位数固定

java - HTTP 状态 500-/index.jsp "/struts-tags"未找到

arrays - 在 Matlab 中使用 hist 计算出现次数

c - 使用 CSparse 库在 C 中表示稀疏矩阵

Python Opencv黑窗