k元素组合二元掩模与排除

时间:2017-05-27 23:03:13

标签: algorithm combinations bitmask

我的问题是:对于给定的n, k - 正整数和f - 位掩码(k <= n, log(f) < n)找到所有位掩码m,以便log(m) < ncount_of_ones(m) == k和{{ 1}}例如,如果我们有一个集合m & f = 0.,则S={0,1,2,3,4}的解决方案将代表n=5, k=2 and f=0b01010的2元素组合。我目前的解决方案是找到S-{1,3}的掩码(使用this算法),然后'拉伸'它们以符合我的条件:

n'=n-count_of_ones(f), k'=k and f'=0

如您所见,拉伸一个位掩码需要for(scaled_comb=comb; f > 0; f&=(f-1)) { b = f&(-f); scaled_comb = ((scaled_comb&~(b-1))<<1)|(scaled_comb&(b-1)); } 。有没有办法加快速度?谢谢;)

0 个答案:

没有答案