サイズN
の順序付けられていない要素のリストからB +ツリーを作成したいとします。与えられたリストから効率的にB +ツリーを構築するには?
私は、それを行うための最適な境界は、ブロック転送であることを知っています。これはソートにも最適です。だから私は単純にアイテムを選択してツリー内に個別に挿入することはできません。なぜなら、ブロック転送をO(N logB(N))
にするからです。
私はツリーを構築する最善の方法は、葉がとにかく順序付けされているので、最初に要素を並べ替えることだと思いました。それから、私は迷っています。
私はこのような何かについて考えた:彼らはどこかにあるとしてリスト
- テイクB要素は、それらを書く(それは3の葉です)
- ブロックの最後の要素を取ります(最大)。
- 親にB-1ルーティングキーが存在するまで、次の要素に対してステップ1を繰り返します。
- 親にルーティングキーがある場合、それはフル。だから、
N/B
ブロックは基本的に
を読み取られるまで、このように起こっておいてください新しいルーティングキーは(そうツリーは1つのレベルを増大する)代わりに、「祖父」を行くと、すべての新しい葉が新しい親
私はどこにでも見えましたが、実際にはは、Θ(N/B * logM/B(N/B))
にツリーを構築する方法を説明するアルゴリズムを見つけることができませんでした。私が見つけたのは、B因子を利用することなく、リスト内の各項目のツリーへの挿入が簡単なアルゴリズムです。
私を助けてくれますか、私に正しい方向を教えてもらえますか?
については、「新しいルーティングキーは代わりに祖父に行きます」とは、祖父に入る新しいキーではなく、古い父の中間キーです。新しい鍵は新しい父に入る – mangusta
あなたは正しい、私の間違いだ!内部ノードがB-1要素に到達するたびに分割すると、ノードあたりの子の最小数を考慮してツリーが構築されていることが保証されます。ありがとう! – Beriol