博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
位图原理、代码实现及应用实例
阅读量:2490 次
发布时间:2019-05-11

本文共 1229 字,大约阅读时间需要 4 分钟。

位图的原理:

  • 在位图中采用比特位表示对应的元素存在或者不存在
    0:不存在
    1:存在
  • 例如一个int整数有32个比特位可以表示0-31个整数。

在这里插入图片描述

  • 再举一个例子

    存入的数字为8988
    首先: 8988/32 = 280
    其次: 8988%32 = 28

  • 再来一个例子

    存入的数字16
    首先: 16/32 = 0
    其次: 16%32=16

位图的应用

给两个文件,分别有100亿个整数,我们只有1G内存,如何找到两个文件交集。

  • 将第一个文件的数据分成1000份存储到位图里,再判断第二份文件中的数据是否在位图中。

源码

  • 测试代码
#include 
#include "BitMap.h"int main(){ BitMap bm; BMInit(&bm,100000); int i, j; // 插入数据 for (i = 0; i < 100000; i++) { BMSetOne(&bm, i); } // 判断数字是否在位图里面 for (j = 990; j < 100010; j++) { if (BMTestOne(&bm, j) != 0) { printf("数字 %d存在于位图, 返回值: %d\n", j, BMTestOne(&bm, j)); } else { printf("数字 %d不存在于位图, 返回值: %d\n", j, BMTestOne(&bm, j)); } } return 0;}
  • 运行结果
数字 99993存在于位图, 返回值: 33554432数字 99994存在于位图, 返回值: 67108864数字 99995存在于位图, 返回值: 134217728数字 99996存在于位图, 返回值: 268435456数字 99997存在于位图, 返回值: 536870912数字 99998存在于位图, 返回值: 1073741824数字 99999存在于位图, 返回值: -2147483648数字 100000不存在于位图, 返回值: 0数字 100001不存在于位图, 返回值: 0数字 100002不存在于位图, 返回值: 0数字 100003不存在于位图, 返回值: 0数字 100004不存在于位图, 返回值: 0数字 100005不存在于位图, 返回值: 0数字 100006不存在于位图, 返回值: 0数字 100007不存在于位图, 返回值: 0数字 100008不存在于位图, 返回值: 0数字 100009不存在于位图, 返回值: 0

位图占用的空间大小

unsignedint 的取值范围是0到2^32-1=4 294 967 296-1(大约40亿)
申请了约2^32/8=512M的内存

  • 优质参考:

转载地址:http://coorb.baihongyu.com/

你可能感兴趣的文章
查找代码错误.java
查看>>
vc获取特殊路径(SpecialFolder)
查看>>
单例模式
查看>>
int(3)和int(11)区别
查看>>
201521123061 《Java程序设计》第十一周学习总结
查看>>
代码小思考
查看>>
Unity中的销毁方法
查看>>
ceph删除pool提示(you must first set the mon_allow_pool_delete config option to true)解决办法...
查看>>
2016-7-15(1)使用gulp构建一个项目
查看>>
CSS 设计指南(第3版) 初读笔记
查看>>
markdown学习/mou
查看>>
CentOS 搭建 LAMP服务器
查看>>
记录在Spring-Boot中使用Fegin调用RESTfull的PATCH方法设置
查看>>
Php和httpd.conf的配置
查看>>
正则10-18
查看>>
Java并发编程:volatile关键字解析
查看>>
4 sum
查看>>
trapping rain water
查看>>
集合习题之列出有限集合所有子集
查看>>
hdu1728--------坑爹啊
查看>>