tl; dr MathematicaのNearest
のようなものは、どのように効率的に実装できますか?セットから最も近い要素を効率的に検索するためのデータ構造
Mathematicaは(、彼らは数字ことができn
次元空間、文字列などの座標)「もの」のリストを取るNearest
と呼ばれる機能を有しており、NearestFunction
オブジェクトを返します。このオブジェクトは、x
に適用すると、ある距離メトリックでx
に最も近いリスト要素を返します。距離メトリックは、パラメータとしてNearest
に渡すことができます。デフォルトでは、数値データの場合はユークリッド距離を使用し、文字列の場合はある程度の編集距離を使用します。
例(これがうまくいけば問題はより明確になります):
nf = Nearest[{92, 64, 26, 89, 39, 19, 66, 58, 65, 39}];
nf[50]
は58
、50
に最も近い要素を返します。 nf[50, 2]
は、最も近い2つの要素である{58, 39}
を返します。
質問:この機能を実装するための効率的な方法は何ですか? NearestFunction
は内部的にどのようなデータ構造ですか?さまざまな種類のデータに最も近い要素を計算するために可能な限り複雑なのは何ですか?
数値を並べ替えてバイナリ検索を実行すると便利ですが、Nearest
は多次元データと任意の距離関数で動作しますので、より一般的なものを使用していると思います。しかし、特定の種類のデータ/距離関数に特化していることが判明すれば、私は驚くことはありません。
あなたは見たことがありますか:http://www.google.co.uk/search?q=adjacency+data+structure – Marcin
@Marcin私はこの用語に精通していませんでした。 – Szabolcs