一个文件中有40亿个整数,每个整数为四个字节,内存为1GB,写出一个算法:求出这个文件里的整数里不包含的一个整数
2014-08-14 21:27
295 查看
4个字节表示的整数,总共只有2^32约等于4G个可能。
为了简单起见,可以假设都是无符号整数。
分配500MB内存,每一bit代表一个整数,刚好可以表示完4个字节的整数,初始值为0。基本思想每读入一个数,就把它对应的bit位置为1,处理完40G个数后,对500M的内存遍历,找出一个bit为0的位,输出对应的整数就是未出现的。
算法流程:
1)分配500MB内存buf,初始化为0
2)unsigned int x=0x1;
for each int j in file
buf=buf|x<<j;
end
(3) for(unsigned int i=0; i <= 0xffffffff; i++)
if (!(buf & x<<i))
{
output(i);
break;
}
以上只是针对无符号的,有符号的整数可以依此类推。
为了简单起见,可以假设都是无符号整数。
分配500MB内存,每一bit代表一个整数,刚好可以表示完4个字节的整数,初始值为0。基本思想每读入一个数,就把它对应的bit位置为1,处理完40G个数后,对500M的内存遍历,找出一个bit为0的位,输出对应的整数就是未出现的。
算法流程:
1)分配500MB内存buf,初始化为0
2)unsigned int x=0x1;
for each int j in file
buf=buf|x<<j;
end
(3) for(unsigned int i=0; i <= 0xffffffff; i++)
if (!(buf & x<<i))
{
output(i);
break;
}
以上只是针对无符号的,有符号的整数可以依此类推。
相关文章推荐
- 一个文件中有40亿个整数,每个整数为四个字节,内存为1GB,写出一个算法:求出这个文件里的整数里不包含的一个整数。
- 一个文件中有40亿个整数,每个整数为四个字节,内存为1GB,写出一个算法:求出这个文件里的整数里不包含的一个整数
- 9.10扩展性与存储限制(二)——给定一个输入文件,包含40亿个非负整数。产生一个不在该文件中的整数。内存限制:1GB
- 扩展性与存储限制(二)——给定一个输入文件,包含40亿个非负整数。产生一个不在该文件中的整数。内存限制:1GB
- 给定一个输入文件,包含40亿个非负整数。产生一个不在该文件中的整数。内存限制:1GB
- 一个文件中有40亿个整数,求出这个文件里的整数里不包含的一个整数
- 一个文件含有40亿个非负整数,使用1GB内存,找到一个不在该文件中的整数
- 在一个包含40亿个随机排列的32位整数的顺序文件中(注意随机排序),找出一个不再文件中的32位整数
- 经典算法 | 给定n个集合,求解一个范围,使得这个范围包含每个集合至少m个数
- 一个文件含有40亿个非负整数,使用10MB内存,找到一个不在该文件中的整数
- git是一种分布式代码管理工具,git通过树的形式记录文件的更改历史,比如: base'<--base<--A<--A' ^ | --- B<--B' 小米工程师常常需要寻找两个分支最近的分割点,即base.假设git 树是多叉树,请实现一个算法,计算git树上任意两点的最近分割点。 (假设git树节点数为n,用邻接矩阵的形式表示git树:字符串数组matrix包含n个字符串,每个字符串由字符'0
- 给定一个最多包含40亿个随机排列的32位整数的顺序文件,找出一个不在文件中的32位整数
- 给定一个最多包含40亿个随机排列的32位整数的顺序文件,找出一个不在文件中的32位整数。
- 【腾讯面试题】求出这个文件里的整数里不包含的一个整数
- 整数数组中,每个元素均出现两次,除了一个元素例外,如何找出这个元素?能否设计一个线性时间的算法,且不需要额外的存储空间?
- 给定a、b两个文件,各存放50亿个url,每个url各占用64字节,内存限制是4G,如何找出a、b文件共同的url?
- 反转一个字节 和 判断32位整数二进制中1的个数 的算法
- 在一个文件中有 10G 个整数,乱序排列,要求找出中位数。内存限制为 2G。
- 三种算法获取一个整数的每个数字
- (转贴)反转一个字节 和 判断32位整数二进制中1的个数 的算法