给40亿个不重复的无符号整数,没排过序。给一个无符号整数,如何快速判断一个数是否在这40亿个数中。 【腾讯】
来源:互联网 发布:知乎live 编辑:程序博客网 时间:2024/06/05 11:02
40亿占多少个字节:4G
10个亿需要1G
一个整型需要4个字节,40亿个则需要16G
由于如果我们直接使用这种方式去存储需要16个G显然这是不可能的,因此我们需要用到下面的方式去存储,采用位图
我们用一个Bit位去标识一个数存在还是不存在
我们都是到一般字节是存储的最小单位
那么一个字节有8个位,巧妙的利用这一点来实现我们的位图
比如10我们先确定他存在第几个字节,再去确定它在第几个字节的第几个位上
如果是40亿个整型,那么我们大概实际上需要多少个字节?
我们由于一个整型采用一个字节上的一个位就可以存储。
#include<iostream>#include<stdlib.h>#include<vector>using namespace std;class BitMap{public: BitMap(size_t range) { _bitmap.resize(range >> 3); } void Set(int num) { int index = num >> 3;//确定在第几个字节 int pos = num % 8; _bitmap[index] |= 1 << pos; } void Reset(int num) { int index = num >> 3; int pos = num % 8; _bitmap[index] &= ~(1 << pos); } bool Test(int num) { int index = num >> 3; int pos = num % 8; return _bitmap[index] &= 1 << pos; }protected: vector<char> _bitmap;};int main(){ BitMap bm(-1); bm.Set(10); bm.Set(10555); bm.Set(12222); bm.Set(16666); bm.Reset(10); cout<<bm.Test(10)<<endl; cout<<bm.Test(10555)<<endl; cout<<bm.Test(12222)<<endl; cout<<bm.Test(16666)<<endl; system("pause"); return 0;}
很明显我们的位图的确是节省了大量的空间,但是位图也有它的缺点,它只能处理整型的数据。
阅读全文
1 0
- 给40亿个不重复的无符号整数,没排过序。给一个无符号整数,如何快速判断一个数是否在这40亿个数中。 【腾讯】
- 面试题:给40亿个不重复的无符号整数,没排过序,给一个无符号整数如何快速判断这个数是否在这40亿个数中
- 面试题--给40亿个不重复的,没有排过序,给一个无符号整数,如何判断这个数在这40亿个数中
- 腾讯面试题:给40亿个不重复的unsigned int的整数,没排过序的,然后再给一个数,如何快速判断这个数是否在那40亿个数当中?
- 腾讯面试题:给40亿个不重复的unsigned int的整数,没排过序的,然后再给一个数,如何快速判断这个数是否在那40亿个数当中?
- 腾讯面试题:给40亿个不重复的unsigned int的整数,没排过序的,然后再给一个数,如何快速判断这个数是否在那40亿个数当中?
- 给40亿个不重复的unsigned int的整数,没排过序的,然后再给一个数,如何快速判断这个数是否在那40亿个数当中?
- 给40亿个不重复的unsigned int的整数,没排过序的,然后再给一个数,如何快速判断这个数是否在那40亿个数当中?
- 给40亿个不重复的unsigned int的整数,没排过序的,然后再给一个数,如何快速判断这个数是否在那40亿个数当中?
- 【面试题】给40亿个无符号不重复且没排过序的数,查找一个数是否在这40亿个数之中
- 位图:【面试题】给40亿个无符号不重复且没排过序的数,查找一个数是否在这40亿个数之中
- 给40亿个无符号不重复且没排过序的数,查找一个数是否在这40亿个数之中
- 快速求一个32位无符号整数二进制中为1的个数
- 快速求一个32位无符号整数二进制中为1的个数
- 在一个无符号整数中翻转位的顺序
- 判断一个无符号型整数是否是2^n
- 大数据查找------如何判断40亿个无符号整数是否存在某个数(无排序)
- 判断一个无符号整数是不是2的幂
- 快速迭代的需要
- C++中的max_element()与min_element()
- 使用流式文件读取或写入图片(jpg,png等)或视频(mp4)或音频(mp3)文件
- 类图
- yum常用操作
- 给40亿个不重复的无符号整数,没排过序。给一个无符号整数,如何快速判断一个数是否在这40亿个数中。 【腾讯】
- zoj 1019
- XML简介
- Activity
- 如何安装PythonMagick
- DTD(Document Type Definition) 简介
- javascript今日知识总结
- URAL
- TCP的连接建立(三次握手)