![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
大数据
Big Data
GeeksforGeeks
没有什么比技术更好的认证
展开
-
40亿个非负整数中找到出现两次的数和所有数的中位数
32位无符号整数的范围是0 ~ 4 294 967 295 现在有40亿个无符号整数,可以使用最多1GB的内存,找出所有出现了两次的数。补充问题: 可以使用最多10MB的内存,怎么找到40亿个整数的中位数?原问题: 可以用 bit map 来表示数出现的情况。申请一个长度为 4 294 967 295 × 2 的bit类型的数组bitArr,1B占用8个bit,所以长度为 4 294 9...原创 2020-02-19 16:00:30 · 441 阅读 · 0 评论 -
找到100亿个URL中重复的URL及搜索词汇的TopK问题
有一个包含100亿个URL的大文件,假设每个URL占用64B,请找出其中所有重复的URL。补充问题: 某搜索公司一天的用户搜索词汇是海量的(百亿数据量),请设计一种求出每天热门Top100的可行办法。解题前首先要明确,资源上的限制,包括内存、计算时间等要求。原问题:① 将100亿的大文件通过哈希函数分配到100台机器上,哈希函数的性质决定了同一条URL不可能分给不同的机器;② 然后每...原创 2020-02-19 15:59:33 · 596 阅读 · 0 评论 -
40亿个非负整数中找到未出现的数
32位无符号整数的范围是0 ~ 4 294 967 295,现在有一个正好包含40亿个无符号整数的文件,所以在整个范围中必然有未出现过的数。怎么找到所有未出现过的数?要求: 可以使用最多1GB的内存。进阶: 内存限制10MB,但是只用找到一个没出现过的数即可。常规方法:假设用哈希表来保存出现过的数,那么如果40亿个数都不同,则哈希表的记录数为40亿条,存一个32位整数需要4B,所以最差情况下...原创 2020-02-19 15:55:54 · 365 阅读 · 0 评论 -
只用2GB内存在20亿个整数中找到出现次数最多的数
有一个包含20亿个全是32位整数的大文件,在其中找到出现次数最多的数。要求:内存限制2GB。初级进阶: 40亿个整数。高级进阶: 80亿个整数。常规思路:在很多整数中找到出现次数最多的数,通常的做法是使用哈希表对出现的每一个数做词频统计。如果一个数字出现20亿次,哈希表的一条记录需要8B。如果20亿个数都不同,那么哈希表的20亿条记录需要16GB。解决思路:记录大概 2 亿多条不同的...原创 2020-02-19 15:53:42 · 1115 阅读 · 0 评论 -
认识布隆过滤器
什么是布隆过滤器?一个布隆过滤器精准地代表一个集合,并可以精准判断一个元素是否在集合中。基本原理判断一个元素是不是在一个集合里,一般是将所有元素保存起来,然后通过比较确定。但随着集合中元素的增加,我们需要的存储空间越来越大,检索速度也越来越慢(O(n),O(logn))。不过还有一种叫作散列表(又叫哈希表,Hash table)的数据结构。它可以通过一个Hash函数将一个元素映射成一个位阵列...原创 2019-12-14 18:30:51 · 128 阅读 · 0 评论