讨论一个面试很常问的TOPK的问题

面试里面TopK是很常问的问题,通常解决方法都答先将大数据集分成多个小份,然后用hash表统计频率,再维护一个小顶堆统计得出TOPK个数据,最后将多个小份分的TOPK进行合并。

那么我有一个困惑,假设我们求top10个值,那么如果在每个小份数据集中,某一个词都排在第11个,如果合并每个小份数据集的TOP11的话,这个词是可以进入总的TOP10的,那么怎么解决这个问题呢?
还是我哪个步骤错了?

PS:很多人没听懂,我举个例子吧,假设有一本非常非常大的书,一共有10000册,你没办法用一台计算机去处理它,我们要求这本书出现最多的10个单词,那么按分治法,我们把1-100册放到机器1进行hash表统计词的频率,维护一个大小为10的小顶堆,我们用100台机器维护100个小顶堆,并在最后对这100个小顶堆进行排序,得出TOP 10的单词。。但是如果每一台机器的第十一个词都是kitty,那么很可能kitty也应该进入top10。那这样的情况应该怎么处理,是哪个步骤出了问题?是不是分词的时候不能直接按册分,要遍历这10000册,对每个单词进行hash?感觉不是太好啊。。求教
不知道我表达清楚没。。
全部评论
hash后这个词不就只在一个文件里了么。
点赞 回复 分享
发布于 2017-08-22 10:42
没听太懂 小组内的第11名会是总排名的10名内吗?
点赞 回复 分享
发布于 2017-08-22 10:43
hash的结果要保证每个小文件中不包含相同的词
点赞 回复 分享
发布于 2017-08-22 10:46
统计频率的时候,相同key被映射到相同的桶,不存在你说的情况 统计topK 最大值的时候,获取每个桶的topK就可获得全部数据的topK
点赞 回复 分享
发布于 2017-08-22 10:52
一个词只能出现在一个小份中,你应该是分小份有问题。相同的词肯定在一个小份中
点赞 回复 分享
发布于 2017-08-22 10:53
哪有你这样hash的,比如一个字符串str肯定在同一个文件里,不可能几个文件同时出现相同str
点赞 回复 分享
发布于 2017-08-22 11:35

相关推荐

评论
点赞
20
分享

创作者周榜

更多
牛客网
牛客企业服务