KDツリーとRツリーの違いは何ですか?


81

KDツリーとRツリーの定義を見ました。それらはほとんど同じであるように私には思えます。

KDツリーとRツリーの違いは何ですか?

回答:


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ツリーは測地距離もサポートすることが示されています(ジオデータ上の近くのポイントを見つけるため)。

37

この回答に記載されいない2つの主な違いは、KDツリーはバルクロードの状況でのみ効率的であるということです。一度構築されると、KDツリーの変更またはリバランスは簡単ではありません。Rツリーはこれに悩まされません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.