Data structures 对于n阶B树,节点必须包含的最小密钥数是多少?
我有两本关于数据结构的书。在这两本书中,有两种不同的B-树插入方法: 假设我想在B-树中插入一个值k。 在搜索适当的叶节点以插入值k之后,对特定叶节点中存在的值进行计数。如果叶节点已满,则: 1。从叶元素和新元素中选择一个中位数。然后将节点拆分为两个节点。中位数值移到父节点。 2.在m/2-1(m是树的顺序)位置后将节点拆分为两个节点。中值移到父节点。然后将值插入适当位置。 以下哪种方法是正确的 另一个问题: 对于n阶B-树,一个节点必须包含的最小键数是多少?我已经搜索了互联网和书籍,但无法得到确切的公式,通过它我可以找到最小键数:例如,如果order=5,那么任何节点(根节点除外)的最小键数是2。这是怎么回事?Data structures 对于n阶B树,节点必须包含的最小密钥数是多少?,data-structures,Data Structures,我有两本关于数据结构的书。在这两本书中,有两种不同的B-树插入方法: 假设我想在B-树中插入一个值k。 在搜索适当的叶节点以插入值k之后,对特定叶节点中存在的值进行计数。如果叶节点已满,则: 1。从叶元素和新元素中选择一个中位数。然后将节点拆分为两个节点。中位数值移到父节点。 2.在m/2-1(m是树的顺序)位置后将节点拆分为两个节点。中值移到父节点。然后将值插入适当位置。 以下哪种方法是正确的 另一个问题: 对于n阶B-树,一个节点必须包含的最小键数是多少?我已经搜索了互联网和书籍,但无法得到
如有任何答案,将不胜感激根据Knuth的定义,m阶B-树是满足以下属性的树:
- 每个节点最多有m个子节点李>
- 每个非叶节点(根节点除外)至少具有ceil(m⁄2)子节点李>
- 如果根节点不是叶节点,则它至少有两个子节点李>
- 具有k个子节点的非叶节点包含k个−1把钥匙李>
- 所有的叶子都出现在同一层,并携带信息
└── 3267, 11108, 11357, 12080
然后加6092;这是显示钥匙,而不是儿童
└── 3267, 11108, 11357, 12080
拆分前(键数>顺序-1)[5>5-1=4]:
└── 3267, 6092, 11108, 11357, 12080
拆分后:
└── 11108
├── 3267, 6092
└── 11357, 12080
注意:根节点没有其他节点的最小键/子节点数
删除:
删除后重新平衡
如果从叶节点删除某个元素使其小于最小大小,则必须重新分配某些元素以使所有节点达到最小大小。在某些情况下,重新分配会将缺陷转移到父级,并且重新分配必须迭代地应用到树上,甚至可能应用到根级。由于最小元素计数不适用于根,因此使根成为唯一有缺陷的节点不是问题。重新平衡树的算法如下:[需要引用]
- 将分隔符添加到节点的末尾
- 用右同级的第一个元素替换父级中的分隔符
- 附加右同级的第一个子节点作为缺陷节点的最后一个子节点
- 将分隔符添加到节点的开头
- 用左同级的最后一个元素替换父级中的分隔符
- 插入左同级的最后一个子节点作为缺陷节点的第一个子节点
- 创建一个新节点,其中包含缺陷节点中的所有元素、其一个同级节点中的所有元素以及两个合并同级节点之间父节点中的分隔符
- 从父节点中删除分隔符,并用组合节点替换分隔的两个子节点
- 如果这使父节点中的元素数低于最小值,则对该缺陷节点重复这些步骤,除非它是根节点,因为根节点被允许缺陷
└── 6169, 12789
├── 1009, 4238, 5139
├── 6625
└── 12909, 14508, 14703, 14985
└── 6169, 12909
├── 1009, 4238, 5139
├── 6625, 12789
└── 14508, 14703, 14985