当前课程知识点:数据结构(下) > 第八章 高级搜索树(上) > (b2)B-树:结构 > 08B2-3 还是I/O
这背后的原因恰恰在于
在我们通常都是按多个层次来分级组织的存储系统中
如果使用B树可以针对我们此前所说的外部操作
大大降低IO访问的次数 从而极大的提高计算效率
那么难道我们此前业已熟悉的AVL树在这方面还不够么
我们不妨具体估算 考察某个由10的9次方 1G个记录的数据集
如果将它们组织为一棵AVL树 高度大致为30层
也就是说 在最坏的情况下 单次查找需要深入30层
而每一层我们都需要执行一次IO操作
那么B树又能如何呢
我们刚刚看到 B树中的超级节点同时包含多个而不是单个关键码
因此在B树中每下降一层 都可以超级节点为单位
读入一组而不是单个关键码
从而将外存批量访问的特点 转化为实在的优点
如果将关键码比作粉笔
那么每一个超级节点都相当于那列火车的一节车皮
其中既可以装载一根粉笔 也可以装载一大堆
既然如此 采用B树的策略将它们成批的而不是单个的读取
也是再自然不过的
那么这样一节车皮具体的应该设计为多大呢
这取决于磁盘等外存本身所设定的数据缓冲页面的大小
通常的情况下 都是若干个KB
如果每个关键码通常取做4个字节的话
那么很自然的就应该将每个超级节点的规模设置为200至300之间
比如若将超级节点的规模 取做256 也就是2的8次方
那么同样存放1G个记录的B树 高度不会超过4
这就意味着即便在最坏的情况下
单词查找所需进行的IO操作也同样不超过4次
是的 4次对30次 我们说这是很大的一个提高
讲到这里 你或许会有一个疑问
难道4和30不都是可以视作常数吗
是的 就渐近的意义而言 的确如此
但是当这个常数的每一个单位都相当于10的5至6次方时
我们就不得不斤斤计较了
这就犹如虽然1秒和1天乃至1年 都可以视作是常数
但是对于有限的人生来说 却有本质的区别
比如绝大多数人都会接受花费4年的时间就读大学获得一个学士学位
但如果将这个期限换成30年 我想应该不会有很多人继续做此选择了
-选课之前
--写在选课之前
--宣传片
-考核方式
--考核方式
-OJ系统说明
--关于OJ
--1-注册与登录
--2-界面与选课
--3-提交测试
-关于课程教材与讲义
--课程教材与讲义
-关于讨论区
--关于讨论区
-微信平台
--html
-PA晋级申请
--PA晋级
-(a)概述
--07A-1 纵览
--07A-5 接口
-(a)概述--作业
-(b1)BST:查找
-第七章 二叉搜索树--(b1)BST:查找
-(b2)BST:插入
-(b2)BST:插入--作业
-(b3)BST:删除
-第七章 二叉搜索树--(b3)BST:删除
-(c)平衡与等价
-(c)平衡与等价--作业
-(d1)AVL树:重平衡
-第七章 二叉搜索树--(d1)AVL树:重平衡
-(d2)AVL树:插入
-(d2)AVL树:插入--作业
-(d3)AVL树:删除
-(d3)AVL树:删除--作业
-(d4)AVL树:(3+4)-重构
-(d4)AVL树:(3+4)-重构--作业
-本章测验
--章节测验
-(a1)伸展树:逐层伸展
--习题
-(a2)伸展树:双层伸展
--习题
-(a3)伸展树:算法实现
--习题
-(b1)B-树:动机
--习题
-(b2)B-树:结构
--习题
-(b3)B-树:查找
--习题
-(b4)B-树: 插入
--习题
-(b5)B-树: 删除
--习题
-(xa1)红黑树:动机
--习题
-(xa2)红黑树:结构
--习题
-(xa3)红黑树:插入
--习题
-(xa4)红黑树:删除
-本章测验
--习题
-(b)散列:原理
--09B-3 数组
--09B-4 原理
--09B-5 散列
--09B-6 冲突
--习题
-(c)散列:散列函数
--习题
-(d1)散列:排解冲突(1)
--习题
-(d2)散列:排解冲突(2)
--习题
-(e)桶/计数排序
--习题
-本章测验
--本章测试
-(a1)需求与动机
--习题
-(a2)基本实现
--习题
-(b1)完全二叉堆:结构
--习题
-(b2)完全二叉堆:插入与上滤
--习题
-(b3)完全二叉堆:删除与下滤
--习题
-(b4)完全二叉堆:批量建堆
--习题
-(c)堆排序
--习题
-(xa1)左式堆:结构
--习题
-(xa2)左式堆:合并
--习题
-(xa3)左式堆:插入与删除
-本章测验
--本章测试
-(a)ADT
--习题
-(b1)串匹配
--习题
-(b2)蛮力匹配
--习题
-(c1)KMP算法:从记忆力到预知力
--习题
-(c2)KMP算法:查询表
--习题
-(c3)KMP算法:理解next[]表
--习题
-(c4)KMP算法:构造next[]表
--习题
-(c5)KMP算法:分摊分析
--习题
-(c6)KMP算法:再改进
-(d1)BM_BC算法:以终为始
-(d2)BM_BC算法:坏字符
-(d3)BM_BC算法:构造bc[]
-(d4)BM_BC算法:性能分析
-(e1)BM_GS算法:好后缀
-(e2)BM_GS算法:构造gs表
-(e3)BM_GS算法:综合性能
-(f1)Karp-Rabin算法:串即是数
-(f2)Karp-Rabin算法:散列
-本章测验
--本章测试
-(a1)快速排序:算法A
-- 12a1-5: 实例
--习题
-(a2)快速排序:性能分析
--习题
-(a4)快速排序:变种
-(b1)选取:众数
-(b3)选取:通用算法
--习题
-(c1) 希尔排序:Shell序列
--习题
-(c2)希尔排序:逆序对
-本章测验
--本章测试