当前课程知识点:数据结构(下) > 第八章 高级搜索树(上) > (b3)B-树:查找 > 08B3-4 主次成本
那么按照以上的策略 以及实现方式
B树的查找算法 需要运行多少时间呢
无论是从刚才的代码 还是从这张示意图
我们都可以看出 对B树的查找
依然是一个逐层深入不断减而治之的过程
而且在每一个层次上 至多只会涉及到一个节点
因此 影响整个查找算法效率的最主要因素应该是树的高度
那么在每一个高度层次 我们都需要做哪些工作呢
我们所消耗的时间 都去哪了呢
无非两个方面 第一就是这些灰色线条
也就是为了读入对应的节点所进行的IO操作
我们已经详细的分析过 就单次操作而言
此类操作要远远的慢于任何一次内存的操作
因此这方面的时间消耗 也构成了我们在每一层次上所需时间的主体
而另一方面呢 无非是在每个节点内部进行的顺序查找
没错 是顺序查找
尽管在我们刚刚给出的具体实现中
这部分查找都是通过向量内在的查找算法予以实现的
你应该记得 对于这种有序向量
完全可以采用性能更高的查找 比如二分查找
但是鉴于内外存访问在速度上的巨大差异
这种优化的效果 实际上是微乎其微的
甚至反而可能是有害的
这背后的原因非常值得细细的体位和把玩
我们此前介绍过 为了与IO操作的延迟相匹配
每一个节点的大小应该尽可能设计为与一次IO对换的页面大小相匹配
通常这个数值大致为若干个KB
因此每个节点内所含关键码的数目都大致取做几百
而实验结果表明 对于如此规模的有序向量
相对于顺序查找 二分查找的效率反而更低
接下来的一个问题就是 B树的高度h
与关键码的数目n之间是一个什么样的关系呢
可以预期 渐近的应该依然是logn
那么关键是 常系数又会有多大的区别呢
-选课之前
--写在选课之前
--宣传片
-考核方式
--考核方式
-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)希尔排序:逆序对
-本章测验
--本章测试