【问题标题】:Generating all combinations (not all permutations) of n characters with length up to n生成长度不超过 n 的 n 个字符的所有组合(不是所有排列)
【发布时间】:2016-06-27 11:18:12
【问题描述】:

我们如何生成长度从 1 到 n 的 n 个字符的所有可能组合?

例如:如果 n = 4 并且字符是 1,2,3,4 我们需要生成一个数组

1,2,3,4
12,13,14,23,24,34
123, 124, 134, 234
1234

这里 n 是变量,用户可以输入 n 个字符。

【问题讨论】:

  • 您始终可以在k上循环使用nchoosek('1234', k)
  • 路易斯,谢谢!!它在 matlab 中工作,但我还需要在 cpp 中对其进行编码的算法。我是 matlab 的初学者,所以无法从 matlab 中的源代码中获得足够的功能。
  • 如果您在 C++ 中需要它,那完全是一个不同的问题。我建议你用C++ 标签重新发布它。此外,人们可能会问您尝试过什么。您应该显示您的代码以及卡在哪里或为什么它不起作用
  • 答案here中有一个递归实现nchoosek

标签: algorithm matlab loops if-statement combinations


【解决方案1】:

最多 n 个元素的组合与长度为 n 的位掩码之间存在双射。解决问题的一种方法是生成所有长度为 n 的位集,并按它们所具有的位数对它们进行排序。您可以为此使用bucket sort

创建与从 0 到 n 的数字对应的 n+1 列表。然后遍历所有位掩码并为每个位掩码计算其中1 的位数,然后将位掩码添加到相应的列表中。使用这些列表应该很容易解决问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-26
    • 2017-05-20
    • 2011-12-04
    • 1970-01-01
    • 2012-02-12
    • 2017-07-10
    相关资源
    最近更新 更多