目录
前言:
位图采用的是哈希表的思想,哈希表的映射层面是在字节上,而位图的映射层面就是在bit位上。由于bit位所能展现的信息无非只有‘1’和‘0’,所以位图相比于哈希表,前者的功能比较单调,只能判断数据存在与否,若数据存在则bit位置为‘1’,不存在则为‘0’,因此位图使用的场景也不允许有重复数据的出现。
1、位图的使用
举例,现有数组{1,4,5,9,6};则该数组在哈希表和位图下的映射关系如下图所示:

如上图所示,若想在位图中找到对应的映射位置,只需要对该数据进行‘/’‘%’的操作即可,比如:要计算数据9在第几个bit位上,则先9/8=1,表示在下标为1的元素上,再用9%8=1,表示在该元素的下标位1的bit位上(也就是9号bit位)。
2、位图实现
那么如何将位图中的bit位置为‘0’或‘1’呢,可以用一个数字1作为被操作对象,1的二进制序列的最低位是1,其余是0。比如上述的数据9的映射位置是在第二个元素的下标为1的bit位(也就是第二个bit),那么只需要把1左移一个bit位,则移动后1的二进制序列为000..00010(ps:当然此时二进制序列表示的不是1了),然后用该二进制序列直接与第二个元素相或(‘|’),这样就可以把该映射位置的bit位从‘0’变为‘1’了。
具体操作如下:


本文详细介绍了位图的工作原理,它如何利用哈希表思想在位级别操作,以及与哈希表的区别,特别强调了位图在节省空间和处理特定场景的优势。还提供了位图的代码实现,以及在查找单次出现数据的应用实例。
最低0.47元/天 解锁文章
1413

被折叠的 条评论
为什么被折叠?



