10G文件如何对里面单词出现排序

10G文件如何对里面单词出现排序的问题(只要文件系统支持,不限大小)。

其实这个问题很简单,10G文件是很大,但是出现的字符或单词是很有限的。

单字符只有那么一百多个,单词数量满打满算,以英文单词总数65万个为例。全部,统称为单词。单词数量按65万个计算。仅仅每个单词的重复出现(频率)扩大了文件容量而已。即便是100G的文件,出现的单词也是这些。

文件绝对不需要全载入内存,只需要顺次读取扫描过滤单词即可。这样才不会占用到多大的内存。

假如我们以平均每个单词10个字节计算,65万*10字节=650万字节,就按6.5M内存计算。然后统计频率用integer,65万*4 = 260万字节,就按2.6M内存计算,合计9.1M内存。算上进程其他开销分配的内存,满打满算,50M总足够了吧。

建一个以单词为key,以频率为value的 map,map的总项数,就是65万个。

每当都扫描到一个单词,就把 mapname['该单词']++,这样一遍扫描下来,其实这个map就已经完成了所有的单词的频率统计了。

然后只需要对这个map进行一下排序即可。前面算过内存满打满算10M足够。

这样下来,速度也不低,关键是内存用的非常少。

转载于:https://www.cnblogs.com/peixuewen/p/11180920.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值