web-dev-qa-db-ja.com

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

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

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

68
zjffdu

R-trees および kd-trees は同様の考え方(軸に沿った領域に基づいた空間分割)に基づいていますが、主な違いは次のとおりです。

  • のノード kdツリーは分離面を表し、Rツリーのノードは境界ボックスを表します。
  • kd-treesは空間全体を領域に分割しますが、R-treesは関心のあるポイントを含む空間のサブセットのみを分割します。
  • krツリー内の領域は重複する場合がありますが、dツリーは互いに素なパーティションを表します(ポイントは1つの領域のみに属します)。

(空間を分割するための類似した種類のツリー構造がたくさんあります:クアッドツリー、BSPツリー、R *ツリーなど)

54
Gareth Rees

彼らは実際にはかなり異なっています。それらは同様の目的(空間データに対する領域クエリ)を果たし、両方ともツリーですが、それはそれらが共通して持っているすべてについてです。

  • Rツリーはbalancedであり、kdツリーは(バルクロードされない限り)そうではありません。これが、kdツリーを再構築して再最適化する必要があるため、Rツリーがデータの変更に適している理由です。
  • Rツリーはディスク指向です。実際には、ディスク上の表現に直接マップされる領域にデータを整理します。これにより、実際のデータベースやメモリ不足の操作でより便利になります。 kd-treeはメモリ指向であり、ディスクページに置くのは簡単です
  • Rツリーはデータ空間全体をカバーしません。空の領域が発見される場合があります。 kdツリーは常にスペース全体をカバーします。
  • kd-trees binary splitデータスペース、r-treesはデータをrectanglesに分割します。バイナリ分割は明らかに互いに素です。一方、r-treeの長方形はオーバーラップする場合があります(オーバーラップを最小限に抑えようとしますが、実際には良い場合もあります)
  • kdツリーはメモリに実装するのがはるかに簡単です。これは実際に重要な利点です
  • Rツリーは長方形とポリゴンを保存できます。kdツリーはポイントベクトルのみを保存します(ポリゴンにはオーバーラップが必要です)
  • Rツリーには、さまざまな最適化戦略、異なる分割、バルクローダー、挿入および再挿入戦略などが付属しています。
  • Kdツリーは2乗ユークリッド距離とミンコフスキーノルムをサポートしますが、Rtreeは測地距離もサポートすることが示されています(ジオデータ上の近点を見つけるため)。
95
Anony-Mousse

this answer で言及されていない2つの間の大きな違いは、KDツリーはバルクロードの状況でのみ効率的であることです。構築されたKDツリーの変更またはリバランスは簡単ではありません。 Rツリーはこの影響を受けません。