在集合列表中找到相似集合的有效方法

时间:2019-01-16 23:51:03

标签: algorithm sorting similarity nearest-neighbor

我有一组数组,这些数组的大小可能非常大,其中包含0到1之间的3个数字的组或元组。

我的目的是找出其中哪一个与新给定集合最相似,相似性由2个给定集合中数字之间的绝对差之和定义,应将其最小化。例如,(1, 0, 1)(1, 0, 0)的总“得分” 将是| 1-1 | + | 0 -0 | + | 1 -0 | = 1

显而易见的解决方案是遍历这样的数组并返回最小值,但是如果我想多次执行它,效率就会降低。我希望有一种很好的排序方式,例如将意味着类似的集合放在一起的散列,然后可以使用二进制搜索来有效地找到新集合的匹配项。

示例:

s = [(0.5, 0.8, 0.3), (0, 0, 0), (1, 0.2, 0.75), (1, 1, 1), (0.6, 0.6, 0)]

如果给定集合(0.8, 0, 1),则绝对差之和为:

[1.8, 1.8, 0.65, 1.2, 1.8]

因此,基于此,我们可以推断出与(0.8, 0, 1)最相似的集合是(1, 0.2, 0.75),希望可以在不到线性时间的情况下以其他方式进行计算。

感谢您的任何答复,或指出正确的方向

0 个答案:

没有答案