当前位置: 首页 > 知识库问答 >
问题:

词频-HashMap或TreeMap

益清野
2023-03-14

我需要使一个程序,计数频率的每一个字在一个文本,另外,我需要能够返回一个列表的n个最经常的字(如果更多的字有相同的频率,他们排序的字母顺序)。还有一个单词列表是不被计算的(停止单词)。

  • 停用词用什么结构
    • 我认为HashSet是最有效的
    • HashMap添加单词的效率更高,但需要排序,TreeMap插入单词需要logn时间,但单词可以按频率排序

    总体而言,什么方法更有效?

    附言。@主持人我知道有一个类似的问题,但我有一个不同的约束,需要不同的结构。

共有1个答案

松钟展
2023-03-14

树状图

由于映射中的单词不能超过m,因此每次更新/插入都要花费O(log m),总运行时间为O(k log m)

HashMap

每次更新/插入都将花费预期的O(1),对所有单词取O(k)

然后,由于映射中将有m单词,因此排序将采用O(m log m)

但是我们可以做得比排序更好--我们可以遍历HashMap并维护N最频繁单词的堆(PriorityQueue)(主要按频率排序,其次按字母排序)。每次插入堆后,如果大小大于n,我们将删除最不频繁的单词。这将采用O(m log n)

因此,总运行时间为O(k+m log n)

比较

由于n<=mm<=k,我们知道m log n<=k log m,假设有大量重复项,或者nmk+m log n<=k log m,因此hashmap通常是首选。

 类似资料:
  • 问题内容: 何时使用哈希图或树图? 我知道可以在需要对元素进行排序时使用TreeMap对其进行迭代。只是吗?当我只想查阅地图或某些最佳特定用途时,没有优化? 问题答案: 哈希表(通常)执行搜索操作(查找),其复杂度限制为,平均情况复杂度为;但是,二进制搜索树(BST)执行搜索操作(查找),其复杂度限制为,平均情况复杂度为。(您自己)应该了解每个(每个)数据结构的实现,以了解其优缺点,操作时间复杂度

  • 问题内容: 我正在尝试使用solr获得单词的频率。当我给这个查询: solr给我类似的频率; 但是当我数数单词时;我发现word2的实际计数值为13。Solr在字段中将相同的单词计数为1。 例如; 字段文字包括;。Solr不返回word2的计数2,而是返回1。它为下面两个句子的word2计数返回1; 因此频率返回错误。我检查了构面字段,但没有找到合适的参数。我该如何解决它,使句子中的单词数相同?

  • 我有一个Hazelcast地图的HashMap作为我下面所示的值。 我想使用谓词/SQLPredicate执行查询。我该怎么做? 请帮帮我。

  • 我刚刚在doc2vec模型词汇表中遇到了这篇关于单词计数的StackOverflow帖子。我想知道是否有其他方法来检索词频,除了 也许有一种更优雅的方式通过gensim库(即在txt文件中输出单词和频率)?

  • 问题内容: 我想在elasticsearch中更改评分系统,以摆脱对一个术语的多次出现计数的麻烦。例如,我想要: “德克萨斯州德克萨斯州” 和 “得克萨斯州” 得分相同。我发现elasticsearch表示该映射将禁用词频统计,但是我的搜索结果却不一样: } 任何帮助将不胜感激,我无法找到很多有关此的信息。 编辑: 我正在添加搜索代码,并在使用解释时返回了什么。 我的搜索代码: 当我搜索解释时,我

  • 本文向大家介绍Python英文文章词频统计(14份剑桥真题词频统计),包括了Python英文文章词频统计(14份剑桥真题词频统计)的使用技巧和注意事项,需要的朋友参考一下 Python剑桥真题词频统计 最好还是要学以致用,自主搜集了19年最近的14份剑桥真题之后,通过Python提供的jieba第三方库,对所有的文章信息进行了词频统计,并选择性地剔除了部分简易词汇,比如数字,普通冠词等,博主较懒,