比特阵列有哪些常见用途?

时间:2009-08-04 12:17:49

标签: data-structures bitarray

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

感谢。

1 个答案:

答案 0 :(得分:2)

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

  

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

     

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

     

位阵列可用于分配存储器页面,索引节点,磁盘扇区等。在这种情况下,可以使用术语位图。但是,该术语经常用于表示光栅图像,每个像素可能使用多个位。

     

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

     

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

     

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

     

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