web-dev-qa-db-ja.com

B +ツリーの最小占有率が50%であるのはなぜですか?

私の知る限り、B +ツリーの基本的な操作(追加、削除、検索)は、最小占有率が1、1/3、またはノードサイズの他の機能であれば、同じように機能します。

利用可能なすべてのソースは、最小占有率を50%としています。なぜ50%ですか?

5
romnempire

50%を超える最小占有率は機能しません。ノードがいっぱいになっているためにノードを分割する必要がある場合、結果として生じる2つのノードが50%を超えるようにノードをカットすることは不可能だからです。 (たとえば、60/40またはそのようなことを行うことができますが、小さいノードは常に、たとえば、各ノードのデータ構造の不変量が60%を超えると失敗します)

目標はセカンダリストレージ/メモリから最小限の数のノードを読み取る必要があるため、50%未満の最小占有率はスペースを浪費し、各ノードの空スペースの量を増やすことは、平均的なリクエストがより多くの数を読み取る必要があることを意味しますディスクからのノードの。 (分割操作が2つのチャンクではなく1 /(比率)チャンクに分割する必要があることを考えると、効果的に実装するのも難しいでしょう)

5
Billy ONeal

B +ツリーでは、各ノードが親ノードからのエントリを1つ持つ必要があるため、最小占有率1は不可能です。

占有率が50%未満の場合は、ノード間でエントリを再配布することでツリーをより効率的にでき、2つのノードの占有率が50%未満の場合は、1つのノードにマージされます。または、Billy ONealが指摘するように、ノードを分割することでツリーが成長し、占有率が50%未満になると、1つのノードを3つ以上に分割する必要があります。

3
Jaydee