《数据结构与算法分析c++描述》读书笔记四——伸展树、b+树
2015-07-01 09:49
363 查看
伸展树:
对一个树任意一个节点的一次访问会使得该节点经过一系列的旋转移到根节点的位置。这样某次操作出现最坏情况访问时间为O(N),但接下来的一次访问时间将变成O(1);这样证明了虽然伸展树不排除某单次操作a花费时间是O(N),但是这次访问使得树的结构做了一系列的旋转,能减少下次操作a的时间,再引入”八二原则“(也就是说80%的人只会用到20%的数据),那么通过伸展树的多次旋转会使得常访问的节点都在根的附近,这样伸展树能保证从空
树开始任意连续的M次对树的操作最多花费M*log(N)时间,即其摊还时间是log(N)。是二叉查找树的一种改进。
但是,如果访问耗时很少,访问次数很少的时候,想伸展树这样的旋转操作就不是这么有益了,反而会消耗更多的时间。
通过分类要访问的节点a与其父节点b、祖父节c的位置关系可以把旋转操作分为两类:
1)如果b是c的左子树,a是b的左子树 或者 b是c的右子树,a是b的右子树,那么a、b、c的位置关系呈“一字形”,需要做“一字形变换”;
2)如果b是c的左子树,a是b的右子树 或者 b是c的右子树,a是b的左子树,那么a、b、c的位置关系呈“之字形”,需要做“之字形变换“。
具体旋转操作见下图。
B树
在有大量数据的时候,主存存放不下的时候就把数据存放在磁盘中,但是由于访问磁盘的速度要比访问主存的速度起码要慢上万倍,所以代价是相当大的。所以要减少对磁盘的访问次数,即要减少查找树的深度,减少查找的平均访问时间。由此引入了B树的概念,[b]B树就是M阶树,当阶数上升了,深度就降下来了。[/b]
[b] 在《数据结构与算法分析c++描述》中,只讲了关于B树的一些基本特征和查找、插入、删除操作。以后对B树有更深的了解了在添加内容。[/b]
对一个树任意一个节点的一次访问会使得该节点经过一系列的旋转移到根节点的位置。这样某次操作出现最坏情况访问时间为O(N),但接下来的一次访问时间将变成O(1);这样证明了虽然伸展树不排除某单次操作a花费时间是O(N),但是这次访问使得树的结构做了一系列的旋转,能减少下次操作a的时间,再引入”八二原则“(也就是说80%的人只会用到20%的数据),那么通过伸展树的多次旋转会使得常访问的节点都在根的附近,这样伸展树能保证从空
树开始任意连续的M次对树的操作最多花费M*log(N)时间,即其摊还时间是log(N)。是二叉查找树的一种改进。
但是,如果访问耗时很少,访问次数很少的时候,想伸展树这样的旋转操作就不是这么有益了,反而会消耗更多的时间。
通过分类要访问的节点a与其父节点b、祖父节c的位置关系可以把旋转操作分为两类:
1)如果b是c的左子树,a是b的左子树 或者 b是c的右子树,a是b的右子树,那么a、b、c的位置关系呈“一字形”,需要做“一字形变换”;
2)如果b是c的左子树,a是b的右子树 或者 b是c的右子树,a是b的左子树,那么a、b、c的位置关系呈“之字形”,需要做“之字形变换“。
具体旋转操作见下图。
B树
在有大量数据的时候,主存存放不下的时候就把数据存放在磁盘中,但是由于访问磁盘的速度要比访问主存的速度起码要慢上万倍,所以代价是相当大的。所以要减少对磁盘的访问次数,即要减少查找树的深度,减少查找的平均访问时间。由此引入了B树的概念,[b]B树就是M阶树,当阶数上升了,深度就降下来了。[/b]
[b] 在《数据结构与算法分析c++描述》中,只讲了关于B树的一些基本特征和查找、插入、删除操作。以后对B树有更深的了解了在添加内容。[/b]
相关文章推荐
- 数据结构--二叉堆、d堆、左式堆和斜堆
- 数据结构基础温故-1.线性表(中)
- 常见数据结构算法边学边记
- 数据结构-中序转后序
- sizzle.js学习笔记利用闭包模拟实现数据结构:字典(Map)
- 【数据结构】链表
- get(index) set(index value), setAll(value)都为O(1)的数据结构
- 数据结构的基本概念
- 数据结构常见面试题
- java 数据结构
- 数据结构链表的操作集合(建立,遍历,插入,删除,排序,长度,空判断等)
- 数据结构顺序表的操作全集(创建,遍历,插入,删除,排序等等)
- swift篇第一期:简单的数据结构
- 大话数据机构——第一张 数据结构绪论
- 经典算法研究系列:五、红黑树算法的实现与剖析
- 《数据结构与算法分析c++描述》读书笔记三——AVL树
- 《数据结构与算法分析c++描述》读书笔记一——表
- 数据结构和算法第一章
- 数据结构和算法系列 - AVL树
- 数据结构基础