Design patterns 二进制位模式组合计数
我正在寻找一种算法,该算法将计算Design patterns 二进制位模式组合计数,design-patterns,binary,combinations,Design Patterns,Binary,Combinations,我正在寻找一种算法,该算法将计算n位字中等于或小于小于小于2^n的任意限制的二进制位模式数。此外,我想为所有1位组合、2位组合等生成计数。显然,如果限制为2^n,则会有2^n组合(C(n,1)1位组合加上C(n,2)2位加上C(n,3)3位等等)。但是,如果施加了限制,并非所有这些可能的组合都是有效的(低于施加的限制) 例如,说n=4。有16种可能的位模式,其中15种包含1个或多个1位。如果限制为10,则大于10的模式将不包括在计数中。因此,对于单位模式,有效的模式将是0001、0010、010
n位
字中等于或小于小于小于2^n
的任意限制的二进制位模式数。此外,我想为所有1位
组合、2位
组合等生成计数。显然,如果限制为2^n
,则会有2^n
组合(C(n,1)1位组合加上C(n,2)2位加上C(n,3)3位等等)
。但是,如果施加了限制,并非所有这些可能的组合都是有效的(低于施加的限制)
例如,说n=4
。有16种可能的位模式,其中15种包含1个或多个1位
。如果限制为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位
模式数F(4,10,2)
将返回4,其中asC(4,2)
是6。因为n
的实际值可能很大(40或40位),所以枚举可能的模式、针对限制进行测试以及计算有效模式是不切实际的
关于如何有效地完成这项工作,你有什么想法吗?既然这是一个家庭作业问题,你为什么不提出你的想法,我们可以给你一些建议。你总是可以设计一个低效的算法,并对其进行分析,以尝试创造效率…将低于限制的范围分解为大小为2^m的区域,使用固定前缀,并考虑前缀中设置的位。只是一个提示,但尝试以归纳/递归的方式(无论你喜欢哪个名字)攻击它;将问题简化为更小的实例。好主意;OP也很好地表达了他的问题,因此我期待他提出一些好的建议!