zoukankan      html  css  js  c++  java
  • 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足够。

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

  • 相关阅读:
    web app变革之rem
    理解angularjs的作用域
    移动开发框架
    angularjs ng-repeat下验证问题
    10、长链接转短链接
    8、自定义菜单及菜单响应事件的处理
    9、多公众号集中管理
    7、消息管理-接收事件推送
    6、消息管理-普通消息接受处理
    5、用户和用户组管理-支持同步
  • 原文地址:https://www.cnblogs.com/peixuewen/p/11180920.html
Copyright © 2011-2022 走看看