Algorithm 分组相似集算法
我有一个搜索引擎。搜索引擎在搜索关键字时生成结果。我需要的是找到所有其他关键字,产生类似的结果 例如,关键字k1给出的结果集R1={1,2,3,4,5,…40},其中最多包含40个文档ID。我需要得到所有其他关键字K1的列表,这些关键字生成的结果与K1生成的结果相似 两个结果集R1和R2之间的相似性S(R1,R2)计算如下: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
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)个组合,对吗?