我正在寻找一种算法,该算法将计算一个n-bit
单词中二进制位模式的数量,这些位模式等于或小于小于的任意限制2^n
。此外,我想为所有1-bit
组合、2-bit
组合等生成计数。显然,如果限制是2^n
,就会有2^n
组合(C(n,1) 1-bit combinations plus C(n,2) 2-bit plus C(n,3) 3-bit and so on)
。但是,如果施加限制,则并非所有可能的组合都是有效的(小于施加的限制)。
例如,说n=4
。有 16 种可能的位模式,其中 15 种包含 1 或更多1-bits
。如果限制为 10,则大于 10 的模式将不包括在计数中。因此,对于单个位模式,有效的将是0001
、0010
、0100
和1000
。两位模式将是0011
, 0101
, 0110
, 1001
. 模式1010
并且1100
不会被计算在内,因为它们超过了 10。唯一的 3 位位将是0111
,而唯一的 4 位模式1111
超过了限制。
如果F
是我的计数函数,F(4,10,1)
将返回 4,4-bit
小于 10 的 1 位模式的数量。F(4,10,2)
将返回 4,其中为C(4,2)
6。因为 的实际值n
可能很大(40 或位),枚举可能的模式,针对限制进行测试并计算有效的是不切实际的。
关于如何有效地做到这一点的任何想法?