10 亿个数取中位数

10 亿个数取中位数
1、取 16*1024 个数,生成一个 TreeMap 。取得最大值 max 和最小值 min。
2、构造一个1024个元素的计数数组 T[i],对最初的 1024 个数按区间计数;
对 min 和 max 进行 1024 个等分,各等分值为 N[i]。

当数据 N[a]<data<=N[a+1] 时, T[a]++;

3、将大于 N[512-8] 且小于 N[512+8] 的数放入一个新的 TreeMap。

4、开始读取之后的数据,执行2 和 3的操作;

5、根据区间计数,获知中位数处于N[x]区间。
如果正好处于 N[512-8] 且小于 N[512+8],则可以直接查询数据。
否则,重新读取一次数据,将处于 N[x] 区间的数,放入一个 TreeMap 中,获得中位数。

6、如果某个区间的数据量超过 200万,则对该区间进行分区,分成 1024 个区,并进行计数。


嗯嗯,计数要智能一些,可以分拆、合并计数据区间。最大值最小值要随时取。

唔唔,有空将代码写出来试试。不知道是否可行。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值