螺竹编程
发布于 2024-05-26 / 9 阅读
0

数据结构/位图:位图介绍

位图介绍

位图(Bit Map)是一种基于二进制位的数据结构,用于表示一组数的集合或某些状态的存在性。在位图中,每个数或状态被映射为位图中的一个二进制位,如果该数或状态存在则对应的位为1,否则为0。位图的实现依赖于位运算,可以提高空间利用率和查询效率。

位图通常用于解决大规模数据存储和查询问题。比如,某些场景下需要对一个非常大的数字集合进行查找操作,如果使用传统的数组或哈希表等数据结构,需要占用大量的内存空间,而使用位图则可以大大节省空间。此外,位图还可以用于判断某些状态的存在性,比如网络中IP地址的存储和查找,常用于防火墙和路由器等设备中。

位图的基本操作包括设置位、清除位和查询位等。设置位操作将对应的位设置为1,清除位操作将对应的位设置为0,查询位操作返回对应的位的值。位图的实现可以使用一个或多个整型数组来表示,每个整型数组可以表示固定数量的位,一般为32位或64位。

位图的优点在于占用的内存空间比较小,查询效率比较高,时间复杂度为O(1)。缺点在于只能处理非负整数集合,且集合元素的范围不能太大,否则会占用过多的内存空间。此外,位图的实现比较依赖底层硬件,不同的硬件平台可能会有不同的实现方式和效率。

Java代码实现

BFS

public class Bitmap {
    
    private byte[] bytes;
    private int length;
    public Bitmap(int length){
        this.length=length;
        bytes=new byte[length%8==0?length/8:length/8+1];
    }
    public boolean get(int index){
        int i=index&7;
        return ((bytes[index] >> 3) & (01111111 >>> (7 - i)) >> i) != 0;
    }
    public void set(int index, boolean value){
        if(value){
            bytes[index>>3] |= 1<<(index&7);
        }else{
            bytes[index>>3] &= ~(1<<(index&7));
        }
    }
    
}