大数据题目

大数据题目的解题技巧:

1)哈希函数可以把数据按照种类均匀分流

2)布隆过滤器解决数据服务器的负载管理问题

3)一致性哈希解决数据服务器的负载管理问题

4)利用并查集结构做岛问题的并行计算

5)位图解决 某一范围上数字的出现情况,并可以节省大量空间

6)利用分段统计思想,并进一步节省大量空间

7)利用堆、外排序来做多个处理单元的结果合并

【题目】

32位无符号整数的范围是0~4,294,967,295(2^32 -1),现在有一个正好包含40亿个无符号整数的文件,所以在整个范围中必然存在没出现过的数。可以使用最多1GB的内存,怎么找到所有未出现过的数?

使用位图,需要 2^32 / 8 = 2^29字节 约等于 2500MB

【进阶】

内存限制为10MB,但是只用找到一个没出现过的数即可

申请一个int数组,长512,占用512 * 4B = 2 KB

将0~ 2^32 - 1 范围(即大小为2^32的范围)均分为512份,每个范围为2^32/512 = 2^23,统计40亿个数落在每个范围的个数。

因为整个2^32范围只有40亿个数,因此512个小范围中必定有某个范围最后统计的数字个数不足2^23。再按同样的方法对该范围再进行划分,最终找到未出现过的数。

【再进阶】

只使用三个变量,找到一个没出现过的数

2^32的范围,一分为二,用两个变量分别统计每个范围的词频,一定有某个范围词频不足2^32/2,再对该范围进行二分,一直二分下去。

【题目】

有一个包含100亿个URL的大文件,假设每个URL占用64B,请找出其中所有重复的URL。

哈希分流,URL -> 哈希值 -> 取模,重复的URL肯定进一个文件,再在小文件里统计重复URL。

布隆过滤器,边添加边查,有失误率。

【补充】

某搜索公司一天的用户搜索词汇是海量的(百亿数据量),请设计一种求出每天热门Top100词汇的可行办法。

通过哈希表将海量文件分流到一个个小文件里去,重复的词汇只会出现在同一个小文件里。

统计每个小文件里所有词的词频,把所有(词汇-词频)放进基于词频的大根堆。

把所有大根堆的堆顶加入一个大根堆(总堆),每次从总堆弹出一个,并把相应大根堆的堆顶去掉,新的堆顶加入总堆。

【题目】

32位无符号整数的范围是0~4294967295,现在有40亿个无符号整数,可以使用最多1GB的内存,找出所有出现了两次的数。

哈希函数分流:万能方法。

位图:每两个位表示一个数,00表示出现0次,01表示出现1次,10表示出现2次,11表示出现3次及以上。

【补充】

最多可以使用10KB内存,怎么找到这40亿个数的中位数

范围统计

10KB 可表示多大无符号整形数组 : 10KB/4B = 2500  取2048

0 ~ 2^32 - 1 范围等分为2048份

统计每个范围的词频,最终可以知道中位数在哪个范围,继续等分范围...

【题目】

10G文件里存满无序的int类型整数,给你5G内存,10G文件里的无序数排序,输出到另一个10G文件里

5G内存做小根堆,每条记录是(数字,词频),小根堆按数字大小组织,每条记录需要8字节,堆可以包含5G/8B = 5 * 2^27条记录。

考虑到堆本身占用的内存,假设堆可以包含2^27条记录。

把2^32范围分成大小为2^27的小范围,小范围的个数为2^5个。

使用小根堆统计第一个小范围里数字的词频,统计完输出排序后的数到新文件。

再使用小根堆统计第二个小范围里数字的词频...

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

芜湖高学成

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值