- ベストアンサー
[データ構造・アルゴリズム] B木について
- B木についての要点や特徴について教えてください。
- B木の効率や利点について教えてください。
- B木のキー数とデータアクセスの効率について教えてください。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
1 はどっちなんだろう. 「100万件の中から 1件を見付ける」のかなぁ? いずれにしても「データにアクセスする回数」も曖昧だなぁ. 「アクセスするノード数」なら 16^k ≧ 10^6 を解けばよくって, 最大 5回のアクセスになります. 2: ディスクにアクセスするときは「セクタ」が単位になります. で, このセクタは通常 512バイトとかの値になり, この値にあわせてノードの大きさを決めることができる. 2分探索木ではノードが小さいが「セクタ単位でアクセスする」というディスクの特性から, ノードの大きさを適切に設定すれば「2分探索木でも B木でも 1個のノードにアクセスする時間は同じ」とすることができる. そうすれば, B木の方がアクセスするノード数が減るので高速にすることができる. 探索がやりやすいかというと, 実際にはあんまりやりやすいわけではないです. 3: データ数を n, キーの数を k とおくとアクセス効率は k log (n/k) に比例すると考えられる (キーの数が大きくなると 1個のノードが複数のセクタに分かれてしまうことがあり, このときにはアクセス時間はセクタ数に比例するとみなすことができる). 従って, 「データ数に応じた最適なキーの数」というのがあり, キーの数がそれより多すぎても少なすぎてもアクセス効率は悪くなる.
その他の回答 (1)
- Tacosan
- ベストアンサー率23% (3656/15482)
1.問題があいまいです. 「100万件のデータにアクセスする」というのは,「(大きさ不明のデータの中から) 100万個のデータにアクセスする」のでしょうか, それとも「100万件のデータのある木から 1個のデータを見つける」のでしょうか? 必要な時間は求めるのに必要な値がまったく記されていないので無視. 2.外部記憶と主記憶とでは, 「データのアクセス単位」(つまり 1回のアクセスによって得られるデータ量) が異なります. B木におけるアクセスが「ノード」を単位とすることと組み合わせれば書けると思う. 3.目的とするデータにアクセスするために「アクセスするノードの個数」や「1個のノードにアクセスするための時間」は 1つのノードに格納できるキーの数に依存します. だから本当はこれらの値を評価すればいいんだけど, 定性的には「極端に少ないとき」と「極端に多いとき」でどうなりそうかが分かれば分かる, はず.
お礼
回答ありがとうございます、返事が遅れてすみませんでした。 時間をかけてよく考えてみたのですがやはり分からず……どうしたらいいでしょうか……
お礼
詳しくて丁寧な回答本当にありがとうございます!全く分からなかったので本当に助かりました、ありがとうございます!