数据结构 | Radix Tree 树

什么是基数树?

基数树是一种多叉搜索树,数据位于叶子节点上,每一个节点有固定的2^n个子节点(n为划分的基大小,当n为1时,为二叉树)。

什么为划分的基?

以一个64位的长整型为例,我们可以将64位的长整数切分为8位一组、4位一组、2位一组甚至1位一组等:

64b46e87a77573c6f4b6935e55f68ce9.png

基数树的搜索方法是?

基数树的搜索方法是将索引的数据切片为若干小段(基),然后一小段一小段地向下查找,在有限的树高度内,一定能完成查找。

以上图数据按照8位划分为例:

e4b8873b9cd58a1a3ff3be6221aa50ba.png

可以观察到,当一个数据划分的越小块(基越小),会导致树的层数更高,但每个结点的子节点数更少,当一个数据划分的越大块(基越大),树的层数更低,每个结点的子节点数会更多。

特殊的基数树——Trie树

Trie树可以视作特殊的基数树,由于它索引的是字符串,它每个结点只有26个合法的子节点,但是由于字符串的特性,Trie树的层次是不确定的,可能存在特别长的字符串导致树的层次特别高。

基数树的插入和删除

基数树的插入和删除和其他查找树一致,对于插入操作,首先需要查找到插入位置,不存在则创建,对于删除操作,仅需删除叶子节点即可满足要求,可以不必将中间结点删除。

附上一张图源网络的插入过程:

https://juejin.cn/post/6933244263241089037

7007a7f6224e35d61d4dec73513f040e.jpeg

基数树的应用场景

(1)基数树用于内存管理,在Linux内核中,使用Radix Tree将页面组织起来,方便查找,通过Radix Tree,输入文件内偏移可以快速定位Cache项。参考:https://www.sohu.com/a/290524170_467784

(2)基数树存储公共前缀数据,基数树存储具有大量公共前缀的数据时,可以压缩数据量,如路由表(相同的IP前缀,固定的数据长度 https://github.com/openstat/ip-radix-tree)、内存地址映射(相邻的内存地址前缀相同,固定的数据长度)等场景,均可使用基数树做kv存储。

(3)用作数据库索引。参考:

https://blog.csdn.net/weixin_33699914/article/details/90594289

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值