我正在尝试使用搜索查询日志进行一些研究。我的第一个兴趣是发现趋势。 例如:冬天人们经常感冒疮。所以我想在冬天我们可以看到这种类型查询的增长。
我想如何发现趋势:
所以我有一个问题: 很难在大型数据集上找到频繁的项目集(我有数百万个查询)。我已经实现了apriory算法,但它的工作速度很慢,支持率很低(例如200k查询中的2个可能需要一天)
在我的情况下,什么是最佳算法?也许我可以用另一种方式解决我的任务?
答案 0 :(得分:0)
这是一个非常简单的方法,将其缩小到只计算所请求时间范围内的字符串,而不是整个集合。
将您的查询存储在已排序的可扩展数据结构中 - 我认为skip list非常适合这里。
跳过列表中的查询顺序将按时间递增。
注意:在跳过列表中添加一个新查询很容易 - 你总是追加它,因为它总是“更大”然后(发生在所有现有查询之后)。
现在,当你需要搜索一个时间范围时 - 你不需要遍历所有查询,而只需要迭代它的相关部分,因为找到时间范围的第一个和最后一个元素可以快速完成在跳过列表中。
为了提高效率,我使用双向映射为每个字符串提供唯一ID,并仅存储ID。从ID中创建直方图可能更容易(从计算上讲)然后为原始字符串创建它。找到最常见的ID后 - 您可以从地图中推断出它们引用的字符串。