有100W个关键字,长度小于等于50字节。用高效的算法找出top10的热词,并对内存的占用不超过1MB。

来源:互联网 发布:mac移除应用程序 编辑:程序博客网 时间:2024/05/16 01:15
①先把100W个关键字hash映射到小文件,根据题意,100W*50B = 50*10^6B = 50M,而内存只有1M,故干脆搞一个hash函数 % 50,分解成50个小文件;
②针对对每个小文件依次运用hashmap(key,value)完成每个key的value次数统计,后用堆找出每个小文件中value次数最大的top 10;

③最后依次对每两小文件的top 10归并,得到最终的top 10。

注:很多细节需要注意下,举个例子,如若hash映射后导致分布不均的话,有的小文件可能会超过1M,故为保险起见,你可能会说根据数据范围分解成50~500或更多的小文件,但到底是多少呢?我觉得这不重要,勿纠结答案,虽准备在平时,但关键还是看临场发挥,保持思路清晰关注细节即可。

转自:http://blog.csdn.net/u010590166/article/details/17253427

0 0
原创粉丝点击