Algorithm 分组相似集算法

Algorithm 分组相似集算法,algorithm,set,grouping,aggregate,similarity,Algorithm,Set,Grouping,Aggregate,Similarity,我有一个搜索引擎。搜索引擎在搜索关键字时生成结果。我需要的是找到所有其他关键字,产生类似的结果 例如,关键字k1给出的结果集R1={1,2,3,4,5,…40},其中最多包含40个文档ID。我需要得到所有其他关键字K1的列表,这些关键字生成的结果与K1生成的结果相似 两个结果集R1和R2之间的相似性S(R1,R2)计算如下: 2*(R1和R2中相同元素的数量)/((R1中元素的总数)+(R2中元素的总数))。示例:R1={1,2,3}和R2={2,3,4,5}给出S(R1,R2)=(2*{2,3

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

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

两个结果集R1和R2之间的相似性S(R1,R2)计算如下:
2*(R1和R2中相同元素的数量)/((R1中元素的总数)+(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

有100000多个关键字,因此有100000多个结果集。到目前为止,我只能以O(N^2)的艰难方式解决这个问题,其中每个结果集都被压缩到其他每个结果集。这需要很多时间

有人有更好的主意吗

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


一个问题是结果是否按顺序排列


脑海中浮现的东西将这两个集合结合起来,进行排序并找到重复的。可以将问题简化为O(nlogn)

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

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

备选方案:

我想到了另一个选择:

给定结果集R1,您可以遍历文档并创建一个与这些文档匹配的其他关键字的直方图。然后,如果给定的备选关键字得到(比如)至少1/2次点击,则将其列为“相似”

最大的区别是,你根本不考虑不在R1中的文档。


准确吗?


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

你仍然需要将每个集合与另一个集合进行组合,这会产生n*(n-1)个组合,对吗?