2g内存,磁盘上有100亿零1个32bit 的uint,找中位数,要求读磁盘次数最少
很容易想到桶排序,问题是桶的宽度,桶的宽度就是指这个桶内放数字的范围是多少。
由于统计个数,某个桶内可能超过100亿,所以int不行,必须long long
2g内存能放多少long long呢?
2g内存 = 2∗210M2*2^{10}M2∗210M=2∗220K2*2^{20}K2∗220K=2∗230bytes2*2^{30} bytes2∗230bytes(刚开始脑子秀逗,认为2g内存 = 2∗23M2*2^{3}M2∗23M=2∗26K2*2^{6}K2∗26K=2∗29bytes2*2^{9} bytes2∗29bytes,注意这里底数是2啊,不是10。。。),而long long占23bytes2^3 bytes23bytes,所以可以申请23123=228\frac{2^{31}}{2^{3}}=2^{28}23231=228个桶。uint32是2322^{32}232
,所以桶的宽度是16。
所以,两次读磁盘就够了。。。