tl; dr如何才能像Mathematica的Nearest
那样有效地实现?用于高效检索集合中最近元素的数据结构
Mathematica有一个名为Nearest
功能,将采取“东西”的列表(它们可以是数字,在n
维空间,字符串等坐标),并返回一个NearestFunction
对象。此对象是一个函数,应用于x
时,将返回最接近x
某个距离度量标准的列表元素。距离度量可以作为参数传递给Nearest
:默认情况下,它使用数值数据的欧氏距离和字符串的某种编辑距离。
实例(这将有望使这一问题更加清晰):
nf = Nearest[{92, 64, 26, 89, 39, 19, 66, 58, 65, 39}];
nf[50]
将返回58
,最接近50
的元素。 nf[50, 2]
将返回两个最接近的元素{58, 39}
。
问题:什么是实现这一功能的有效途径? NearestFunction
什么样的数据结构可能在内部使用?为不同类型的数据计算最近的元素的最佳复杂度是多少?
对于一个简单的数字列表排序他们和做一个二进制搜索将工作,但Nearest
与多维数据以及与任意距离函数,所以我想它使用更通用的东西。但是,如果事实证明它专门用于某些类型的数据/距离功能,我不会感到惊讶。
你见过:http://www.google.co.uk/search?q=adjacency+data+structure – Marcin 2012-02-27 10:19:30
@Marcin我对这个词不熟悉。 – Szabolcs 2012-02-27 10:21:53