美文网首页
位图法介绍

位图法介绍

作者: lintong | 来源:发表于2015-03-13 09:52 被阅读927次

一、定义
位图法就是bitmap的缩写。所谓bitmap,就是用每一位来存放某种状态,适用于大规模数据,但数据状态又不是很多的情况。通常是用来判断某个数据存不存在的。在STL中有一个bitset容器,其实就是位图法,引用bitset介绍:

A bitset is a special container class that is designed to store bits (elements with only two possible values: 0 or 1,true or false, ...).The class is very similar to a regular array, but optimizing for space allocation: each element occupies only one bit (which is eight times less than the smallest elemental type in C++: char).Each element (each bit) can be accessed individually: for example, for a given bitset named mybitset, the expression mybitset[3] accesses its fourth bit, just like a regular array accesses its elements.

数据结构

unsigned int bit[N];

在这个数组里面,可以存储 N*sizeof(int)*8个数据,但是最大的数只能是
N*sizeof(int)*8-1

相关操作

写入数据

定义一个数组: unsigned char bit[8*1024];这样做,能存 8K*8=64K 个 unsigned short 数据。bit 存放的字节位置和位位置(字节0~8191,位 0~7 )比如写1234,字节序:1234/8 = 154; 位序: 1234 &0b111 = 2 ,那么 1234 放在 bit 的下标 154 字节处,把该字节的 2 号位( 0~7)置为 1

字节位置: int nBytePos =1234/8 = 154;
位位置:   int nBitPos = 1234 & 7 = 2;
比如写入 1236 ,
字节位置: int nBytePos =1236/8 = 154;
位位置:   int nBitPos = 1236 & 7 = 4

// / 把数组的 154 字节的 4 位置为 1  
val = 1<<nBitPos;  
arrBit[nBytePos] = arrBit[nBytePos] |val;  // 再写入 1236 得到arrBit[154]=0b00010100  

代码实现

#define SHIFT 5    
#define MAXLINE 32    
#define MASK 0x1F    
void setbit(int *bitmap, int i){    
    bitmap[i >> SHIFT] |= (1 << (i & MASK));    
}  
读指定位
bool getbit(int *bitmap1, int i){    
   return bitmap1[i >> SHIFT] & (1 << (i & MASK));    
}   

位图法的应用

  • 使用位图法判断整形数组是否存在重复遍历数组,一个一个放入bitmap,并且检查其是否在bitmap中出现过,如果没出现放入,否则即为重复的元素。

相关文章

  • 位图法介绍

    一、定义位图法就是bitmap的缩写。所谓bitmap,就是用每一位来存放某种状态,适用于大规模数据,但数据状态又...

  • 位图法

    引言 在我们正式开始之前,我们先来看两个问题1、从10亿个正整数中找出最大的前100个数(限制在1G左右内存,充足...

  • 高效压缩位图RoaringBitmap的原理与应用

    目录 位图法简述 RoaringBitmap的思路 Container原理ArrayContainerBitmap...

  • 海量数据处理问题

    常见的方法有Hash法,位图法,Bloom-filter法、数据库优化法、倒排索引法、外排序法、Trie树、堆、双...

  • 海量数据下的去重和查重(二):布隆过滤器

    在上篇文章海量数据下的去重和查重(一):BitMap位图法的最后,我们说到位图法缺点,是其所占空间随集合内最大元素...

  • 前端也有算法 - 位图法

    一不小心就看到位图法,引起了我的兴趣。简单说下位图法(bitmap),用每一个bit来存放某个状态,常用于正整数类...

  • Linux中的位图

    什么是位图 位图(bitmap)的定义 维基百科中关于位图的介绍: 一种数据结构,代表了有限域中的稠集(dense...

  • APP开发实战89-位图介绍

    23.1位图介绍 位图,也叫做点阵图,删格图象,像素图,简单的说,就是最小单位由象素构成的图,缩放会失真。构成位图...

  • Flutter 之 FadeInImage (100)

    FadeInImage 占位图 1. FadeInImage FadeInImage属性介绍placeholder...

  • 位图索引&布隆过滤器

    位图索引 位图法就是Bitmap的缩写。所谓Bitmap,就是用每一位来存放某种状态,适用于大规模数据,但数据状态...

网友评论

      本文标题:位图法介绍

      本文链接:https://www.haomeiwen.com/subject/ztebxttx.html