B/B+树

本文介绍了内存与磁盘的性能差异,指出B/B+树如何优化寻址效率。B-树作为一种平衡多路搜索树,其性质包括每个节点的最大子树数、叶子节点位置等。在内存管理中,当节点超出容量时,B-树会进行分裂操作。文章详细阐述了B-树的插入和删除过程,并探讨了如何通过借位和合并来保持结构平衡。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.内存与磁盘

        内存快,磁盘慢(寻址慢)

        内存断电后数据消失,磁盘持久存久

        正因为磁盘的寻址慢,那么红黑树由于寻址的次数过多,所以不适合

        B/B+树降低层高,加快寻址

        一个块4K(linux默认),Btree有1024叉,4G的内存空间两次寻址就能找到

2.B-树的性质

        一颗M阶B树T,满足以下条件

        1. 每个结点至多拥有M棵子树

        2. 根结点至少拥有两颗子树

        3. 除了根结点以外,其余每个分支结点至少拥有M/2课子树

        4. 所有的叶结点都在同一层上

        5. 有k棵子树的分支结点则存在k-1个关键字,关键字按照递增顺序进行排序

        6. 关键字数量满足ceil(M/2)-1 <= n <= M-1

3.B-树数据结构定义

        

typedef int KEY_VALUE;
struct btree_node{
    KEY_VALUE *keys;
    //指针的数组而不是二维数组
    struct btree_node **childrens;//malloc 好处在于sizeof不会特别大
    int num;
    bool isleaf;//是否叶子节点
                //事实上int和bool是一样的,因为边界对齐
};

struct btree{
    struct btree_node *root;
};

4.B-树的分裂

        添加超过上限的节点时,两种情况

        a.只有根节点时,一分三

        

        b.其他情况一分二(小技巧是选偶数的M便于分裂,将中间的直接提上去就好了)

5.B树添加

        两个步骤,1.找到对应的节点2.对节点的key进行对比,找到合适的位置

        插入的位置是叶子节点

6.B树删除

        1.idx子树数量== ceil(m-2)-1,[idx - 1],[idx + 1]

                A.借位

                        a.从idx-1借位

                        b.从idx+1借位(哪个大于ceil(m/2) -1借哪个)

                B.合并

        2.大于最小限度直接删除即可

        步骤:第一步:找到对应的子树,第二步:按照上述方法调整

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值