博客
关于我
Java数据结构与算法-多路查找树(2-3树,B树,B+树,B*树)[day11]
阅读量:679 次
发布时间:2019-03-16

本文共 1002 字,大约阅读时间需要 3 分钟。

多路查找树

多路查找树是一种优化传统二叉树的数据结构,通过提高节点的容量和效率来降低数据存储和查询复杂度。这种树的设计针对大量数据的存储和检索问题进行了优化。

多叉树

二叉树在处理海量数据时存在以下问题:

  • 节点较多时的构建问题:当数据量大时,多次I/O操作会显著降低构建效率。
  • 树高导致的性能问题:大量节点会导致树的高度增加,从而降低查找效率。
  • 多叉树(multiway tree)通过允许每个节点具有更多的数据项和子节点来解决这些问题。常见的多叉树类型包括2-3树、2-3-4树等。多叉树通过重新组织节点结构,显著减少树的高度,从而提升查询速度。

    B树

    B树是一种广泛应用于文件存储和数据库系统的多路查找树。其核心特点是通过定期重新组织节点,降低树的高度和读取次数。每个节点的大小通常设置为磁盘的一个页面(如4KB),确保每次I/O操作可以一次性读取整个节点。B树的阶(M)设置为1024,这样对于最大存储空间(如600亿个元素),仅需4次I/O操作即可读取目标元素。

    B树的搜索过程如下:

  • 从根结点开始,按照键值在当前节点内的范围内进行二分查找。
  • 如果找到目标键值,查询结束。
  • 否则,进入目标键值所在子树,并重复第一步,直到命中叶子节点或出现无法继续的情况。
  • 2-3树

    2-3树是B树中最简单的变体。其特点包括:

  • 所有叶子节点位于同一层。
  • 二节点(有两个子节点)和三节点(有三个子节点)按规则构建。
  • 数据插入时需遵循BST的有序性规则。
  • 下面是构建2-3树的示例:

    • 插入顺序:16, 24, 12, 32, 14, 26, 34, 10, 8, 28, 38, 20。
    • 处理规则:当插入数据时,若不能满足二节点或三节点的要求,则需拆分并调整上层节点。

    B+树

    B+树是一种变体,用于提高文件系统和数据库的性能。其特点包括:

  • 数据仅存在于叶子节点(稠密索引)。
  • 搜索性能与B树相同,但B+树不允许在非叶子节点命中。
  • 非叶子节点仅作为叶子节点的索引,叶子节点存储实际数据。
  • B+树的结构优化了磁盘预读原理,通过增加非叶子节点的最小键值数量,提升数据存储和检索效率。

    B*树

    B*树是B+树的一种变体,其特点包括:

  • 非叶子节点的最小键值数量为(2/3) * M(约为666),比B+树的1/2更高。
  • 新结点分配的概率低,空间利用率更高。
  • B*树在存储层面优化了空间利用率,同时保持了与B+树相同的查找性能。

    转载地址:http://xrvqz.baihongyu.com/

    你可能感兴趣的文章
    mysql8.0新特性-自增变量的持久化
    查看>>
    Mysql8.0注意url变更写法
    查看>>
    Mysql8.0的特性
    查看>>
    MySQL8修改密码报错ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
    查看>>
    MySQL8修改密码的方法
    查看>>
    Mysql8在Centos上安装后忘记root密码如何重新设置
    查看>>
    Mysql8在Windows上离线安装时忘记root密码
    查看>>
    MySQL8找不到my.ini配置文件以及报sql_mode=only_full_group_by解决方案
    查看>>
    mysql8的安装与卸载
    查看>>
    MySQL8,体验不一样的安装方式!
    查看>>
    MySQL: Host '127.0.0.1' is not allowed to connect to this MySQL server
    查看>>
    Mysql: 对换(替换)两条记录的同一个字段值
    查看>>
    mysql:Can‘t connect to local MySQL server through socket ‘/var/run/mysqld/mysqld.sock‘解决方法
    查看>>
    MYSQL:基础——3N范式的表结构设计
    查看>>
    MYSQL:基础——触发器
    查看>>
    Mysql:连接报错“closing inbound before receiving peer‘s close_notify”
    查看>>
    mysqlbinlog报错unknown variable ‘default-character-set=utf8mb4‘
    查看>>
    mysqldump 参数--lock-tables浅析
    查看>>
    mysqldump 导出中文乱码
    查看>>
    mysqldump 导出数据库中每张表的前n条
    查看>>