Google Play应用商店最近为Android应用推出了一项新功能,该应用将评论者留下的常用短语分组。我正在考虑哪种算法可以用尽可能少的空间和时间来实现这一点,但还没有得到令人满意的答案。
该功能看起来像这样:
这个应用程序有10.000.000评论
“上瘾”:1234条点评
- “这是上瘾!”
- “无法将此令人上瘾的应用下载。”
- ...
“错误的帧率”:12345条评论
- “此应用在我的设备上有错误的帧率”
- “主菜单有错误的帧率”
- ...
显示前5个短语(k = 5)。短语最多可以有5个单词(l_max = 5)。一个流行的应用程序可以有1000万条评论,每条评论100个单词(n = 10E9个单词)。
l_max = 1的简单算法是:
如果l_max> 1,第1步会创建一个需要* O(n / l_max)空间的散列图,这太多了。
Nussinov算法(参见Algorithm to find the most common substrings in a string)将是一个很好的匹配,但它需要 O(n ** 2)空间,所以我们可能不应该在这里使用它。