【发布时间】:2012-03-16 19:35:49
【问题描述】:
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 可以处理多维数据以及任意距离函数,所以我想它使用了更通用的东西。但如果它被证明是专门用于某些类型的数据/距离函数,我不会感到惊讶。
【问题讨论】:
-
@Marcin 我不熟悉这个词。
标签: algorithm language-agnostic data-structures