【问题标题】:Efficiently finding the position of the k'th set bit in a bitset有效地找到第 k 个集合位在位集中的位置
【发布时间】:2015-02-12 19:19:12
【问题描述】:

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

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

【问题讨论】:

  • 在检查设置了多少位时,是否有关于范围可以有多大的规定?如果您告诉我们该操作的时间复杂度可能会有所帮助。
  • 您的描述建议修改二进制搜索:递归二分法缩小了第 k 位存在的间隔。您需要将当前测试间隔“左”设置的位数作为附加参数(您从以前的递归级别知道此数字)。

标签: algorithm bitset


【解决方案1】:

如果可以高效查询每个范围内设置的位数,可以对#set_bits(0,i)进行二分查找,找到该值等于k的第一个索引。

它将采用O(log(n)*f(n)),其中f(n)#set_bits(0,i) op 的复杂度。

【讨论】:

  • 谢谢...我认为这很简单,但由于某种原因,我对实际需要做的事情一无所知。
  • 哈哈哈,我在设计我的解决方案时想得太复杂了:-)。你的路要走!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-24
  • 2015-02-03
  • 1970-01-01
  • 2021-06-30
  • 2011-04-23
相关资源
最近更新 更多