大数据中的中位数,第K个大的数,前K个大的数

直接几亿的数据,限制内存,找出topK的数,或者中位数这类题,目前我的思路有以下几种,总结如下:

1.桶排序:

一、数据量特别大,分布在-2^31-2^31-1  可以制造100W 一个区间的桶,1000个就是10亿,遍历数据也可以每1000W 读取一次,数字在哪个区间,对应区间内的值+1,这样可以迅速找到中位数对应的桶,然后在这个桶中再次寻找中位数。

二、quickSelect思想,和quickSort大体相同,不同的地方是:quickSelect 一次排序后,丢掉无用的另一段,举例:寻找第K大的数,首先取目前数组的中间的数f,以它为基点,比他小的在左边,比他大的在右边,遍历后,判断这个数所在的位置在K之前还是之后,之前就直接从(f,right)寻找第K-f位置的数字即可,  在K之后,就遍历(0,f),寻找第F位置的数字即可。

三、 mapReduce 分治思想。数据均分成N份,每份去进行排序,归纳,最后合并到一起。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值