海量数据场景题--出现频率最高的100个词

出现频率最高的100个词

假如有一个 1G 大小的文件,文件里每一行是一个词,每个词的大小不超过 16 bytes,要求返回出现频率最高的 100 个词。内存限制是 10M。

  • 哈希分治

    这个解法的主要思路如下:

    1. 采用分治的思想,进行哈希取余
    2. 使用 HashMap 统计每个小文件单词出现的次数
    3. 使用小顶堆,遍历步骤 2 中的小文件,找到词频 top 100 的单词。

    很容易就会发现一个问题,如果第二步中,如果这个 1 G 的大文件中有某个词的频率太高,可能导致小文件大小超过 10 M,这种情况该怎么处理呢?

    在此疑问上,我们提出了第二种解法。

  • 多路归并问题

    多路归并排序对大文件排序的步骤如下:

    1. 将文件按照顺序切分成大小不超过 2 M 的小文件,总共 500 个小文件
    2. 使用 10 MB 内存分别对 500 个小文件中的单词进行排序
    3. 使用一个大小为 500 的堆,对 500 个小文件进行多路排序,然后将结果写到一个大文件中
场景哈希分片法排序法
某个词占50%可能分片失败需二次处理天然支持,直接连续计数
内存消耗需同时处理多个小文件只需维护一个全局堆
实现难度简单(类似分快递)复杂(需多路归并)
适用场景常规数据分布极端数据分布(如热搜词统计)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值