百度电面-----搜索词汇排名前十------我的灵感。
百度给我同学的一个电面试题,
如何统计 搜索词汇的前十名。
最近看了HASHMAP的源码实现相关文章,
受到启发。
觉得可以用HASHSET实现
将所有关键字记录进HASHSET
关键字类
大概如下
每次counts+1;
并且设定一个阀值VALVE1当超过多少时就将此对象添加进一个
LIST里(此LIST用于记录COUNTS较大的关键字),
对LIST 做排序,排序可以考虑用多线程归并排序
对LIST 也设定一个阀值,当LIST中的元素个数大于阀值时,
提高VALVE1的值,并重新调整删除LIST中阀值小于新阀值的元素。
以上纯属 胡言乱语。。哈哈哈哈
说实话感觉不如堆排序,
这个当时我想的是hash+堆排序.但是后来我才知道,其实搜索的时候就像是访问数据库,有一个很大的cache,搜索的时候搜索引擎首先进行分词,然后在查询cache,逻辑组合查询结果,所以我们可以从cache里面选取命中率最高的排序就可以了.. 这样的话可以减少很多不必要的的排序.
这个题目可以延伸的,比如文件超大的情况,就要考虑切分文件,用hash了
15 楼 ansjsun 2011-05-23 百度没天的搜索词估计有几千万..几个亿..如果用hash我觉得不行啊..java的hash支持大小也就是几十万...我觉得多少需要点人工参与的..人工筛选一个范围...维护一个词表再统计..否则我觉得搜索..为什么..肯定是第一了...
当然如果有能力..可以对当天..搜索top10做一个统计..从中发现新词..然后加入到词表中...
16 楼 云中苍月 2011-05-23 一楼二楼说的是同一个意思。
正解! 17 楼 抛出异常的爱 2011-05-23 ansjsun 写道百度没天的搜索词估计有几千万..几个亿..如果用hash我觉得不行啊..java的hash支持大小也就是几十万...我觉得多少需要点人工参与的..人工筛选一个范围...维护一个词表再统计..否则我觉得搜索..为什么..肯定是第一了...
当然如果有能力..可以对当天..搜索top10做一个统计..从中发现新词..然后加入到词表中...
如果对搜索框再次分词的话.
应该还木有几个亿
中文比E文的总词量少些...