是否可以一次性从B-Tree中删除元素?
维基百科说"做一次传递树,但在进入(访问)节点之前,重构树,以便一旦遇到要删除的密钥,就可以删除它而不需要任何触发进一步重组" 但是没有说明它是如何完成的。
Google只为我提供了删除必须重新构建树的元素的过程。
Cormen对此也没有任何说法。
答案 0 :(得分:1)
可能在名为PO-B+ tree的B +树的变体中。在这个"准备操作B + tree" 节点中的键数可以在n-1和2n + 1之间,而不是通常的B + -tree中的n和2n (引自论文)。对于删除操作(在论文中称为 PO-delete ),您只需合并(在论文中称为" catenate")可以合并的所有节点(根除)(或从邻居那里拿钥匙),同时朝向叶子移动。对于 PO-insert 操作,您将拆分所有节点(包括根)。该描述在论文中给出。
如果树在多线程环境中使用,这种抢先重组才有意义,因为它减少了锁定,并增加了可靠性。如果一个树只被一个演员访问,它就不会付出代价。