面试冲刺:26---10个文件、每个文件1G,每个文件都存放用户的query,每个文件的query允许重复,那么如何将所有的query按照频度进行排序?

一、问题描述

  • 现在有10个文件,每个文件1GB,每个文件的每一行都存放的是用户的query查询信息,并且每个文件的query都可能是重复的
  • 现问:如何将这些文件中所有的query按照出现的频度进行排序?

二、解决方案

  • 第一步:先读取每个文件,对每条query做哈希,哈希函数为f(query)=query%10,根据哈希的结果,将每个文件写入到对应的文件中。这样处理之后任意一个query就只会出现在同一个文件中了
  • 第二步:对第一步得到的10个文件,每个文件都做下面的操作
    • 每个文件构建一个hash_map数据结构,query作为key(是唯一的),value是每条query出现的次数
    • 根据hash_map的value进行堆排序
    • 将排序好的结果保存到文件中
    • 这样我们就得到了10个文件,每个文件中query的频度都是从多到少排序好的
  • 第三步:对第二步得到的10个文件进行归并排序,将排序的结果保存到一个文件中

猜你喜欢

转载自blog.csdn.net/qq_41453285/article/details/107771430