BツリーとRツリーの比較-リンクされた一連のリンクされたリストだけではありませんか?


10

私はBツリーにかなり精通しており、主にデータベースに電気、エアコン、ハードドライブスペースを十分に供給し続ける必要があります。二重(doubl [ie、ey]?)リンクリストに関連付けます。

今日、昼食時の開発者の1人がRツリーについて言及しました。

ウィキペディアに飛び乗って読み始めました。それは背の高いBの木のようなひどい音に聞こえました。残念ながら、数学の背景が深いと、同僚の何が話しているのか理解するのが難しくなります。

誰かがBツリーとRツリーのいくつかの違いを明確にしてくれるといいのですが。私はおそらくとにかくみんなに尋ねることになるでしょうが、彼らが私の質問に答えるという保証はありません。おそらく彼らは神についてとりとめないようになるでしょう何を知っています。。。


BTreeは、二重リンクリストのようなものではありません。ツリーは、リストのように、nに比例する代わりに、log(n)操作でアクセスできます。
ハビエル

@Javier:Bツリーインデックスのリーフノードは通常、インデックスノードの兄弟検索をすばやく行うために二重にリンクされたリストです。
ジョーダン

1
純粋に技術的な質問なので、これはStackOverflowに属します(ただし、ここに再投稿しないでください。十分な人が投票してここで閉じると、自動移行されます)。
ペーテルTörök

1
これはここのトピックです:Programmers.SEはプログラミングに関する概念的な質問用です。スタックオーバーフローは、支援が必要なコードが実際にある場合に使用します。

2
@Peter Torok:古いシステムでは、これはSOの質問でした。しかし今、このサイトは存在しています。
surfasb

回答:


7

Rツリーは、bツリーの一般化と考えることができます。bツリーが、それが含むキーの「範囲内」にO(log n)アクセスを提供する場合、Rツリーは、それが含むキーの「K次元領域」にO(log n)アクセスを提供します。

郵便番号を郡名にマップする場合は、「60000から61000までの郵便番号を持つすべての郡は何ですか?」と尋ねることができるため、Bツリーを使用できます。ただし、Bツリーはキーを単一の次元でのみ注文するため、「シカゴから100マイル以内にあるすべての郡は何ですか?」のようなクエリの郡名にGPS座標をマップするのには不適切です。Rツリーは、重複する境界ボックスに従ってキーを分割するため、複数のディメンションに対してクエリを実行する必要がある場合に、キーを格納するのが自然な方法です。


私は類推が好きです。
surfasb '28

1
類推より具体的な例のように、それはまさにこれらのインデックスアルゴリズムがどのように使用されるかです。
SingleNegationElimination 2011

6

ほとんどのツリー構造は、リストの構成方法(具体的には、要素の追加と削除の方法、および該当する場合はノードの再調整の方法)を無視する限り、リンクリストの形式に減らすことができます。本質的には、あるデータ構造を別のデータ構造と区別する挿入/削除/取得アルゴリズムです。

Rツリーのノードには通常、境界ボックスが含まれています。これにより、特定の場所の「近く」にあるレコードを検索する場合に必要になる可能性があるため、場所に効率的にインデックスを付けることができます。Bツリー内の要素の順序は単純です。何かが別の要素以上であるかどうかを直接比較できます。Rツリーでは、各エントリの目的は、境界ボックスに含まれる要素を決定することです。

Bツリーを使用すると、2次メモリ(ハードディスクなど)内の注文可能なアイテムを効率的に検索できます。Rツリーを使用すると、特定のポイントまたはバウンディングボックスの「近く」にある要素を効率的に検索できます。二次記憶。


要素の数が増えるにつれて、Rツリーがその違いを示し始めているように思えますね?それとも、少し単純化しすぎですか?
surfasb

同じ数のノードが与えられた場合、非リーフノードでのバウンディングボックスデータの線形コストを除いて、スペース使用量に特別な違いは見られないと思います。しかし、Bツリーの従来の定義では境界ボックスを効率的に表すことができないので、Bツリーで空間情報を表現しようとすると、明らかに多くのスペースを使用することになります。Rツリーは空間関係用であり、Bツリーは1次元の順序のみをサポートします。
JasonTrue

2
@JasonTrue:実際には、Bツリーインデックスのバウンディングボックスを線形化する効率的な方法があります:en.wikipedia.org/wiki/Geohash。ハッシュは「効率的」ですが、特に便利ではありません。任意のバウンディングボックスクエリは、2次元空間に対して9つの別々のクエリをとる可能性が高く、ボックスが主軸(たとえば、国際日付変更線)と重なる場合、クエリの数が2倍または4倍になり、使用が非常に面倒になります。これにもかかわらず、線形インデックスが利用可能な唯一の種類である場合、それはまだオプションです。
SingleNegationElimination 2011
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.