Algorithm 用于从集合中高效检索最近元素的数据结构
tl;dr像Mathematica的Algorithm 用于从集合中高效检索最近元素的数据结构,algorithm,language-agnostic,data-structures,Algorithm,Language Agnostic,Data Structures,tl;dr像Mathematica的最近的这样的东西是如何有效地实现的 具有一个名为的函数,该函数将获取一个“事物”列表(它们可以是n-维度空间中的数字、坐标、字符串等),并将返回一个最接近的函数对象。此对象是一个函数,当应用于x时,它将返回距离x最近的列表元素。距离度量可以作为参数传递给最近的:默认情况下,数字数据使用欧几里德距离,字符串使用某种编辑距离 示例(希望这能让问题更清楚): nf=最近的[{92,64,26,89,39,19,66,58,65,39}] nf[50]将返回58,最
最近的这样的东西是如何有效地实现的
具有一个名为的函数,该函数将获取一个“事物”列表(它们可以是n
-维度空间中的数字、坐标、字符串等),并将返回一个最接近的函数
对象。此对象是一个函数,当应用于x
时,它将返回距离x
最近的列表元素。距离度量可以作为参数传递给最近的
:默认情况下,数字数据使用欧几里德距离,字符串使用某种编辑距离
示例(希望这能让问题更清楚):
nf=最近的[{92,64,26,89,39,19,66,58,65,39}]代码>
nf[50]
将返回58
,最接近50
的元素nf[50,2]
将返回两个最近的元素{58,39}
问题:实现此功能的有效方法是什么?最接近函数的内部可能使用的数据结构是什么?为不同类型的数据计算最近元素的最大可能复杂性是什么
对于一个简单的数字列表,对它们进行排序并进行二进制搜索是可行的,但是最近的
适用于多维数据以及任意距离函数,因此我认为它使用了更一般的方法。但如果它被证明专门用于某些类型的数据/距离函数,我也不会感到惊讶。对于性能良好的距离函数,有许多数据结构专门为此进行了优化。对于多维数据,通常在次线性时间内(和其他)可以给出很好的结果。您可能还需要研究哪些树结构,这些树结构经过优化,以支持最近邻搜索的方式将点存储在某些度量空间中。根据特定的度量空间(欧几里德距离、编辑距离等),不同的数据结构可能或多或少是合适的
对于行为不受限制的任意距离函数(甚至不是三角形不等式之类的东西),最好是进行线性搜索,因为距离函数对于集合中除一个特定点之外的所有点都可能是无限的
希望这有帮助 这完全取决于数据和指标。阅读这里的所有内容:您是否看到:@Marcin我不熟悉这个词。您是否注意到您的图标有纳粹党十字记号的形式?非常好的总结!您提供了要搜索的关键字(重要)和一些链接。