100亿零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。

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

你可能感兴趣的:(算法,c++)