【问题标题】:Counting binary bit pattern combinations计数二进制位模式组合
【发布时间】: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 的模式将不包括在计数中。因此,对于单个位模式,有效的将是 0001001001001000。两位模式将是0011010101101001。模式 10101100 不会被计算在内,因为它们超过了 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


    【解决方案1】:

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

    【讨论】:

    • 好主意; OP也很好地表达了他的问题,所以我期待他的一些好的建议!
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      只是一个提示,但尝试以归纳/递归的方式攻击它(无论您喜欢哪个名字);将问题简化为自身的较小实例。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-10-11
        • 2015-08-03
        • 1970-01-01
        • 2014-05-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-09-09
        相关资源
        最近更新 更多