gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 12:40:59 27 4
gpt4 key购买 nike

我已经为此苦苦挣扎了一段时间,我真的很困惑如何解决这个问题。我发现了一些可以与 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com