您的位置:首页 > 理论基础 > 数据结构算法

《数据结构与算法分析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]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: