Algorithm 生成0和x27的所有组合;s和1';对于给定长度,最小值和最大值为1';给
我想知道是否有一个有效的算法来生成长度为n的0和1的所有组合,给定1的最小值和最大值 例如: n=4最小值=2最大值=3Algorithm 生成0和x27的所有组合;s和1';对于给定长度,最小值和最大值为1';给,algorithm,combinations,Algorithm,Combinations,我想知道是否有一个有效的算法来生成长度为n的0和1的所有组合,给定1的最小值和最大值 例如: n=4最小值=2最大值=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)进行计数,并取所有 满足约束条件,但我想知道是否有更有效的算法 有一个简单的算法可以迭代大
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)进行计数,并取所有
满足约束条件,但我想知道是否有更有效的算法 有一个简单的算法可以迭代大小
n
与k
的组合:
n
的位向量开始,其中最后的k
位是1
n
的位向量,其中第一个k
位为1
):
A.查找位向量中的最后一个01
序列。将其更改为10
,并将以下所有1
位(必须紧跟其后)移动到序列末尾有一个简单的无循环位操作黑客可以做到这一点。你可以在我对这个问题的回答中看到:也许我误解了什么,但如果我按照你在我得到的链接中描述的策略:@rex123:我想你的评论被截断了。'0011->0101->1001->1010->1100->0111->1011->1101->1110',这意味着我遗漏了什么。我想我不明白如果'1'不是紧接在'01'之后该怎么办。@rex123:在
0101
中,最后一个01
在末尾,因此下一个组合是0110
。1
必须紧跟在最后一个01
之后,因为如果有1
,而它们不紧跟在最后一个01
之后,那么它们必须紧跟在其他0
之后,所以最后一个01
不能是最后一个01
,这是矛盾的证明。这两个序列是:0011
,0101
,0110
,1001
,1010
,1100
。这是你自己发现的还是有什么理论依据?如果是,我应该看什么?