最常见的短语

时间:2016-02-20 21:42:54

标签: algorithm language-agnostic

Google Play应用商店最近为Android应用推出了一项新功能,该应用将评论者留下的常用短语分组。我正在考虑哪种算法可以用尽可能少的空间和时间来实现这一点,但还没有得到令人满意的答案。

该功能看起来像这样:

  

这个应用程序有10.000.000评论

     

上瘾”:1234条点评

     
      
  • “这是上瘾!”
  •   
  • “无法将此令人上瘾的应用下载。”
  •   
  • ...
  •   
     

错误的帧率”:12345条评论

     
      
  • “此应用在我的设备上有错误的帧率
  •   
  • “主菜单有错误的帧率
  •   
  • ...
  •   

显示前5个短语(k = 5)。短语最多可以有5个单词(l_max = 5)。一个流行的应用程序可以有1000万条评论,每条评论100个单词(n = 10E9个单词)。

琐碎的方法

的Hashmap

l_max = 1的简单算法是:

  1. 将所有单词放入散列图,计算其频率(O(n)time,O(n)space)
  2. 通过堆,O(k)空间选择k个顶级短语 O(nlogk)
  3. 如果l_max> 1,第1步会创建一个需要* O(n / l_max)空间的散列图,这太多了。

    Nussinov

    Nussinov算法(参见Algorithm to find the most common substrings in a string)将是一个很好的匹配,但它需要 O(n ** 2)空间,所以我们可能不应该在这里使用它。

0 个答案:

没有答案