我想知道是否有一种有效的算法来生成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)计算二进制数并取所有这些那 满足约束,但我想知道是否有更高效的算法。
答案 0 :(得分:2)
有一种简单的算法可以迭代n
大小与k
大小的组合:
n
的位向量开始,其中最后k
位为1
。n
的位向量,其中第一个k
位为1
):
一个。找到位向量中的最后一个01
序列。将其更改为10
并将所有以下1
位(必须紧随其后)移至序列的末尾。有一个简单的无循环位操作黑客来做到这一点。您可以在我对此问题的回答中看到它:Find n-th set of a powerset