我有一个包含100个元素的数组,我随机选择4个(同一元素不能被选择两次)。我重复此过程很多次,以尝试获得所有可能的组合。不过必须有一种更有效的方法。
我该如何创建一个仅创建所有可能组合的循环?
double[][] picked = new double[4][];
int[] chosen = new int[4];
Random rnd = new Random();
List<int> exclude = new List<int>();
int z = 0;
while (z < 4)
{
picked[z] = new double[rows];
int x = rnd.Next(0, rows);
if (exclude.Contains(x))
{
continue;
}
exclude.Add(x);
// do stuff with the chosen elements
z++;
}
编辑:链接为重复项的问题有所不同,因为它允许选择重复元素。
答案 0 :(得分:0)
当您说不能两次选择相同的元素时,您的意思是您不能拥有(1,2,3,2),因为“ 2”已经存在?如果顺序与您生成的元素有关,并且不能有替换,则称为无替换的排列。此处是对理论的引用:{{3} } 关于循环的情况,这可能会有所帮助: https://www.mathsisfun.com/combinatorics/combinations-permutations.html