海量数据处理之 Bit-map 详细讲解

本文介绍位图(Bit-map)算法的基本原理及应用场景,包括排序、查询和去重等操作,展示如何通过位操作极大节省存储空间。

现在有这么一个问题:现存在 20 亿个数字,需要知道哪些数字没有出现在里面.这个问题你可能觉得一个 for 循环就能解决。但是有两个问题,第一个就是for循环效率的问题,第二个问题就是 20 亿个数字需要占据的内存空间,例如要存下 20 亿个数字需要多大空间呢?假设使用 int 存储,在 Java 中,int 占 4 字节,1 字节 = 8 位(1 byte = 8 bit,存放 20 亿个数字则需要:(2000000000*4/1024/1024/1024) ≈ 7.45G左右。
面对上面的问题我们肯定不能使用这种方式存储,而使用我们的 Bit-map 就能很好的解决上面的问题。

Bit-map(位图)

简介

Bit-map 的基本思想就是用一个 bit 位来标记某个元素对应的 Value,而 Key 即是该元素。由于采用了 bit 为单位来存储数据,因此在存储空间方面,可以大大节省。(重点:节省存储空间

Bit-map 是一种数据结构,可用于记录大量的 0-1 状态,在很多地方都会用到,比如 Linux 内核(如 inode,磁盘块)、Bloom Filter 算法等,其优势是可以在一个非常高的空间利用率下保存大量 0-1 状态。

我们在上面也说过了,假如要对于 20 亿个 int 数据进行处理呢?

  • 如果每个数字用 int 存储,那就是 20 亿个 int,占用的空间约为 (2000000000*4/1024/1024/1024)≈7.45G
  • 如果能够采用 bit 储,20 亿个数就是 20 亿位,占用的空间约为 (2000000000/8/1024/1024/1024)≈0.233G,那么在存储空间方面可以大大节省。
从上面的对比中立马高下立判,已经无需多言。

那么,问题来了,如何表示一个数呢?

上面也说了,Bit-map 用于记录大量的 0-1 状态,每一位表示一个数,0 表示不存在,1 表示存在,这正符合二进制。

下面我们来看看具体存储:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值