zoukankan      html  css  js  c++  java
  • 从海量文本中统计出前k个频率最高的词语

    现有如下题目:有一个海量文本,存储的是汉语词语,要求从中找出前K个出现频率最高的词语,写出最优算法,兼顾时间和空间复杂度。

    思路分析:熟悉搜索引擎的程序员,应该不是难题。用传统的HashMap是无法解决的,因为数据量非常庞大的时候,空间复杂度会导致程序运行时,频繁执行MinorGC和MajorGC,最终JVM会宕掉。之前写的字母排列算法的时候,当输出100多万条数据的时候,JVM就宕掉了,下面用自平衡的三叉树来解决此问题。

    第一步:对文本进行排序和折中处理,更新文本,要要用到pinyin4j项目包;

    第二步:把更新后的字典,加载到三叉树中,实现平衡的三叉树,自定义的三叉树要增加节点字符出现次数的变量,以便实现词频统计;

    第三步:遍历字典,每次读到的词语,用三叉树查询,得到频率,然后把读到的词语和频率写到另一个文件中,用空格分开,类似于Key-value键值对形式;

    第四步:和上一篇的问题雷同,从海量数据中查找出前10个最小值;

    第五步:得到最小频率值的堆后,从新的文本中找到对应的词语,加入到set中,统一频率的词语会有很多,而不是一个,输出应该是如下形式:

    [xxx,xxx,xxx……]

    [xxx,xxx,xxx……]

    [xxx,xxx,xxx……]

    ……

    代码省略,不上传了!

  • 相关阅读:
    4.Docker Compose 部署 Nexus
    3.Docker Compose 部署 GitLab
    2.Docker Compose 部署应用程序
    1.Docker Compose
    6.Dockerfile 指令
    5.Dockerfile 定制镜像
    4.Docker 操作容器
    3.Docker 操作镜像
    2.Ubuntu安装 Docker
    windows快捷键
  • 原文地址:https://www.cnblogs.com/txq157/p/5255158.html
Copyright © 2011-2022 走看看