【发布时间】:2015-02-12 19:19:12
【问题描述】:
我有一个稀疏的位集,可能有数百万甚至数十亿位宽。假设 bitset 已经被有效压缩,并假设我也可以有效地查询 bitset 以查看在某个给定范围(即位置和长度)中设置了多少位。
鉴于此,我能否有效地找到第 k 个设置位在位集中的位置,或者有效地给出它不存在的指示?对编程语言中立的算法的描述将是理想的。假设我无法更改 bitset 实现的任何内部结构......也就是说,我可以对 bitset 做的唯一事情是查询它的总宽度,并询问它在任何给定范围内设置了多少位。
【问题讨论】:
-
在检查设置了多少位时,是否有关于范围可以有多大的规定?如果您告诉我们该操作的时间复杂度可能会有所帮助。
-
您的描述建议修改二进制搜索:递归二分法缩小了第 k 位存在的间隔。您需要将当前测试间隔“左”设置的位数作为附加参数(您从以前的递归级别知道此数字)。