改善此算法的时间复杂度

路易斯达

我有N对字符串列表(第1组中的N到第2组中的N)需要通过Jaccard相似度与最接近的一对配对。这意味着我需要计算N ^ 2的距离,并为集合1中的每个元素获取最大相似度wrt set 2。

运行它的简单代码是

import numpy as np

def jaccard_similarity(a, b):
    intersection = set(a).intersection(set(b))
    union = set(a).union(set(b))
    return len(intersection)/len(union)

set_1 = [['Pisa','Tower','River','Tuscany'],['London','City','UK','England'],['Berlin','Germany','Munich']]
set_2 = [['Pisa','Arno','River','Tuscany','Florence','London','Tower'],['Germany','German','UBanh'],['London','City','UK','England','Europe']]

pairs = []

for vect_1 in set_1:
    dist = []
    for vect_2 in set_2:
        dist.append(jaccard_similarity(vect_1,vect_2))
    pairs.append(np.argmax(dist))

print(pairs)

我知道这具有O(N ^ 2)的时间复杂度,但是我想知道是否可能存在一些优化/启发式算法,以使平均情况更好。

同样,是否有关于代码本身可以优化的东西?

编辑:我修改了问题,使其更加精确。

用户名

您应该能够使用scipy.spatial.distance.cdist,它可以为给定指标计算整个矩阵。时间的复杂性是不可避免的,但是科学的速度使其变得很快。

https://docs.scipy.org/doc/scipy/reference/generation/scipy.spatial.distance.cdist.html

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章