计算机存储单位的常用知识
2^30大约等于10亿
1byte=8bit--一个字节等于八个比特位
左移操作符<<表示将值从底地址到高地址的方向移动。
bitset<-1>,开了2^32个bit==512MB==1GB
位图概念
- 面试题
给40亿个不重复的无符号整数,没排过序。给一个无符号整数,如何快速判断一个数是否在
这40亿个数中。【腾讯】
- 直接方法
- 遍历,时间复杂度O(N)
- 排序(O(NlogN)),利用二分查找: logN
- 缺点: 数据量大,内存不够
- 位图解决
- 数据是否在给定的整形数据中,结果是在或者不在,刚好是两种状态,那么可以使用一
个二进制比特位来代表数据是否存在的信息,如果二进制比特位为1,代表存在,为0
代表不存在。比如:
- 数据是否在给定的整形数据中,结果是在或者不在,刚好是两种状态,那么可以使用一
2. 位图概念
所谓位图,就是用每一位来存放某种状态,适用于海量数据,数据无重复的场景。通常是用来判断某个数据存不存在的。
位图操作的实现
位图的应用
- 快速查找某个数据是否在一个集合中
- 创建一个bitset,遍历将集合的数据存储到bitset中
- 在将该数据调用test即可
- 给定100亿个整数,设计算法找到只出现一次的整数?
- 创建两个bitset,可以有00,01,10,11四种状态
- 遍历整数区间,01的进行打印
- 给两个文件,分别有100亿个整数,我们只有1G内存,如何找到两个文件交集?
- 分别开两个bitset<-1>,刚好1G
- 读取文件1的数据到bits1中,读取文件2的数据到bits2中
- 在对遍历2^32-1区间的整数,如果test()函数返回都是真,保存该i的值到文件中
- 位图应用变形:1个文件有100亿个int,1G内存,设计算法找到出现次数不超过2次的所有整数
位图优缺点总结