我正在寻找一种算法来计算n-bit
字中的二进制位模式的数量,这些模式等于或小于小于2^n
的任意限制。此外,我想为所有1-bit
组合,2-bit
组合等生成计数。显然,如果限制为2^n
,则会有2^n
个组合{{1 }}。但是,如果施加限制,并非每种可能的组合都是有效的(低于强制限制)。
例如,说(C(n,1) 1-bit combinations plus C(n,2) 2-bit plus C(n,3) 3-bit and so on)
。有16种可能的位模式,其中15种包含1个或更多n=4
。如果施加10的限制,那么大于10的那些模式将不包括在计数中。因此,对于单比特模式,有效模式将是1-bits
,0001
,0010
和0100
。两位模式为1000
,0011
,0101
,0110
。模式1001
和1010
不会被计算,因为它们超过10.唯一的3位是1100
而唯一的4位模式0111
结束了限制。
如果1111
是我的计数功能,F
将返回4,1位F(4,10,1)
模式的数量小于10. 4-bit
将返回4因为F(4,10,2)
是6.因为C(4,2)
的实际值可能很大(40或位),枚举可能的模式,针对限制进行测试以及计算有效模式是不切实际的。
有关如何有效完成此任务的任何想法?
答案 0 :(得分:2)
因为这被标记为家庭作业问题,为什么不提供您的想法,我们可以给您建议。你可以总是设计一个效率低下的算法,并分析它以尝试创造效率......
答案 1 :(得分:0)
将限制范围以下的范围分解为具有固定前缀的大小为2 ^ m的区域,并考虑前缀中设置的位。
答案 2 :(得分:0)
只是一个暗示,但尝试以感应/递归的方式攻击它(无论你喜欢哪个绰号);将问题减少到较小的实例。