100亿零1个数找中位数 最少读几次磁盘

265 篇文章 1 订阅

2g内存,磁盘上有100亿零1个32bit 的uint,找中位数,要求读磁盘次数最少


很容易想到桶排序,问题是桶的宽度

由于统计个数,某个桶内可能超过100亿,所以int不行,必须long long
2g内存能放多少long long呢?

2g内存 = 2 ∗ 2 10 M 2*2^{10}M 2210M= 2 ∗ 2 20 K 2*2^{20}K 2220K= 2 ∗ 2 30 b y t e s 2*2^{30} bytes 2230bytes(刚开始脑子秀逗,认为2g内存 = 2 ∗ 2 3 M 2*2^{3}M 223M= 2 ∗ 2 6 K 2*2^{6}K 226K= 2 ∗ 2 9 b y t e s 2*2^{9} bytes 229bytes,注意这里底数是2啊,不是10。。。),而long long占 2 3 b y t e s 2^3 bytes 23bytes,所以可以申请 2 31 2 3 = 2 28 \frac{2^{31}}{2^{3}}=2^{28} 23231=228个桶。uint32是 2 32 2^{32} 232
,所以桶的宽度是16。

所以,两次读磁盘就够了。。。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值