81 KDツリーとRツリーの定義を見ました。それらはほとんど同じであるように私には思えます。 KDツリーとRツリーの違いは何ですか? data-structures kdtree r-tree — zjffdu ソース
60 Rツリーとkdツリーは同様のアイデア(軸に沿った領域に基づくスペース分割)に基づいていますが、主な違いは次のとおりです。 k個のdツリーのノードは分離平面を表し、Rツリーのノードは境界ボックスを表します。 k d-treeは空間全体を領域に分割しますが、R-treeは関心のあるポイントを含む空間のサブセットのみを分割します。 k dツリーは互いに素なパーティションを表します(ポイントは1つの領域にのみ属します)が、Rツリーの領域は重複する場合があります。 (スペースを分割するための同様の種類のツリー構造がたくさんあります:四分木、BSPツリー、R *ツリーなど)。 — ガレス・リース ソース
106 それらは実際にはかなり異なります。それらは同様の目的(空間データに対する領域クエリ)を提供し、両方ともツリーです(そして、両方ともバウンディングボリューム階層インデックスのファミリーに属します)が、それはそれらに共通するすべてについてです。 Rツリーはバランスが取れていますが、kdツリーはバランスが取れていません(バルクロードされていない限り)。kdツリーを再最適化するために再構築する必要がある場合があるため、データの変更にはRツリーが推奨されるのはこのためです。 Rツリーはディスク指向です。実際には、ディスク上の表現に直接マップされる領域にデータを編成します。これにより、実際のデータベースやメモリ不足の操作でより便利になります。kdツリーはメモリ指向であり、ディスクページに配置するのは簡単ではありません。 kdツリーはバルクロード時にエレガントです(これを指摘するためにSingleNegationEliminationへのkudos)が、Rツリーはデータの変更に適しています(静的データで使用するとバルクロードの恩恵を受けますが)。 Rツリーはデータスペース全体をカバーしていません。空のエリアが発見される可能性があります。kd-treesは常に空間全体をカバーします。 kd-treesはデータ空間をバイナリ分割し、R-treesはデータを長方形に分割します。バイナリ分割は明らかに互いに素です。Rツリーの長方形はオーバーラップする可能性があります(オーバーラップを最小限に抑えようとしますが、実際には良い場合もあります) kdツリーはメモリに実装するのがはるかに簡単です。これが実際の主な利点です。 Rツリーは長方形とポリゴンを格納できます。kdツリーはポイントベクトルのみを格納します(ポリゴンにはオーバーラップが必要なため) Rツリーには、さまざまな最適化戦略、さまざまな分割、バルクローダー、挿入および再挿入戦略などが付属しています。 kd木は、分離超平面までの1次元距離を境界として使用します。Rツリーは、境界の超直方体までのd次元の最小距離を使用して境界を設定します(一部のカウントクエリの最大距離を使用して、真陽性をフィルタリングすることもできます)。 kdツリーは2乗ユークリッド距離とミンコフスキーノルムをサポートしますが、Rツリーは測地距離もサポートすることが示されています(ジオデータ上の近くのポイントを見つけるため)。 — QUIT--Anony-Mousse ソース
37 この回答に記載されていない2つの主な違いは、KDツリーはバルクロードの状況でのみ効率的であるということです。一度構築されると、KDツリーの変更またはリバランスは簡単ではありません。Rツリーはこれに悩まされません。 — SingleNegationElimination ソース