x,y 座標を持つ数百万点のセットが与えられた場合、ある場所から最も近い上位 1000 点をすばやく見つけるための最適なアルゴリズムは何ですか? ここでの「すばやく」とは、家庭用コンピューターで約 100 ミリ秒を意味します。
ブルート フォースとは、数百万回の乗算を行ってから並べ替えることを意味します。単純な Python アプリでも 1 分未満で実行できますが、インタラクティブなアプリケーションにはまだ長すぎます。
ポイントの境界ボックスは既知であるため、空間を単純なグリッドに分割することが可能になります。ただし、ポイントはやや不均一に分布しているため、ほとんどのグリッド スクエアが空で、突然、それらの一部にポイントの大部分が含まれると思われます。
編集:正確である必要はありません。実際にはかなり不正確になる可能性があります。たとえば、トップ 1000 が実際にはトップ 2000 からのランダムなポイントである場合、大した問題にはなりません。
編集: ポイントのセットはめったに変更されません。