1、应用背景

二叉查找树、AVL树、红黑树等都属于二叉树的范围,查找的时间复杂度是O(log 2N),与树的深度相关,那么降低树的深度自然会提高查找效率。
但是我们面对这样一个实际问题:大规模数据存储中,树节点存储的元素数量是有限的(如果元素数量非常多的话,查找就退化成节点内部的线性查找了),这样导致二叉查找树结构由于树的深度过大而造成磁盘I/O读写过于频繁,进而导致查询效率低下。
因此,为了减少磁盘I/O的次数,必须降低树的深度,将“瘦高”的树变得“矮胖”。一个基本的想法就是:

  • 每个节点存储多个元素
  • 摒弃二叉树结构,采用多叉树

这样就引出来了一个新的查找树结构 ——多路查找树。根据AVL树给我们的启发,一颗平衡多路查找树可以使得数据的查找效率保证在O(logN)这样的对数级别上。

1.1 机械硬盘结构

为什么树的深度会与磁盘I/O相关呢?这要从硬件层面来说明。
机械硬盘的结构图如下:

硬盘中一般会有多个盘片组成,每个盘片包含两个面,每个盘面都对应地有一个读/写磁头。
每个盘面都被划分为数目相等的磁道,并从外缘的“0”开始编号,具有相

数据结构之B树、B+树、B*树相关推荐

  1. 数据结构与算法笔记(十三)—— 树与树的算法

    一.树的概念 树(英语:tree)是一种抽象数据类型(ADT)或是实作这种抽象数据类型的数据结构, 用来模拟具有树状结构性质的数据集合.它是由 n(n>=1)个有限节点组成一个具有层次关 系的集 ...

  2. 【数据结构-树】1.树与森林(树的遍历、树的存储方法、并查集的实现)

    树的定义 树是一种数据结构,它是由 n(n>=1)n(n>=1)n(n>=1) 个有限结点组成一个具有层次关系的集合.把它叫做 "树" 是因为它看起来像一棵倒挂的 ...

  3. 数据结构与算法之判断一棵树是否为搜索二叉树、判断一棵树是否是完全二叉树

    数据结构与算法之判断一棵树是否为搜索二叉树.判断一棵树是否是完全二叉树 目录 判断一棵树是否为搜索二叉树 判断一棵树是否是完全二叉树 1. 判断一棵树是否为搜索二叉树 概念:搜索树就是中序遍历的结果是 ...

  4. 我的软考之路(四)——数据结构与算法(2)之树与二叉树

    上篇博文主要介绍的是数据结构的线性结构,我们这篇博文介绍非线性结构-树与二叉树,我先介绍树的一些基本概念,树的遍历,再介绍二叉树相关概念和特性,以及二叉树的遍历,最后再树与二叉树的对比,总结. 树为了 ...

  5. 【技术点】数据结构--B树系列之B+树(五)

    文章目录 前言 B+树的结构 Key & Data 叶子节点保存数据:减少I/O的设计 中间节点的索引作用 链表的作用:范围查询 B+树的操作 插入 删除 B+树总结 B*树 总结 前言 前面 ...

  6. 数据结构(十六)——左高树(含合并过程详细图解)

    文章目录 前言 左高树 什么是左高树? 为什么要使用左高树? 最大左高树实现及复杂度分析 节点类和最大左高树类 合并方法 插入(push).删除(pop) 初始化 左高树合并图解 前言 看到左高树的时 ...

  7. 数据结构练手小项目(AVL树、哈希表、循环链表、MySQL数据库)

    文章目录 前言 正文(无删减) 我的想法(删减修改版) 数据导入与数据存储 功能实现 数据结构 用户结构 SIM卡结构 AVL树数据结构 哈希表结构 数据表 用户表 SIM卡表 时间安排 前言 本月主 ...

  8. Python数据结构11:树的实现,树的应用,前中后序遍历,二叉查找树BST,平衡二叉树AVL树,哈夫曼树和哈夫曼编码

    1.概念 树一种基本的"非线性"数据结构. 相关术语: 节点Node:组成树的基本部分.每个节点具有名称,或"键值",节点还可以保存额外数据项,数据项根据不同的 ...

  9. 《数据结构与算法》(十一)- 树、森林与二叉树的转换及哈夫曼树详解

    目录 前言 1. 树.森林与二叉树之间的转换 1.1 树转换为二叉树 1.2. 森林转换为二叉树 1.3. 二叉树转换为树 1.4 二叉树转换为森林 1.5 树与森林的遍历 2. 哈夫曼树及其应用 2 ...

  10. 数据结构—2-3树、2-3-4树、B树、B+树等多路查找树的原理详解

    详细介绍了多路查找树中的2-3树.2-3-4树.B树.B+树的概念的区别,以及它们的应用场景. 文章目录 1 多路查找树的概述 1.1 索引概述 1.2 多路查找树的引出 2 2-3树 2.1 2-3 ...

最新文章

  1. hibernate三级缓存概括
  2. base64 数据处理
  3. mac终端输入密码被阻止
  4. nor flash启动与nand flash启动的区别
  5. 工作多年的.NET程序员,是否建立了自己的开发知识库?分享制作电子书的经验...
  6. python语法基础知识案例_Python 语法速览与实战清单
  7. JVM Java内存区域 与 内存溢出 (系列号1)
  8. php7.0不出结合项,帝国CMS结合项提示“您来自的链接不存在”
  9. 深度学习软件资源列表
  10. linux系统配置设置网络端口映射,Linux 配置端口映射
  11. 嵌入式软件开发好,还是硬件开发好?
  12. wifi信号衰减与距离关系_wifi无线信号传输衰减距离计算公式
  13. Linux系统安全及应用详解
  14. rpm 如何安装mysql_如何使用rpm安装MySQL
  15. IDEA2021+Tomcat8+Servlet加载别人的项目时无web application导致无法进行Tomcat部署及实现Servlet程序的解决办法
  16. 运算放大器单电源设计
  17. 不会用PS、Excel更改证件照颜色没关系,用Word更改不用1分钟!
  18. 百度地图js轨迹展示
  19. 学习Masonry框架 - iOS
  20. 洛谷4774 BZOJ5418 NOI2018 屠龙勇士 扩展中国剩余定理 multiset

热门文章

  1. 宝塔面板如何添加免费的waf防火墙?
  2. 并发编程入门(五):Java并发包和Java8并发
  3. 使用POI导出数据和图片,
  4. android新浪微博改进版
  5. Android10的WIFI 名称读取为空解决
  6. 倾斜摄影行业背景知识介绍
  7. 数据可视化---将某个股票每天收盘价通过matplotlib生成折线图
  8. HYSBZ 1588 营业额统计 伸展树
  9. 官方活动|最高可免费领60天会员时长
  10. 研究生查分方式-查分时间大汇总-文都管联院