min-heapを使った方法を調べました。各点について、サイズkの最小ヒープを格納することができますが、それは大きなn(1億の周りのnを対象とする)にはあまりにも多くのスペースを必要とします。確かに、より少ないスペースを利用し、時間の複雑さにそれほど影響を与えない、これを行うためのよりよい方法がなければなりません。他のデータ構造はありますか?2次元平面上のn点を考えると、各点のk個の最近傍点を見つける必要があります。
答えて
この問題は、KD-treeの一般的な設定です。そのような解は直線的な複雑さを有するが、実装するのが比較的複雑な場合がある(準備が整った実装が利用できない場合)
別の方法として、ナイーブアルゴリズムの複雑さを減らすためにバケットを使用することができる。アイデアは、平面を「バケット」、すなわちあるサイズの四角形に分割し、それらが属するバケット内にポイントを配置することです。最も近いポイントは最も近いバケットからのものです。ランダムなデータの場合、これはかなり良い改善になる可能性がありますが、最悪の場合は未知のアプローチと同じです。
私はKD-Treeについて学びます。また、バケット化のアプローチもかなり良いようです。実装に適したデータ構造は何ですか?私は、二次元平面内のバケット(ノード)の間の隣接関係を表すエッジを持つグラフ上の幅広い最初の探索がかなり良いと思う。 – nighthowler
私が想像している実装では、バケットごとにセルを持つ2次元行列か、ハッシュテーブル(または他の連想配列)を使うことができます。 –
- 1. リスト内のn個の最近傍点を見つける
- 2. 2次元平面内の各点に最も近い3点を見つける
- 3. Rstudioの別の点へのベクトルのK最近傍点を見つける
- 4. 球面上の最も近い点のペアを見つける
- 5. 実装では、2次元平面上にN点を与えている
- 6. 多次元空間でSolrと最も近いn点を見つける
- 7. 距離の和を最小にするために平面内のn点間の点を見つけるアルゴリズム
- 8. igraphの頂点のn番目のレベル近傍を見つける
- 9. 他の点に最も近い点を見つける
- 10. numpy配列でn次元の点を見つける
- 11. K最近傍を見つける
- 12. n次元の近傍を見つける
- 13. 超球面上の別の点と最も近い点
- 14. 最後の点を除いて最も近い点を見つけるLibGDX Java
- 15. 2次元配列内の点を見つける
- 16. R:2次元点群の2点間の最短測地線を見つける
- 17. Kの最も近い点を見つけるための並列アルゴリズム
- 18. Matlab - 近くの点を見つける
- 19. MySQL:各点に最も近いポリゴンを見つけよう
- 20. 、平面(<em>N</em>が偶数)に<em>N</em>点を考える平面
- 21. Pythonの与えられた点から近点を見つける方法
- 22. 他の点から最も近い点を効率的に見つける
- 23. xy平面内の2つの点の間に見出しをつける
- 24. Direct3Dスプライトの最近傍点補間?
- 25. n個の球の交差に最もよく合う点を見つける
- 26. 2次元平面上に障害物があるパスを見つける
- 27. 2次元点群の外れ値のない最近隣隣
- 28. xのnumpyの配列でトップk個の最も近い点を見つけ、yは
- 29. k個の接続された頂点とワイト・サム・ベローズを見つける
- 30. 角の最も近い点を見つける
**大容量の** n **は「多くのスペース」にどの程度大きな影響を与えますか?ヒープサイズは** k **ですか?あなたはデータセットのサイズについてhttps://en.wikipedia.org/wiki/K-d_treeを考えましたか? – MBo
私は、メタは各ポイントごとに1つのminheapを考えていると思います。したがって、サイズが「k」の全「n」個のヒープが存在し、合計で「n * k」スペースをとる。 –
@SauravSahuはい、私はそのように考えました。 – nighthowler