zoukankan      html  css  js  c++  java
  • radix树

    今天在学Linux内核页高速缓存时,学到了一种新的数据结构radix树(基数),经过分析,感觉此数据结构有点鸡肋,有可能是我理解不到位吧。

    先来张图,给大家以直观的印象

    当有一个key-value型的数据结构,它的key是从0-255共256个int型数字,如果用数组来存储的话,只是key的部分,需要256*sizeof(int)个字节。

    但如果把key看作是一个bit序列,从00000000-11111111,按照字典树的思想,把8位bit分成4个部分,每一部分就对应上面树的一层,那么我们就会得到上图所示的一个radix树。上面的树中有4+16+64+256=340个节点。

    如果把这个树扩展到32个bit,即一个int型所能表示的范围,如果用数组的话,只是key部分就需要4G*4B=16G

    如果把32个bit分成每6个bit一组,那么形成的radix树最多就是6层,形成节点数:64+642+643+644+645+646不用算了,这个数远远大于16G。

    于是我们可以得到一个结论,如果树是满的话,我们根本没有必要使用radix树。

    在网上查询一些资料,radix适用于一些稀疏的存储。这样就说得通了。但我又有疑问了,在稀疏的情况下,为什么我们不用hash表,甚至是排序的红黑树呢?

    以上是一些自己的想法,在些先写下来,也可能它在一些情境下,的确是比较适用的。不管怎么说,它提供的思想还是很好的,在key的位数比较固定的情况下,用它来代替hash表没准也是一个好的选择。

  • 相关阅读:
    记录cacti时间筛选bug的解决办法
    mysql开启远程访问权限
    Mysql 5.7.32 安装cacti-0.8.8h出错
    记录Apache无法解析PHP代码解决方法
    zabbix5.0安装问题:Time zone for PHP is not set
    数据库以及数据表的创建
    小程序框架wepy
    通用的代码总结
    html网页什么样的字体最好看,css设置各种中文字体样式代码
    vue中使用BetterScroll(网上)
  • 原文地址:https://www.cnblogs.com/hxdoit/p/3650275.html
Copyright © 2011-2022 走看看