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

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


很容易想到桶排序,问题是桶的宽度,桶的宽度就是指这个桶内放数字的范围是多少。

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

2g内存 = 2∗210M2*2^{10}M2210M=2∗220K2*2^{20}K2220K=2∗230bytes2*2^{30} bytes2230bytes(刚开始脑子秀逗,认为2g内存 = 2∗23M2*2^{3}M223M=2∗26K2*2^{6}K226K=2∗29bytes2*2^{9} bytes229bytes,注意这里底数是2啊,不是10。。。),而long long占23bytes2^3 bytes23bytes,所以可以申请23123=228\frac{2^{31}}{2^{3}}=2^{28}23231=228个桶。uint32是2322^{32}232
,所以桶的宽度是16。

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值