我正在尝试一个想法,我有以下子问题:
我有一个m
包含固定长度元组的大小列表n
。
[(e11, e12, .., e1n), (e21, e22, .., e2n), ..., (em1, em2, .., emn)]
现在,给定一些不属于列表的随机元组(t1, t2, .., tn)
,我想找到属于列表的最接近的元组。
我使用以下距离函数(汉明距离):
def distance(A, B):
total = 0
for e1, e2 in zip(A, B):
total += e1 == e2
return total
一种选择是使用穷举搜索,但这对于我的问题是不够的,因为列表非常大。我想出的另一个想法是首先使用kmedoids
对列表进行聚类并检索K
medoids(聚类中心)。对于查询,我可以通过K
调用距离函数来确定最近的集群。然后,我可以从该特定集群中搜索最近的元组。我认为它应该可以工作,但我不完全确定,如果查询元组位于集群的边缘是否可以。
但是,我想知道,如果你有更好的想法来解决这个问题,因为我的大脑现在完全是空白的。但是,我有一种强烈的感觉,可能有一种聪明的方法可以做到这一点。
只要能够降低查询的复杂性,需要预先计算的解决方案就可以了。