海量数据Topk及重复问题

//大数据时代,查找效率最高怎么办,如查询10000个数中最大的100个数;
//1.排序中最快的是快速排序,时间复杂度为o(nlogn),将10万个数全排序,不好
//2.局部淘汰,构建容量100的数组,将前100个放入,后面的如果有的数比前一百个最小的大,就替换
//3.分治算法。分为10个组,每组1000个,选出每组的前100个,怎么选:首先快速排序,分为2个堆,如果大堆大于 100,对大堆快速排序,如果大堆小于100(假设93),对小队快速排序,选出7个最大的数。 也就变成在100*10 中排序;
//4.Hash法:如果这10000个数重复率很高,可以用hash法,去除重复,再通过分治算法和最小堆法进行排序
//5.最小堆法:可以建1个1000的堆,排好序,后面的依次比较,如果大于最小的就替换,重新排序。
问题:
(1)有10000000个记录,这些查询串的重复度比较高,如果除去重复后,不超过3000000个。一个查询串的重复度越高,说明查询它的用户越多,也就是越热门。请统计最热门的10个查询串,要求使用的内存不能超过1GB。
思路:重复率高,可以用hash法去重复,分治算法分为300个堆,每个堆有10000个数,找出前10个,然后把着300*10个数,用最小堆进行筛选,效率可以提高些。
重复问题
在海量数据中查找出重复出现的元素或者去除重复出现的元素也是常考的问题。针对此类问题,一般可以通过位图法实现。例如,已知某个文件内包含一些电话号码,每个号码为8位数字,统计不同号码的个数。

    本题最好的解决方法是通过使用位图法来实现。8位整数可以表示的最大十进制数值为99999999。如果每个数字对应于位图中一个bit位,那么存储8位整数大约需要99MB。因为1B=8bit,所以99Mbit折合成内存为99/8=12.375MB的内存,即可以只用12.375MB的内存表示所有的8位数电话号码的内容。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值