首页
题库
面试
求职
学习
竞赛
More+
所有博客
搜索面经/职位/试题/公司
搜索
我要招人
去企业版
登录 / 注册
首页
>
试题广场
>
索引擎会通过日志文件把用户每次检索使用的所有检索串都记录下来
[问答题]
寻找热门查询: 搜索引擎会通过日志文件把用户每次检索使用的所有检索串都记录下来,每个查询串 的长度为1-255字节。假设目前有一千万个记录, 这些查询串的重复度比较高,虽然总数是1千万,但如果除去重复后,不超过3百万个 。一个查询串的重复度越高,说明查询它的用户越多, 也就是越热门。请你统计最热门的10个查询串,要求使用的内存不能超过1G。
(1)请描述你解决这个问题的思路;
(2)请给出主要的处理流程,算法,以及算法的复杂度。
添加笔记
求解答(12)
邀请回答
收藏(11)
分享
纠错
3个回答
添加回答
6
姚波
由于重复度比较高,300万*255字节 = 765M,不会超过1G,因此可以用Hash_Map的思路。通过
哈希函数将字符串映射到Hash空间中,哈希模型的Key值为字符串,value值为字符串的出现次数count。之后维护一个k = 10的小根堆,这样能保证在logK的时间内查找和删除元素,因此总体的时间复杂度是O(n) + O(nlogk)
发表于 2015-07-09 14:47:49
回复(0)
2
onlyspecial
按照字符串长度把字符串分为255组,经计算总的字符串大小,这255组可以分三次进入内存,第一组1~55,第二组56~155,第三组156~255,。长度相同的那一小组可以经过排序从小到大排好,比如堆排序时间复杂度O(NlogN),空间复杂度O(1),然后经过一次遍历就可以得到每个字符串的重复次数。再通过10个元素的总的时间复杂度O(Nlog10)的最小堆可以得到重复次数前十名。那么把255个组的前十名全部读入内存,再通过一个最小堆可得到总的前十名。
发表于 2015-08-22 16:08:40
回复(1)
0
慈慈乱了
hash 统计 +小根堆
发表于 2015-07-05 22:05:30
回复(0)
这道题你会答吗?花几分钟告诉大家答案吧!
提交观点
问题信息
高级算法
百度
系统设计
上传者:
刘子衿
难度:
3条回答
11收藏
16772浏览
热门推荐
相关试题
系统设计题:设计一个服务调度管理器...
百度
高级算法
系统设计
评论
(1)
有一台带一个千兆网卡的服务器A,会...
阿里巴巴
系统设计
评论
(34)
来自
阿里巴巴2015实习生笔试题
大规模的字典中,需要词与词中间的搭...
查找
分布式
系统设计
百元难题
评论
(0)
分页系统的逻辑地址结构是一维的,分...
操作系统
评论
(1)
关于分段系统与分页系统的区别,描述...
操作系统
评论
(1)
扫描二维码,关注牛客网
意见反馈
下载牛客APP,随时随地刷题