数据结构-BitMap

Bitmap是一种使用位来标记数据存在的算法,尤其适合处理大数据,能有效节省空间并提高查询速度。当面临大量整数存储及查询需求时,对比传统数组,Bitmap提供了更优的解决方案。例如,在1亿个数据的场景下,通过将每个整数映射到位,可以显著减少空间占用。此外,Bitmap还可用于大数据排序,前提是数据无重复。
摘要由CSDN通过智能技术生成

BitMap是用bit位来记录数据存在与否的一种算法。在处理大数据时,可以节省大量空间,速度也很快。

问题:已知有n个整数,这些整数的范围是[0,100],请你设计一种数据结构,使用数组存储这些数据,并提供两种方法, 分别是addMember和isExist.下面是这种数据结构的类的定义。

思路1:用数组存储,查找是否存在需要for循环n, 有n个数那么复杂度为O(n)

思路2: 用数组存储,添加数据则arr[index] = 1, 这样查找是否存在有n个数赋值度为O(1),,直接用过数组下标判断是否为1

思路3:加入有1亿个数呢, 上面思路2则会造成空间浪费, 我们可以用过1个整数表示32字节,每个字节则可以表示一种状态,这样空间上缩小了1/32

class BitMap {
    constructor(size) {
        this.bitArr = new Array(size)
        // 初始化操作
        this.bitArr.fill(0)
    }

    /**
     * 添加一个数据
     * @param {*} data 
     */
    addMember(data) {
        // 1. 计算索引
        let cur_index = Math.floor(data/32)
        // 2. 计算传入的data在当前索引中位数(1个索引可以表示32位)
        let bit_index = data % 32
        // 3. 计算加入后的数据,并存储
        this.bitArr[cur_index] = this.bitArr[cur_index] | 1<<bit_inde
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值