海量数据查找一个数是否存在
来源:互联网 发布:安卓网络嗅探器怎么用 编辑:程序博客网 时间:2024/04/30 01:12
问题:给定一个集合,集合中包含50亿级以上的整数(无序,不重复),给定一个算法,查找该集合中是否存在某个数(内存限制1G)
Answer:
(1)40亿数据全部放入内存中,所需要的内存数:
40*10^8*4B=16G
这个明显无法一次性装入内存中。但是,如果我们用计算机中的一位来表示某个数出现与否,出现为1,不出现为0, 就可以减少内存使用量。比如在一块连续的内存区域,15出现,则将第15位置1。 这个就是Bit Map算法,此时所需要的内存:
40*10^8b=5*10^8B=0.5G
符合要求,我们遍历一遍文件,将出现的数对应的那一位置1,然后遍历这些位, 找到第一个有0的位即可,这一位对应的数没有出现。放置完毕后,查看查找数位的数字为0,则返回false,为1,则返回true。
(2)我们可以将这么多的数据分成许多块, 比如每一个块的大小是1000,那么第一块保存的就是0到999的数,第2块保存的就是1000 到1999的数……实际上我们并不保存这些数,而是给每一个块设置一个计数器。 这样每读入一个数,我们就在它所在的块对应的计数器加1。处理结束之后, 我们找到一个块,它的计数器值小于块大小(1000), 说明了这一段里面一定有数字是文件中所不包含的。然后我们单独处理这个块即可。
参考文章:http://www.cricode.com/733.html
0 0
- 海量数据查找一个数是否存在
- 查找矩阵中是否存在一个数
- 从海量数据中查找一个数
- 二维数组中查找一个数是否存在
- 二维数组中查找是否存在一个数
- 腾讯面试题:海量数据中查找一个数
- 腾讯面试题:海量数据中查找一个数
- 位图法--解决海量数据问题(查找是否存在,不重复数据)
- 查找一个文件是否存在
- 给定一个数组,从中查找是否存在两个数的和等于一个给定的x
- 在一个按行列递增的二维数组中查找一个数是否存在
- 面试题-查找一个数组是否存在数目大于一半的数
- 大数据查找------如何判断40亿个无符号整数是否存在某个数(无排序)
- 查找一个文件是否存在 01
- lua实现判断一个组数据中是否超过五不同数的存在
- 腾讯面试题----判断一个数是否存在(大数据方面)
- 查找一个数是否存在于一个数组中。该数组分两段有序,第一段的数都大于第二段的数。
- 二维数组中查找某个数是否存在
- 梯度下降法 gradient descent
- effective stl 第45条:正确区分count/find/binary_search/lower_bound/upper_bound/equal_range
- settimeout()和setinterval区别
- SwipeRefreshLayout嵌套ScrollView包裹复杂头布局和RecyclerView
- Ranges
- 海量数据查找一个数是否存在
- 2016.10.5初中部上午NOIP普及组比赛总结
- Google最新VR(sdk的诞生)
- 红黑树
- Android中的手势识别
- HDU3727 Jewel (主席树)
- 带修改的主席树
- 程序员笔记 To Be A Programmer
- 贪心法,贪心策略