有效地在位集中找到第k个设置位的位置

时间:2015-02-12 19:19:13

标签: algorithm bitset

我有一个稀疏的位集,可能有数百万甚至数十亿位宽。假设bitset已经被有效压缩,并且假设我也可以有效地查询bitset,以确切地查看在某个给定范围(即位置和长度)中设置了多少位。

鉴于此,我是否可以有效地找到位集中第k个设置位的位置,或者有效地指示它不存在?编程语言中立的算法的描述将是理想的。假设我无法更改bitset实现的任何内部结构...也就是说,我对bitset执行的唯一操作就是查询其总宽度,并询问它在任何给定范围内设置了多少位。 / p>

1 个答案:

答案 0 :(得分:3)

如果您可以有效地查询每个范围中设置的位数,您可以在#set_bits(0,i)上执行二进制搜索,以找到该值等于k的第一个索引。

需要O(log(n)*f(n)),其中f(n)#set_bits(0,i)操作的复杂性。