海量数据的处理问题

在实际中,经常会碰到对大量数据的处理问题,这就需要合理地应用数据结构和算法,从而提升数据处理效率。以下归纳总结几种海量数据处理的常见问题。

1、如何在1亿个数据中找到最大的100个数

错误想法:对数据进行快速排序,最佳时间复杂度为O(nlogn),但需要一次性将所有数据读入内存,导致内存占用过多且全部排序没必要。
正确方法:分冶法+最小堆排序
原理:将数据划分为100块,将数据块分配给多台服务器,每个cpu处理一块数据,采用最小堆排序,读入前100个数来建立大小为100的最小堆(建堆的时间复杂度为O(mlogm)),然后遍历块中后续的数据,并依次与堆顶数据进行比较。若该数比最小的数小,则继续读取后续数据;若比最小数大,则替换堆顶元素并重新调整为最小堆,直至数据全部遍历完成。时间复杂度为O(nmlogm),空间复杂度为100。最后合并所有数据块中的前100个数据,同样采用最小堆排序得到最大的100个数。

参考博客:如何从一亿个数组里找出最大的十个

2、10亿个整数找出重复次数最多的100个整数

方法:哈希表+分冶法+最小堆排序
原理:把数据散列后的值按范围划分为100个块,将块映射到不同的文件中;利用哈希表将每个块中的数据读入内存并记录出现的次数;采用最小堆排序找到每个块中出现次数最多的

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值