Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 带替换的有序抽样_Java_Combinatorics - Fatal编程技术网

Java 带替换的有序抽样

Java 带替换的有序抽样,java,combinatorics,Java,Combinatorics,这一次我真的陷入了一成不变的状态 我希望生成所有的组合,这样就有了带替换的有序采样(我想这就是它的名称,参见我的示例),并且结果输出到一个数组数组(2D数组)中 比如说 public static int[][] combinations(int n, int k) 输入n=3时,k=2将给出: [0,0]、[0,1]、[0,2]、[1,0]、[1,1]、[1,2]、[2,0]、[2,1]、[2,2]] 我真的不知道如何有效地做到这一点。任何指点都很感激 这里我们有一个包含n元素的集合,我们希

这一次我真的陷入了一成不变的状态

我希望生成所有的组合,这样就有了带替换的有序采样(我想这就是它的名称,参见我的示例),并且结果输出到一个数组数组(2D数组)中

比如说

public static int[][] combinations(int n, int k)
输入n=3时,k=2将给出:

[0,0]、[0,1]、[0,2]、[1,0]、[1,1]、[1,2]、[2,0]、[2,1]、[2,2]]


我真的不知道如何有效地做到这一点。任何指点都很感激

这里我们有一个包含
n
元素的集合,我们希望从集合中提取
k
样本,以便允许排序和重复

代码如下:

public static void main(String[] args) {
    int n = 4;
    int k = 2;
    int[][] result = combinations(n, k);
    System.out.println(Arrays.deepToString(result));
    //this will print:
    //[[0,0],[0,1],[0,2],[0,3],[1,0],[1,1],[1,2],[1,3],[2,0],[2,1],[2,2],[2,3],[3,0],[3,1],[3,2],[3,3]]
}

public static int[][] combinations(int n, int k) {
    int[] nArray = IntStream.range(0, n).toArray();
    List<String> list = new ArrayList<String>();
    combinationStrings(k, nArray, "", list);
    return fromArrayListToArray(list, k);
}

private static void combinationStrings(int k, int[] nArray, String currentString, List<String> list) {
    if (currentString.length() == k) {
        list.add(currentString);
    } else {
        for (int i = 0; i < nArray.length; i++) {
            String oldCurrent = currentString;
            currentString += nArray[i];
            combinationStrings(k, nArray, currentString, list);
            currentString = oldCurrent;
        }
    }
}

private static int[][] fromArrayListToArray(List<String> list, int k) {
    int[][] result = new int[list.size()][k];
    for (int i=0;i<list.size();i++) {
        String[] split = list.get(i).split("\\B");
        for (int j = 0; j < split.length; j++) {
            result[i][j] = Integer.parseInt(split[j]);
        }
    }
    return result;
}
publicstaticvoidmain(字符串[]args){
int n=4;
int k=2;
int[][]结果=组合(n,k);
System.out.println(Arrays.deepToString(result));
//这将打印:
//[[0,0],[0,1],[0,2],[0,3],[1,0],[1,1],[1,2],[1,3],[2,0],[2,1],[2,2],[2,3],[3,0],[3,1],[3,2],[3,3]]
}
公共静态int[][]组合(int n,int k){
int[]nArray=IntStream.range(0,n).toArray();
列表=新的ArrayList();
组合字符串(k,nArray,“,list);
从ArrayList返回Array(列表,k);
}
私有静态void组合字符串(int k,int[]nArray,String currentString,List){
if(currentString.length()=k){
list.add(currentString);
}否则{
for(int i=0;i对于(int i=0;我能看到你的代码吗?“带替换的有序采样”看起来相当于
{0..n-1}^k
@susticousdog是的,原来它只是笛卡尔积。我只是不知道它是这样叫的。谢谢