生成给定长度的0和1的所有组合,给出最小值和最大值1

时间:2013-06-02 21:34:16

标签: algorithm combinations

我想知道是否有一种有效的算法来生成0和1的所有组合,长度为n,最小和最大量为1。

示例:

n = 4 min = 2 max = 3

0011 0101 1001 0110 1010 1100 (with 2 1's)
0111 1011 1101 1110           (with 3 1's)

我知道我可以从(n-min)* 0(min)* 1到(max)* 1(n-max)* 0(本例中为0011到1110)计算二进制数并取所有这些那 满足约束,但我想知道是否有更高效的算法。

1 个答案:

答案 0 :(得分:2)

有一种简单的算法可以迭代n大小与k大小的组合:

  1. 从长度为n的位向量开始,其中最后k位为1
  2. 尽可能长时间重复(即直到你获得长度为n的位向量,其中第一个k位为1): 一个。找到位向量中的最后一个01序列。将其更改为10并将所有以下1位(必须紧随其后)移至序列的末尾。
  3. 有一个简单的无循环位操作黑客来做到这一点。您可以在我对此问题的回答中看到它:Find n-th set of a powerset