【问题标题】:Grouping similar sets algorithm分组相似集算法
【发布时间】:2011-07-06 08:11:54
【问题描述】:

我有一个搜索引擎。当搜索关键字时,搜索引擎会生成结果。我需要的是找到所有其他产生类似结果的关键字。

例如关键字 k1 给出结果集 R1 = { 1,2,3,4,5,...40 },其中包含最多 40 个文档 ID .我需要获取所有其他关键字 K1 的列表,这些关键字生成的结果类似于 k1 生成的结果。

两个结果集R1R2之间的相似度S(R1, R2)计算如下:
2 * (number of same elements both in _R1_ and _R2_) / ( (total number of elements in _R1_) + (total number of elements in _R2_) ).示例:R1 = {1,2,3} 和 R2 = {2,3,4,5} 给出 S(R1, R2) = (2*|{2,3}|) / |{1,2,3}| + |{2,3,4,5}| = (2*2)/(3+4) = 4/7 = 0.57。

有超过 100,000 个关键字,因此超过 100,000 个结果集。到目前为止,我只能以 O(N^2) 的困难方式解决这个问题,其中每个结果集都与其他每个结果集相比较。这需要很长时间。

有人有更好的主意吗?

一些没有完全解决问题的类似帖子:

【问题讨论】:

标签: algorithm set grouping aggregate similarity


【解决方案1】:

一个问题是排序后的结果?

想到的东西结合了这两个集合,对其进行排序并找到重复项。可以简化为 O(nlogn)

【讨论】:

  • 您仍然需要将每个集合与另一个集合组合起来,这样可以得到 n*(n-1) 个组合,对吧?
【解决方案2】:

为简单起见,假设所有关键词有10个结果,k1为要比较的关键词。您从每个关键字的集合中删除 9 个结果。现在将最后一个结果与 k1 进行比较,最后一个结果相同的关键词就是你想要的。如果一个关键字有 1 个与 k1 相同的结果,那么它仍然存在的概率只有 1%。与 k1 有 5 个结果相同的关键字将有 25% 的概率保留。也许你会觉得 1% 太大了,那么你可以重复上面的过程 n 次,共有 1 个结果的关键词将有 1%^n 的概率保留。 时间是 O(N)

【讨论】:

    【解决方案3】:

    您的相似性标准是否固定,或者我们可以应用一些变化来实现更快的搜索引擎?

    替代方案:

    我想到的另一种选择:

    给定您的结果集 R1,您可以浏览文档并创建与这些文档匹配的其他关键字的直方图。然后,如果给定的替代关键字获得了,例如,至少 #R1/2 次命中,则将其列为“相似”。

    最大的不同是,您根本不会考虑不在 R1 中的文档。


    准确吗?

    如果您需要一个完全符合您要求的解决方案,我相信只为满足上述“替代”标准的那些关键字计算 R2 集就足够了。我认为(需要数学证明!)如果“替代”标准不满足,那么您的标准就不可能满足。

    【讨论】:

      猜你喜欢
      • 2016-01-08
      • 1970-01-01
      • 1970-01-01
      • 2011-09-17
      • 1970-01-01
      • 1970-01-01
      • 2011-02-11
      • 2012-09-07
      • 1970-01-01
      相关资源
      最近更新 更多