计算二进制位模式组合

时间:2009-08-06 03:02:19

标签: design-patterns binary combinations

我正在寻找一种算法来计算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-bits000100100100。两位模式为1000001101010110。模式10011010不会被计算,因为它们超过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或位),枚举可能的模式,针对限制进行测试以及计算有效模式是不切实际的。

有关如何有效完成此任务的任何想法?

3 个答案:

答案 0 :(得分:2)

因为这被标记为家庭作业问题,为什么不提供您的想法,我们可以给您建议。你可以总是设计一个效率低下的算法,并分析它以尝试创造效率......

答案 1 :(得分:0)

将限制范围以下的范围分解为具有固定前缀的大小为2 ^ m的区域,并考虑前缀中设置的位。

答案 2 :(得分:0)

只是一个暗示,但尝试以感应/递归的方式攻击它(无论你喜欢哪个绰号);将问题减少到较小的实例。