位图法和布隆过滤器

大数据量的排序和判重,可以用位图法和布隆过滤器

位图法:

将数值按顺序分布于二进制位的空间

实现位图法非常容易,只需要一些基本的位操作将要存储的数值转化到相应的数组位置上去

基本操作是s.get(n) == ((arr[n/len] & (1<<(n%len))) != 0),其中len表示使用的存储类型长度,比如int是32,byte是8

arr[n/len]是定位到存储该数使用的二进制位值

(1<<(n%len))表示该值的二进制表达位,相与就能确定该位是否为0,类似于判断奇偶用n&1!=0

代码:

package Bitmap;

public class Bitmap {
    int[] bitArray;
    //掩码,用来代替求余操作
    int INT_MASK=(1<<5)-1;
    Bitmap(int max){
        //传入最大值确定bitmap尺寸,>>5表示/32
        bitArray=new int[(max>>5)+1];
    }
    //s.get(n) == ((bytes[n/8] & (1<<(n%8))) != 0)
    public boolean get(int x){
        return (bitArray[x>>5] & (1 << (x&INT_MASK)))!=0;
    }
   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值