我有一组数组,这些数组的大小可能非常大,其中包含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)
,希望可以在不到线性时间的情况下以其他方式进行计算。
感谢您的任何答复,或指出正确的方向