位图(BitMap)
位图
引入:2.给40亿个不重复的无符号整数,没排过序。给一个无符号整数,如何快速判断一个数是否在这40亿个数中。 【腾讯】
思路:如果内存够的话,40亿个整型使用位图存储需要500M左右的空间。
分析:位图只适合判断,查找数据是否存在!
如图解释:
在代码中,使用的是无符号整型数据,32个二进制位,开辟数组时,一个数组元素是一个32位的整型数据,位图的思想,则这32位二进制位就可以表示32位
数,原本一个数组元素只能存一个数据,40亿个数,内存将会吃不消,查找也相当困难,位图使得一个数据用一个二进制位表示,一个无符号整型的数组元素
就可以表示32个数据,40亿个数据,有位图的方式存,会很节省空间,同时查找效率也会得到提高!
以下是代码:
#ifndef _BIT_MAP_H
#define _BIT_MAP_H #include<iostream>
#include<vector>
using namespace std; /*
*一个数据32位,40亿个整数,每个整数需用一位表示,40亿位就完事
*/ class BitMap
{
public:
BitMap()
:_size(0)
{} BitMap(size_t size)
:_size(0)
{
_array.resize((size>>5)+1); //多少个数据,一个数据占32位,加一是至少一个数据
} bool Set(size_t num)
{
size_t index = num >> 5; //计算在哪个数据上
size_t n = num % 32; if (_array[index] & (1 << (31 - n))) //移位问题
{
cout << "有数据" << endl;
return false;
}
else
{
size_t a = 1 << (31 - n);
_array[index] |= a;
++_size;
return true;
}
} bool ReSet(size_t num) //删除一个数 之后重置
{
size_t index = num >> 5;
size_t n = num % 32; if (_array[index] & (1 << (31 - n))) //数存在 删除
{
_array[index] &= (~(1 << (31 - n)));
--_size;
return true;
}
else
{
return false; //不存在这个数
}
} private:
vector<size_t> _array; //数组
size_t _size; //位图中数据个数
}; #endif void Test()
{
BitMap bm(65); for (int i = 0; i < 32; ++i)
{
bm.Set(i);
} bm.ReSet(0);
}
功能分析:
1.将数据写进位图,也就是设置,位图中的哪一个二进制位具体表示哪一个数据,数据个数也是动态开辟,实时保证位数足够;
2.删除数据,也就是重置位图中相应位;
3.查找都是同删除数据,找到在删;
赐教!
位图(BitMap)的更多相关文章
- (算法)位图BitMap
题目: 给定一数组,大小为M,数组中的数字范围为1-N,如果某带宽有限,无法传输该大小的数组,该怎么办? 思路: 通过位图BitMap来压缩数组,将数组中每个数字在bit位上标志,这样就可以将数组大小 ...
- EmguCV从位图(Bitmap)加载Image<Gray,byte>速度慢的问题
先说背景.最近在用C#+EmguCV(其实就是用P/Invoke封闭了OpecCV,与OpenCVDotNet差不多) 做一个视频的东西.视频是由摄像头采集回来的1f/s,2048X1000大小,其实 ...
- [置顶] 程序员必知(二):位图(bitmap)
位图是什么? 位图就是数组,一般来说是bit型的数组,具有快速定位某个值的功能,这种思想有很广泛的应用,比如下边两题: 1 找出一个不在5TB个整数中存在的数 假设整数是32位的,总共有4GB个数,我 ...
- Android学习之位图BitMap
BitMap代表一张位图,扩展名可以是.bmp或者.dib.位图是Windows标准格式图形文件,它将图像定义为由点(像素)组成,每个点可以由多种色彩表示,包括2.4.8.16.24和32位色彩.例如 ...
- [2011-3-9 12:59 ]As3.0中的位图(Bitmap/BitmapData)用法
1.位图使用(模糊)滤镜 //创建一个矩形区域的BitmapData var bmd:BitmapData = new BitmapData(80, 30, false, 0xefefef); //画 ...
- 【索引】位图BitMap索引
位图(BitMap)索引 前段时间听同事分享,偶尔讲起Oracle数据库的位图索引,顿时大感兴趣.说来惭愧,在这之前对位图索引一无所知,因此趁此机会写篇博文介绍下位图索引. 1. 案例 有张表名为ta ...
- redis位图(bitmap)常用命令的解析
描述 bitmap是redis封装的用于针对位(bit)的操作,其特点是计算效率高,占用空间少,常被用来统计用户签到.登录等场景 常用命令及解析 常用命令 setbit key offset va ...
- As3.0中的位图(Bitmap/BitmapData)编程
https://blog.csdn.net/wtuetnsrmh/article/details/12577929
- 位图bitmap应用
所有比特的编号方法是,从低字节的低位比特位开始,第一个bit为0,最后一个bit为 n-1. 比如说,现在有个数组是这样子的,int a[4],那么a[0]的比特位为0--31a[1]的比特位为32- ...
- 使用不安全代码将 Bitmap 位图转为 WPF 的 ImageSource 以获得高性能和持续小的内存占用
在 WPF 中将一个现成的 Bitmap 位图转换成 ImageSource 用于显示一个麻烦的事儿,因为 WPF 并没有提供多少可以转过来的方法.不过产生 Bitmap 来源却非常多,比如屏幕截图. ...
随机推荐
- 关于spring的aop拦截的问题 protected方法代理问题
看到一篇很好的Spring aop 拦截方法的问题, 原文地址. 问题 貌似不能拦截私有方法? 试了很多次,都失败了,是不是不行啊? 我想了一下,因为aop底层是代理, jdk是代理接口,私有方法必 ...
- PyTorch官方中文文档:PyTorch中文文档
PyTorch中文文档 PyTorch是使用GPU和CPU优化的深度学习张量库. 说明 自动求导机制 CUDA语义 扩展PyTorch 多进程最佳实践 序列化语义 Package参考 torch to ...
- 【转载】Apache Spark Jobs 性能调优(二)
调试资源分配 Spark 的用户邮件邮件列表中经常会出现 "我有一个500个节点的集群,为什么但是我的应用一次只有两个 task 在执行",鉴于 Spark 控制资源使用的参数 ...
- webpack3配置字体图标和打包相关问题
webpak配置字体图标有两种方式 一.将字体图标和css打包到同一个文件中. 1.首先需要安装url-loader npm install --save-dev url-loader 2.相关配置如 ...
- POJ 2187 Beauty Contest(凸包,旋转卡壳)
题面 Bessie, Farmer John's prize cow, has just won first place in a bovine beauty contest, earning the ...
- [Lugu3380]【模板】二逼平衡树(树套树)
题面戳我 您需要写一种数据结构来维护一个有序数列,其中需要提供以下操作: 1.查询k在区间内的排名 2.查询区间内排名为k的值 3.修改某一位值上的数值 4.查询k在区间内的前驱(前驱定义为严格小于x ...
- jdbc连接数据库并打印的简单例子
6步连接数据库: import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; impor ...
- c#多线程同步之Semaphore
一提到Semaphore(信号量)的使用,还挺有意思的,它允许多个线程同时访问多个稀有资源,我立马想到银行的ATM机取钱的场景.看下面的代码: ); public static void StartT ...
- Java中常见数据结构Map之HashMap
之前很早就在博客中写过HashMap的一些东西: 彻底搞懂HashMap,HashTableConcurrentHashMap关联: http://www.cnblogs.com/wang-meng/ ...
- Spring Boot会员管理系统——处理文件上传
温馨提示 Spring Boot会员管理系统的中,需要涉及到Spring框架,SpringMVC框架,Hibernate框架,thymeleaf模板引擎.所以,可以学习下这些知识.当然,直接入门的话使 ...