【发布时间】:2012-12-03 23:24:01
【问题描述】:
我正在寻找一种算法来计算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,小于 10 的 1 位 4-bit 模式的数量。F(4,10,2) 将返回 4,而 C(4,2) 为 6。因为n 的实际值可能很大(40 或位),枚举可能的模式、测试限制以及计算有效模式是不切实际的。
关于如何有效地做到这一点的任何想法?
【问题讨论】:
标签: design-patterns binary combinations