B树与散列

本文介绍了B树的特性,包括根节点、非叶节点儿子数的范围以及所有叶节点的深度相同。同时,详细讨论了散列的冲突问题,如分离链接法和开放定址法,并分析了它们的优缺点。填装因子作为散列表效率的重要指标,也在文中提及。分离链接法和开放定址法作为解决冲突的方法,各有其适用场景和局限性。

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

M阶的B树满足的特征:
(1)树的根是一片树叶,或者是儿子数在2到M之间,即[2,M)
(2)除根外,所有非树叶节点的儿子数在⌈M/2⌉ \lceil {M/2} \rceil M/2到M之间,即[⌈M/2⌉ \lceil {M/2} \rceil M/2,M)。
(3)所有树叶都在相同的深度。
(4)一个节点最多容纳M-1个数。
在这里插入图片描述
散列
1、冲突:当两个关键字到同一个值时称为冲突。
2、解决冲突:分离链接法和开放定址法
3、填装因子:散列表中的元素个数与散列表的大小之比。
4、分离链接法:将散列到同一个值的所有元素保存到一张表中,通过散列函数查要插入的表,然后插入表头。
优点:处理简单,无堆积现象;易于删除;填装因子较小,节省空间。
缺点:给新单元分配地址需要时间,指针需要额外的空间。
填装因子接近1.
5、开放定址法:H(x) = (hash(x) + F(i))%TableSize;
填装因子小于0.5;
需要懒惰删除,因为元素可能引起了冲突绕过了当前元素,如果删除,在查找时会出错。
(1)线性探测法:F(i) = i;即使表相对较空,所占据的单元也会聚集形成一些区块,称为一次聚集。
(2)平方探测法:F(i) = ii,或者F(i) = F(i-1) + 2i-1;散列到同一位置上的元素将探测相同的备选单元,成为二次探测。
(3)双散列:有两个散列函数hash1(x)和hash2(x),当发生冲突时,用第二个散列函数来解决冲突。
(4)再散列:当元素过满或者插入时间过长,建立一个大约两倍的表,再用一个新的散列函数,将原始表中的值按照新的映射插入新表中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值