問題タブ [kdtree]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - kdtree の C++ で OO を使用して一連のキーを実装する方法
k -d ツリーに適合する B+ ツリーを実装する必要があります。これを簡単に説明すると、k -d 木は二分木に似ていますが、ノードに多値キー (複数の値を持つキー) がある点が異なります。また、内部ノードはキーの値の 1 つだけを格納するためのものであり、実際のデータはリーフ ノードに格納されるため、B+ ツリーにもなります。これを図で簡単に説明すると、次のようになります。
リーフ ノードには 2 つの要素用のスペースがあります。最初の 2 つを追加すると、すべて正常に動作しますが、3 つ目を追加して分割する必要があります。そのために、キーの最初の値を順序を定義するものとして選択するため、3 つの要素すべての中央値を取得すると、結果は 27 になるため、27 未満のすべての要素は左に移動し、それよりも大きい要素は左に移動します。右に行くよりも等しい。
4 番目の要素を追加すると、Tom と Linda の年齢は 27 歳未満であるため、すでに葉ノードを完成させています。息子が Dom を追加すると、ノードが再び分割されますが、今回は、Social である順序を定義するキーの値を切り替える必要があります。セキュリティ番号。再び中央値を取ると、結果は 530 なので、SS 番号が 530 未満のものはすべて左に移動します。
最終的なk -d ツリーが生成され、キーの特定の値が内部ノードのインデックスとして使用され、完全なキーがリーフ ノードに含まれます。
ここで私の質問は、コンテキストを説明した後、リーフ ノードに完全なキーを格納する必要があることを考えると、キーのソリューションをどのように実装できるかということですが、内部ノードではキーの値の 1 つだけを使用します。 .
値を持つ複数のフィールドがあるデータベースとの類似性に気付くことができます。また、異なるフィールドで同時に情報を並べ替えることができます。
上記の例では、すべての値を保持する属性を使用して、名前付きまたはその他の名前class
を作成することを考えました。これは、年齢、SSNumber、および名前の場合があります。しかし、私の問題は、クライアントがより多くの値を追加したいと判断した場合、私のクラスはどんどん大きくなっていくということです。これは良い OO の決定ですか? これを別の方法で実装しても OO のままにすることはできますか? 私の想像力が貧弱であることは承知していますが、クライアントがより多くの値を望んでいると想定できるので、私の値を保持するある種のリストを作成することができます。オブジェクト指向のアプローチのようには聞こえません。何か案は?Key
int
int
string
また、ツリーのアルゴリズムのある時点で、ツリーのインデックスとして使用するキーの 1 つの属性を取得する必要があるため、これもサポートする必要があることを追加したいと思います。
オブジェクト指向のアプローチに従ってこれを解決する方法を教えていただければ幸いです。
python - 経度/緯度の KDTree
球の表面の経度/緯度に対して kdtree のような操作を実行できる Python のパッケージはありますか? (これには、球面距離と経度のラップアラウンドを適切に考慮する必要があります)。
c++ - C++ での QuadTree または Octree のテンプレート化された実装
KDTree のテンプレート化された実装を作成します。これは今のところ、BarnesHut 実装の Quadtree または Octree としてのみ機能するはずです。
ここで重要な点は設計です。ツリーが定義されている次元の数をテンプレート パラメーターとして指定し、いくつかの一般的なメソッドを宣言するだけで、自動的に正しい方法で動作します (テンプレートの特殊化が必要だと思います)。
2^2 (quadtree) または 2^3 (octree) ノードを持つために、テンプレートを特殊化したいと考えています。
誰かがいくつかのデザインのアイデアを持っていますか? 静的割り当てではなく動的メモリ割り当てを行うように制約されるため、継承を避けたいと思います。
ここで、N は 2 または 3 です
もう 1 つの問題は、quadtree には 4 つのノードがありますが 2 次元であり、octree には 8 つのノードがありますが 3 次元です。つまり、ノードの数は です2^dimension
。これをテンプレート メタプログラミングで指定できますか? ループアンローラーが高速になるように、番号 4 と 8 を維持したいと思います。
ありがとうございました!
computer-vision - SIFTと同様の機能を備えたCBIR、離散アプローチと連続アプローチ
現在、オブジェクト認識(オブジェクト分類の詳細)のためのCBIRシステムの実装を扱っていますが、機能検出器と記述子が機能しているので、コンテンツベースのタスクでこれらの機能を処理するための最良の方法を見つけようとしています。画像検索。
私の知る限り、このタスクには2つの主要な傾向があります。それは、離散的アプローチと連続的アプローチです。ここで、discreteは、テキスト検索を参照するメソッドを適用するための転置インデックスを構築するためのbag-of-visualワードやコードブックなどのメソッドを表し、continuousは、kdツリーと最近傍分類を使用したBestBinFirst検索などのメソッドを表します。
したがって、これら両方のアプローチの主な違いの1つは、1つは視覚的な単語などの機能の追加表現で機能し、もう1つは記述子から計算されたnD機能で機能することです。
私の質問は今、私のタスクに最適なアプローチを見つけるのに役立つ可能性のあるCBIRの2つの方法の比較はありますか?
algorithm - KD TREES(3-D)最近傍探索
KDツリーの最近傍探索のウィキペディアページを見ています。
ウィキペディアで提供されている擬似コードは、ポイントが2-D(x、y)の場合に機能します。
ポイントが3-D(x、y、z)の場合、どのような変更を加える必要があるかを知りたいです。
私はたくさんグーグルで検索し、スタックオーバーフローで同様の質問リンクを調べましたが、3D実装は見つかりませんでした。前の質問はすべて、入力として2Dポイントを取りますが、私がいる3Dポイントではありません。探している。
KDツリーを構築するためのWikiの擬似コードは次のとおりです。
KDツリーを構築した後、今すぐ最近傍を見つける方法は?
ありがとう!
java - MapReduce を使用して kd ツリーを構築しますか?
画像機能の KD ツリー (独立) を構築しようとしています。画像の特徴を抽出しました。特徴には1000個の浮動小数点値が含まれているとします。
map-reduce を使用して、分類 (例: 猫、犬、銃) に従ってクラスターのノード間で画像を分散します。各ノードには一連の類似画像が含まれ、各ノードで画像の KD ツリーが構築されます。ツリーをどのように構築できるかについて混乱しています。
では、map-reduce を使用して KD ツリーを構築するにはどうすればよいでしょうか? 各ノードにはツリーが含まれますよね?画像を配布するロジックは何でしょうか? KD ツリーを構築する際、どのような基準で画像特徴ベクトルをツリーに追加する必要がありますか (つまり、左または右の子)?
事前に感謝します。
java - map-reduceを使用した分散KDツリーの構築
map-reduceを使用して分散KDツリーを構築しようとしています。分散KDツリーの説明はここで見つけることができますDkd-Tree
次元20の画像の特徴ベクトルがあります。上記のリンクに従って分散kdツリーを構築する必要があります。この画像もチェックしてください。Kdtree
私は何百万もの画像のセットを持っています。 では、ツリーの最上部(画像の2番目の部分)を構築するためにどのような方法を使用できますか? さまざまなノード間の画像分布に混乱しています。
ツリーが最初のmap-reduce操作でHDFSに構築されている場合、次のmap-reduce操作でツリーにアクセスするにはどうすればよいですか?
mysql - kdツリーのインデックス作成?
kd ツリーのインデックスを作成し、後でその一部を照合できるようにする必要があります。
MySQL は次のことができますか? 代替手段はありますか?
algorithm - kd-TreeはK-meansクラスタリングの代替手段ですか?
私はBOWオブジェクト検出に取り組んでおり、エンコード段階に取り組んでいます。エンコーディング段階で使用するいくつかの実装を見てきましたが、ほとんどの文章は、クラスタリングが進むべき道であるkd-Tree
ことを示唆しています。K-means
2つの違いは何ですか?
java - KDツリー-最近傍アルゴリズム
ウィキペディアのO(log n)最近傍アルゴリズムをよく理解していません。
- …</li>
- …</li>
- アルゴリズムはツリーの再帰を巻き戻し、各ノードで次の手順を実行します。
- ..。
- アルゴリズムは、分割平面の反対側に、現在の最良のものよりも検索ポイントに近いポイントがあるかどうかをチェックします。概念的には、これは、現在の最も近い距離に等しい半径を持つ検索ポイントの周りの超球と分割超平面を交差させることによって行われます。超平面はすべて軸に沿って配置されているため、これは、検索ポイントと現在のノードの分割座標の差が、検索ポイントから現在の最良までの距離(全体の座標)よりも小さいかどうかを確認するための単純な比較として実装されます。
- ハイパースフィアが平面を横切る場合、平面の反対側に近いポイントが存在する可能性があるため、アルゴリズムは、検索全体と同じ再帰プロセスに従って、現在のノードからツリーのもう一方のブランチを下に移動して、より近いポイントを探す必要があります。 。
- ハイパースフィアが分割平面と交差しない場合、アルゴリズムはツリーを上に移動し続け、そのノードの反対側のブランチ全体が削除されます。
私を混乱させているのは3.2であり、私はこの質問を見てきました。私はJavaでアルゴリズムを実装していますが、それが正しいかどうかわかりません。
上記のコードはアルゴリズムの3.2の側面を達成していますか?具体的には、「axisAlignedDistance」変数を設定します。
KDTreeの完全なソースコードはここにあります。
ヘルプ/ポインタをありがとう。