我正在与一个想法,其中我具有以下子问题的尝试检索最接近元素:从一组元素
我有固定长度n
的含元组大小m
的列表。
[(e11, e12, .., e1n), (e21, e22, .., e2n), ..., (em1, em2, .., emn)]
现在,由于一些随机元组(t1, t2, .., tn)
,这不属于名单,我想找到最接近的元组(S),属于列表。
我用下面的距离函数(汉明距离):
def distance(A, B):
total = 0
for e1, e2 in zip(A, B):
total += e1 == e2
return total
一种选择是使用穷举搜索,但是这还不够我的问题的列表是相当大的。其他的想法,我想出了,是先用kmedoids
集群的列表,并检索K
中心点划分(聚类中心)。对于查询,我可以使用K
调用距离函数来确定距离最近的簇。然后,我可以从该特定群集中搜索最接近的元组。我认为它应该可以工作,但我不完全确定,如果在查询元组位于集群边缘的情况下很好。
不过,我想知道,如果你有更好的想法来解决问题,因为我的心在那一刻完全空白。但是,我有强烈的感觉,可能有一个聪明的方法来做到这一点。
的解决方案,需要预先计算的东西,只要他们打倒查询的复杂性都很好。
它不完全回答您所需的指标,但如果您可以在elemenets之间进行比较,则可能需要使用[kd tree](http://en.wikipedia.org/wiki/K-d_tree)来获取最接近的元素(不同之处在于它对维度的“距离”有意义,而不仅仅是匹配维度的最高可能数量) – amit
我忘记说了,元素是可比较的,但只有精确匹配海明距离对任务来说是有意义的,所以不幸的是kd树不适合。 – Timo
查看类似的问题[here](http://stackoverflow.com/questions/8734034/how-to-find-the-closest-pairs-hamming-distance-of-a-string-of-binary-bins-in- r)和[here](http://stackoverflow.com/questions/859441/algorithm-to-find-closest-string-using-same-characters)。 –