有100W个关键字,长度小于等于50字节。用高效的算法找出top10的热词,并对内存的占用不超过1MB。
2013-12-10 23:35
302 查看
①先把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或更多的小文件,但到底是多少呢?我觉得这不重要,勿纠结答案,虽准备在平时,但关键还是看临场发挥,保持思路清晰关注细节即可。OK,更多类似题目参见此文:/article/1360513.html。
②针对对每个小文件依次运用hashmap(key,value)完成每个key的value次数统计,后用堆找出每个小文件中value次数最大的top 10;
③最后依次对每两小文件的top 10归并,得到最终的top 10。
注:很多细节需要注意下,举个例子,如若hash映射后导致分布不均的话,有的小文件可能会超过1M,故为保险起见,你可能会说根据数据范围分解成50~500或更多的小文件,但到底是多少呢?我觉得这不重要,勿纠结答案,虽准备在平时,但关键还是看临场发挥,保持思路清晰关注细节即可。OK,更多类似题目参见此文:/article/1360513.html。
相关文章推荐
- 有100W个关键字,长度小于等于50字节。用高效的算法找出top10的热词,并对内存的占用不超过1MB。
- 在一个整型数组中有一个元素的出现次数超过了数组长度的一半,试设计一个 在时间上尽可能高效的算法,找出这个元素。
- 对于一个字符串,请设计一个高效算法,找到第一次重复出现的字符。 给定一个字符串(不一定全为字母)A及它的长度n。请返回第一个重复出现的字符。保证字符串中有重复字符,字符串的长度小于等于500。
- 要求在长度为100字节的数组中,找出大于42H的无符号数的个数并存 ;入字节单元UP中,找出小于42H的无符号数并存入DOWN中
- 算法性能比较(一)——找出小于等于n的所有素数
- 给定a、b两个文件,各存放50亿个url,每个url各占用64字节,内存限制是4G,如何找出a、b文件共同的url?
- 两个文件a和b,各存放50亿条URL,每条URL占用64字节,内存限制是4G,让你找出a,b文件共同的URL
- 问题描述如下: 有2.5亿个整数(这2.5亿个整数存储在一个数组里面,至于数组是放在外存还是内存,没有进一步具体说明); 要求找出这2.5亿个数字里面,不重复的数字的个数; 另外,可用的内存限定为600M; 要求算法尽量高效,最优;
- 给定a、b两个文件,各存放50亿个url,每个url各占用64字节,内存限制是4G,如何找出a、b文件共同的url?
- 给定a、b两个文件,各存放50亿个url,每个url各占用64字节,内存限制是4G,如何找出a、b文件共同的url?
- 给定a、b两个文件,各存放50亿个url,每个url各占用64字节,内存限制是4G,如何找出a、b文件共同的url?
- 直角三角形的三条边满足勾股定理,找出三边长度都小于50的三角形
- 给定a、b两个文件,各存放50亿个url,每个url各占用64字节,内存限制是4G,如何找出a、b文件共同的url?
- PHP实现找出数组中出现次数超过数组长度一半的数字算法示例
- 给定a、b两个文件,各存放50亿个url,每个url各占用64字节,内存限制是4G,如何找出a、b文件共同的url?
- zabbix结合shell实现自动发现占用内存最大top10进程并监控其资源
- dedecms搜索提示"关键字不能小于2个字节!"
- 现在有一个数组,已知一个数出现的次数超过了一半,请用O(n)的复杂度的算法找出这个数
- 一级菜单不超过4个汉字或8个字母,以字节数为限制条件,包括汉字和字母(此例汉字默认等于3个字节,字母字符为1个字节)
- 整数算法训练05—一个数如果恰好等于它的因子之和,这个数被成为”完数” 例如:6=1+2+3.请编程找出1000以内的完数