【问题标题】:What are some common uses for bitarrays?位数组有哪些常见用途?
【发布时间】:2010-11-16 15:55:39
【问题描述】:

我已经使用新手手册中的位数组做了一个示例。我想知道它们可以用来做什么以及它们有哪些常见的数据结构(假设“数组”是相当松散的术语。)

谢谢。

【问题讨论】:

  • 你在说什么语言?
  • 特别是 C++,或者可能是 D.

标签: data-structures bitarray


【解决方案1】:

Bit array 维基百科文章的Applications 部分列出了几个:

由于其紧凑性,位阵列在空间或效率非常重要的领域有许多应用。最常见的是,它们用于表示一组简单的布尔标志或布尔值的有序序列。

我们在上面提到位数组用于优先级队列,其中索引 k 处的位被设置当且仅当 k 在队列中;例如,Linux 内核就使用了这种数据结构,并且从硬件中的 find-first-zero 操作中受益匪浅。

位数组可用于分配内存页、inode、磁盘扇区等。在这种情况下,可以使用术语位图。但是,该术语经常用于指代光栅图像,每个像素可能使用多个位。

位数组的另一个应用是布隆过滤器,它是一种概率集合数据结构,可以在小空间中存储大集合,以换取小的错误概率。也可以基于接受误报或误报的位数组构建概率哈希表。

位数组及其上的操作对于构建简洁的数据结构也很重要,它使用的空间接近于最小的可能空间。在这种情况下,诸如找到第 n 个 1 位或计算直到某个位置的 1 位的数量等操作变得很重要。

位数组也是检查压缩数据流的有用抽象,这些压缩数据流通常包含占据部分字节或未按字节对齐的元素。例如,单个 8 位字符的压缩霍夫曼编码表示可以是 1 到 255 位长。

在信息检索中,位数组是非常频繁的术语发布列表的良好表示。如果我们计算严格递增整​​数列表中相邻值之间的间隙并使用一元编码对它们进行编码,则结果是一个位数组,当且仅当 n 在列表中时,第 n 个位置具有 1 位。 n 间隙的隐含概率是 1/2n。这也是参数 M 为 1 的哥伦布编码的特例;此参数通常仅在 -log(2-p)/log(1-p) ≤ 1 时选择,或者大致上该术语出现在至少 38% 的文档中。

【讨论】:

    猜你喜欢
    • 2010-10-04
    • 2011-04-16
    • 2014-07-29
    • 2011-01-27
    • 1970-01-01
    • 1970-01-01
    • 2010-09-17
    相关资源
    最近更新 更多