bitmap是一种广泛使用的数据结构,主要用在数据压缩,索引等方面,它最小单位为位,即01结构。通常情况下逻辑状态为是非二值状态时,bitmap比较常用。
如:腾讯面试题:给40亿个不重复的unsigned int的整数,没排过序的,然后再给一个数,如何快速判断这个数是否在那40亿个数当中?
显然可以发现,需要判断给出的整数是否存在,是一个二值逻辑,可以用bitmap来解决。我们可以用bitmap来建立一个hashmap,消耗O(N)的预处理时间,去实现O(1)的查询。我们发现40亿刚好可以用unsigned来表示.
如何构造hash函数,其实很简单,1)确定hashmap的容量,由于整数类型为unsigned int,容量unsigned MAXI=(1<<32)-1;接着建立数组int a[MAXI/32+1]. 2)对于每个整数i,i/32对应数组a中的位置,i%32对于a[i/32]这个32位二进制的位置。
举个例子:对于号码 89256,由于89256 mod 32=2789…8,这样我们应该置a[2789]中32位字符串的第8位(从低位数起)为1.
#include<iostream> using namespace std; #define WORD 32 #define SHIFT 5 ////移动5个位,左移则相当于乘以32,右移相当于除以32取整 #define MASK 0x1F //16进制下的31 #define N 10000000 int bitmap[1+N/WORD]; /* * 置位函数——用"|"操作符,i&MASK相当于mod操作 * m mod n 运算,当n = 2的X次幂的时候,m mod n = m&(n-1) */ void set(int i) { bitmap[i>>SHIFT]|=(1<<(i&MASK)); } /* 清除位操作,用&~操作符 */ void clear(int i) { bitmap[i>>SHIFT]&=~(1<<(i & MASK)); } /* 测试位操作用&操作符 */ int test(int i) { return bitmap[i>>SHIFT]&(1<<(i&MASK)); } int main() { //unsigned i; //i=(1<<32)-1; //cout<<i<<endl; return 0; }
发表评论
-
图的割点tarjan---zoj_1119
2011-10-24 23:00 1231http://acm.zju.edu.cn/on ... -
大数计算模板---zoj_3447
2011-10-24 16:47 948http://acm.zju.edu.cn ... -
BFS与双向BFS---zoj_1505
2011-10-09 17:14 1642http://acm.zju.edu.c ... -
静态treap+线段树---zoj_2112
2011-09-29 23:06 1708http://acm.zju.edu ... -
NIM博弈游戏,SG函数---zoj_3084,zoj_2083
2011-09-23 23:00 1316Nim游戏是两个人进行的游戏有如下规则: ... -
struct数据对齐与#pragma pack(n)
2011-09-14 16:38 1099对struct数据对齐与#pragma pac ... -
多重背包--zoj_2156
2011-09-14 11:10 864首先介绍经典的三种背包问题,0-1背包,完全 ... -
模式串匹配---KMP
2011-08-31 20:49 1277朴素的的模式串匹配算法通常要在向前移动文本指针 ... -
八数码问题(A*&&双向BFS)---zoj_1217
2011-08-30 22:13 1664题目地址:http://acm.zju.edu.cn/onli ... -
ac自动机以及它上面的DFA
2011-08-08 23:04 2479AC自动机(Aho-Corasick)主要用 ... -
二分图最大匹配(匈牙利算法)--zoj1516,1525,2223
2011-07-20 22:36 1185二分图G(E,V)将点集合V分成两个部分L,R ... -
网络最大流(EK)---zoj_1734
2011-07-19 16:34 2130网络最大流是图论中的一个典型问题,为了精确的定 ... -
trie和前缀检查---zoj_2876
2011-07-13 23:03 865trie树是一种多叉树,广泛用于字典检索。如 ... -
LAC和RMQ的转化---zoj_3195
2011-07-12 22:35 1072我擦。。纠结了好久啊,从SF到TLE,先总结2 ... -
LAC的tarjan(离线)算法---zoj_1141
2011-07-08 17:52 1658LCA就不解释了,这里主要再次复习一下LC ... -
笛卡尔树以及treap---zoj_2243
2011-07-07 15:52 2838zoj_2243笛卡 ... -
中缀表达式的转化---zoj_2483,zoj_3025
2011-07-04 18:54 1140在我们的日常生活中,中缀表达式是最常用的计算表达方式 ... -
STL---priority_queue zoj_2212,zoj_2724,zoj_3230
2011-06-28 17:50 1263priority_queue顾名思意是优先 ... -
STL---sort
2011-06-25 16:39 806引用:http://blog.csdn.net/rattl ... -
线段染色,矩形切割,离散化---zoj_2301,zoj_1128
2011-06-24 22:32 1364染色问题:在一维坐标轴上(最右端为M),有N ...
相关推荐
本文作者---刘建华博士详细的介绍了位图bitmap图像数据文件格式;在此基础之上,实现bitmap图象数据文件的读写编程。希望对位图编程者有所帮助,互通有无... “A bitmap is a graphical object used to create, ...
sa-jdi-1.8.0.jar 位图BitMap
使用MFC读取24位的位图! 带测试方法,改为灰度图!
做图像处理时的源文件一般要用无损的图像文件格式,位图(BitMap)是windows系统下可存储无压缩图像的文件格式。要实现位图的读取和存储,首先要明白文件的存储数据结构。位图由四个部分依序组成:BITMAPFILEHEADER...
主要介绍了PHP使用redis位图bitMap 实现签到功能,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
bitmap switcher 位图转换 32位/24位/16位/8位/4位/1位 注:会提示不安全。请加入信任!
c语言实现的位图bitmap,简单易用,如有更多需要,可以方便添加新的操作。
Bitmap位图旋转范例 一个完整工程
一个DIB (位图)bitmap封装类 欢迎大家下载哈
Bitmap位图缩放范例 一个完整的工程 详细教你完成一张图片的缩放
对设备无关位图(DIB)进行读取,保存,显示。
2.使用到强大的bitmap,Canvas,Paint 等绘制图片技术点。 3.参考于抖音的分享界面,支持分享图片,链接。 ###欢迎热心的读者给star:sparkles::sparkles:,你的鼓励是我前进的动力:growing_heart::growing_heart:##### ...
主要介绍了c# 如何实现位图算法(BitMap),文中讲解非常细致,帮助大家更好的理解和学习,感兴趣的朋友可以了解下
纯C++代码写文件的形式生成Bitmap。对于理解Bitmap的格式有着非常好的效果。
1.windows位图bitmap(即bmp文件)的结构和调色版的概念。 2.图象的平移,旋转,镜象变换,转置变换,放缩。 3.图象的平滑(去噪声),锐化。 4.图象的半影调,抖动技术。 5.图象的直方图修正,彩色变换。 6....
Transparent Bitmap实现透明的位图(7KB)
数字图形作业,图象的几何变换,Windows位图(Bitmap)和调色板(Palette)
(1)windows位图bitmap(即bmp文件)的结构和调色版的概念; (2)图象的平移、旋转、镜象变换、转置变换、放缩; (3)图象的平滑(去噪声)、锐化; (4)图象的半影调、抖动技术; (5)图象的直方图修正、彩色变换; (6)图象...
(1) windows位图bitmap(即bmp文件)的结构和调色版的概念; (2) 图象的平移、旋转、镜象变换、转置变换、放缩; (3) 图象的平滑(去噪声)、锐化; (4) 图象的半影调、抖动技术; (5) 图象的直方图修正、彩色变换; (6)...