算法数据结构(三十二)----资源限制技巧汇总

资源限制技巧

1)布隆过滤器用于集合的建立与查询,并可以节省大量空间

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

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

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

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

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

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


题目一

 32位无符号整数的范围是0~4,294,967,295

现在有一个正好包含40亿个无符号整数的文件,

可以使用最多1GB的内存,怎么找到出现次数最多的数

使用第四种方法:哈希函数将数据按种类进行分流,将其按种类分配进不同的小文件中,每条记录的key为整数,value为出现的次数


 题目二

32位无符号整数的范围是0~4,294,967,295

现在有一个正好包含40亿个无符号整数的文件,

所以在整个范围中必然存在没出现过的数。

可以使用最多1GB的内存,怎么找到所有未出现过的数? 

使用方法五:位图解决某一范围上数字的出现情况,并可以节省大量空间

【进阶】

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

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

统计词频,最极端的例子:如果给的内存只够存入两条记录,就将数分成两部分,前面2^32一条记录(统计数据在这个范围的个数),这样来判断不存在的数是不是在这个范围内


 题目三

有一个包含100亿个URL的大文件,假设每个URL占用64B

请找出其中所有重复的URL

哈希函数可以把数据按照种类均匀分流,将数据按种类分配进不同的小文件中,然后统计小文件中重复的url,最后汇总

【补充】

某搜索公司一天的用户搜索词汇是海量的(百亿数据量)

请设计一种求出每天热门Top100词汇的可行办法

哈希函数可以把数据按照种类均匀分流,将所有词汇按种类分配进入不同的小文件中,然后求出每一个文件中的前100,最后汇总求出总体的前100


题目四

32位无符号整数的范围是0~4294967295

现在有40亿个无符号整数,

可以使用最多1GB的内存,

找出所有出现了两次的数。

位图解决某一范围上数字的出现情况,并可以节省大量空间,使用两位统计一个数,00代表出现0次,01代表出现一次,10代表出现2次,11代表出现2次以上


 题目五

32位无符号整数的范围是0~4294967295,现在有40亿个无符号整数

可以使用最多3K的内存,怎么找到这40亿个整数的中位数?

分段统计思想,将数分为各个区间,然后区间内统计词频,可以知道中位数在哪个区间中,然后再将该区间在分段求解。


题目六 

32位无符号整数的范围是0~4294967295

有一个10G大小的文件,每一行都装着这种类型的数字,

整个文件是无序的,给你5G的内存空间,

请你输出一个10G大小的文件,就是原文件所有数字排序的结果

利用堆、外排序:维护一个给定内存可以存下的小根堆,小根堆中按整数大小维护,同事纪律该数出现的频次。一轮过后堆内剩下的数都是最小的记录,然后重堆顶弹出按频次写入文件中,这样就排好序了


题目七

求一个大文件中出现次数最多的前100名

堆上堆的方式: 将大文件哈希成多个小文件,每个小文件按出现的频次建立大根堆。每个小文件弹出堆顶的数据再建立大根堆。在这个堆上堆中的数被选中后,其对应的小文件再弹出下一个数据到这个堆上堆结构中,如此就选出了次数最多的前100名

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值