集合所与の球上の点、及び別の点球上、私が検索するの点(ユークリッド又は大圏距離)最も近いです。
私は、かなりの量の事前計算をする用意があります。ソリューションは正確かつ効率的でなければなりません(線形時間よりも高速)。
集合所与の球上の点、及び別の点球上、私が検索するの点(ユークリッド又は大圏距離)最も近いです。
私は、かなりの量の事前計算をする用意があります。ソリューションは正確かつ効率的でなければなりません(線形時間よりも高速)。
回答:
空間分割アプローチを使用して最近傍探索を行います。
たとえば、1つのアプローチは、球の表面で -dツリーを使用することです。球座標を使用して球上のすべての点を表すことができます。球上のすべての点は座標持っています。したがって、座標を持つ2次元空間があります。ここで、 -dツリーを使用してポイントを整理します。ここでは、次元です。 -dツリーの最近傍探索には標準的なアルゴリズムがあります。ヒューリスティックな予測実行時間はです。
座標が法として「折り返す」ことを反映するために、データ構造に小さな変更を加える必要がありますが、これは難しくありません。で最近傍探索に使用されるキーサブルーチン -dツリーがある:点所与及び「矩形」領域からの距離を見つけるに最も近い点に。あなたの場合、領域は、つまり点のセット。から最も近い点までの距離を計算するのは簡単です。これにより、 -dツリーの最近傍探索に標準アルゴリズムを使用できるようになります。
または、 -dツリーの代わりに、他のバイナリスペースパーティションツリーを使用したり、メトリックツリーを確認したりすることもできますが、大幅に向上することを期待する理由はありません。
ここにあなたの質問に対処する2つの異なるソフトウェアパッケージへのリンクがあります。彼らが採用する方法があなたのニーズを満たすかどうかを確認するために、それぞれを研究する価値があるかもしれません:
(1)Matlab GridSphere。「測地線グリッドは、球の表面上の均一なグリッドです。アルゴリズムは、GridSphereによって生成されたグリッド用に最適化されており、任意の測地線グリッドでは機能しません。」
(2)DarkSkyApp sphere-knn .js。「球体上で最近傍ルックアップを高速に提供します。...十分にテストされており、地球上のどこにあるかに関係なく正しく機能します。」