1G物理内存,现有一个2G的文件,里面存的都是QQ号,一行一个,求重复最多的前100个QQ号,伪代码或者实现代码均可。思路越多越好
外部归并排序
分而治之
2G大小文件,假设qq号长度最长为11位 则需要[byte,int]来存,即一行需要6字节
byte存高2位 int存低9位
2 * 1024 * 1024 * 1024 2GB字节磁盘空间 / 11位 = 200M个数字 × 6 = 1200MB字节内存
1、我们可以先把这个大文件通过 qq号码 % 10 写到 10个文件 (每个文件大小在120MB左右)
2、 然后分别统计这10个文件中的头100个(每次统计仅需120MB×4字节(存大小)即可)
3、对10个头100个再排序
:D
1.楼上所说分治法.
2.换个诡辩的思路
如果是utf-8那不好说..如果是gbk 2g数字是可以放到内存中的..直接在内存中用hash或者排序就好了
把记录读写到数据库,然后一条sql;行不