【问题标题】:Generate every combination of numbers生成每个数字组合
【发布时间】:2019-04-19 08:52:42
【问题描述】:

我有一个包含 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++;
}

编辑:作为重复链接的问题不同,因为它允许选择重复的元素。

在这里找到我的答案:https://stackoverflow.com/a/17871949/1880554

【问题讨论】:

  • Algo 上存在一个关于所有排列/子集大小为 N.1 的虚拟令牌到找到它的那个的问题
  • 每一种可能的组合是什么?那些随机挑选的4个元素?这 4 个元素对 100 个其他元素?
  • 你能告诉我们你自己尝试过什么吗?这种感觉就像我们在做你的功课。
  • @Jordec 添加了代码,我的“作业”已经完成,代码有效,我只是想让它更有效率。

标签: c#


【解决方案1】:

当你说同一个元素不能被选择两次时,你的意思是你不能有,例如, (1 , 2, 3, 2) 因为“2”已经存在?如果您生成的元素的顺序很重要,并且不能重复,则称为 Permutation without repitition这是对理论的参考https://www.mathsisfun.com/combinatorics/combinations-permutations.html 关于您的循环情况,这可能会有所帮助: Permutation without repetition C#

【讨论】:

  • 是的,我就是这个意思
  • 顺序无所谓,所以选择元素(0, 1, 2, 3)和(3, 2, 1, 0)或者(1, 2, 0)是一样的, 3),因为它仍然是要比较的相同元素。只有 (1, 2, 3, 2) 之类的东西是不允许的,因为它会将其中一个元素与自身进行比较。
猜你喜欢
  • 1970-01-01
  • 2012-04-26
  • 1970-01-01
  • 1970-01-01
  • 2021-01-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多