`
幸运虫
  • 浏览: 47568 次
  • 性别: Icon_minigender_2
  • 来自: 甘城
社区版块
存档分类
最新评论

数据结构笔记:B-树,Splay树,Trie树

阅读更多
B-树:
1. 所有叶子节点在同一层
2. 对于m阶的B-树,除了根节点有2到m个孩子外,每个内节点有ceil(m/2)到m个孩子,或者说有ceil(m/2)-1到m-1个pairs。
3. level≤log ceil(m/2) (N+1)/2, ceil(m/2)是下标
4.
InsertDelete
Average Disk Accessesh+1h+4
Worst-case Disk Accesses3h+13h

Worst-case Disk Accesses-Insert:假设有足够的内存存放h个节点。自上往下寻找插入点需要读取h次,自下往上剪枝拆分节点需要存取2s+1次(s是被拆分的节点数),因此存取磁盘h+2s+1次,最大值为3h+1.
Worst-case Disk Accesses-Delete: 假设有足够的内存存放h个节点。自上往下寻找删除节点需要读取h次,自下往上访问兄弟节点来寻找可借用节点需要读取h-1次,同时合并节点需要写入h-2次,而在根节点时需要三次存取(两次访问兄弟节点是否可被借用,一次写入根)。

R-树:
1.从B+树变化而来,用来组织管理磁盘中被使用的数据块。
2.非长方形的数据块,使用最小可能的长方形(minimum bounding rectangles, MBRs)表示。
3.M阶的R-树的每个内结点(除根外)有m到M个子结点,其中m≤ceil(M/2);根节点有1到M个子结点。每个索引结点与其孩子具有相同的子结点数目。
4.所有叶子结点在同一层中。
5.R+树在进行插入删除等操作时,需要考虑所有可能情况,从而得到相对较优的解。
6.R+树从R-树变化而来,不同之处在于,内结点不相互覆盖,没有子结点数目的限制,数据结点大小没有限制。由于内结点不相互覆盖,可能发生同一个数据对象被切割分别存储在不同的数据结点中,这也是为什么内结点没有限制子结点数目。
7.Cell Tree是将BSP树和R+树组合到一起。内结点没有相互覆盖的凸多面体,数据结点大小没有上下界,内结点的孩子数目有下界没有上界。

Splay树(伸展树):
1. Splay节点是每种操作停止的节点。如,插入时发现已存在该节点,已存在的节点就是Splay节点;删除时把删除内节点转换成了删除叶子节点,物理意义上被删除的叶子节点的父节点才是Splay节点(因为子节点被删除了所以不是子节点,或者说最后操作的是父节点)。
2. 所有操作的实际复杂度为O(n),平摊复杂度为O(log n)。
3. Splay树所做的假设是,刚被存取过的节点近期再次存取的概率很高。对于无规律存取的应用,效率不高。
4. 由于Splay操作的目的是将Splay节点移到根节点,有些rotation是无谓的操作,且会变换节点顺序,而递归在某些特殊设计中可能不安全,会遇到递归桟溢出等现象。因此Top-down(自顶向下)Splay树可以解决这个问题,思想是将Splay节点的所有祖先节点按大小分成两棵树,然后在与Splay节点合并,令Splay节点成为根。

Trie树
1.Trie树用自根节点向下的整个通路(path)来表示数据,而不是某个特定节点包含了全部信息。对于数据相似度高的数据集,可以节省很多空间;一般应用于字符串集。
2.Compressed Binary Tries: 在Binary Tries(阶为2)的基础上增加一个域bit#,用于存储其左右子树分叉的位置是从关键字(key)的第几个bit。Compressed Binary Trie的孩子数是0或2,因为单个的子节点可以跟父节点合并,并让bit#增加1.
3.高阶Trie(High Order Tries)是阶大于2的Trie. 压缩高阶Trie就是将Compressed Binary Tries中的bit#域改为char#(其实是一个东西),并将孩子数从2扩展为m。下图中的#ptr用于存储节点中空指针的数目,个人觉得这个域并不会对提高效率产生明显影响。
4.Multibit Tries: 用于表示不同长度的字符串集,即用大于1 bit的比较来决定一个节点之后的分叉。最常用于路由器中路由表的实现,如:IP地址为11*作为父节点,1101*,1110*和1111*的不同分叉用2bits决定不同路由策略。该数据结构分两种,固定步长(fixed-Stride)和可变步长(variable-stride),步长就是用于决定分叉的bit长度,需要用动态规划算法来决定最优的步长。


Binary Tries:

Compressed Binary Tries:

Compressed High Order Tries:

Multibit Tries:


3
1
分享到:
评论

相关推荐

    B-树和AVL树源码

    3. 数据分布:B-树中的键值按照升序排列,每个节点存储一个或多个键,并根据这些键分割其子节点。 4. 存储优化:B-树的设计考虑了磁盘I/O操作,尽量减少磁盘访问次数,因为磁盘读取速度远低于内存。 接下来是AVL树...

    数据结构算法与应用(C++)

    - **章节概述**:深入讨论了树形数据结构。 - **知识点**: - 二叉树的定义及其性质。 - 二叉搜索树的实现与遍历方法。 - 平衡树(如AVL树、红黑树)的概念。 - B树与B+树的特点及应用。 ##### 第5章:散列 - ...

    高级数据结构-----刘汝佳

    **线段树**是一种用于处理区间查询和更新操作的数据结构,它通过对区间进行分治的方式实现了高效的查询和更新操作。线段树非常适合处理动态范围查询问题。 **树状数组**(Binary Indexed Tree, BIT)是一种简化版的...

    广工《算法和高级数据结构教程课程设计》

    - 数据结构:伸展树(Splay Tree) - 核心算法思想:通过伸展树维护员工工资数据,实现插入、删除、修改和查询操作。伸展树是自平衡二叉搜索树,能够保证对频繁访问的节点进行快速查找。 3. 关键代码实现: - ...

    erl-splay-tree:Erlang中的splay-tree实现

    Splay Trees在Erlang中可能用于缓存系统、数据库索引、频繁查询的数据集以及其他需要快速访问和更新的数据结构场景。通过利用Erlang的并发特性和Splay Tree的自调整性,可以实现高效且响应迅速的服务。 总的来说,...

    Splay.pdf【算法与数据结构】

    这种数据结构在很多实际应用中表现出了很好的性能,尤其是在频繁访问某些元素时,通过自动调整树的结构,使得这些元素更容易被访问。 #### 二、二叉搜索树(BST) ##### 定义与特点 - **定义**:二叉搜索树...

    Extra-Collections:Extra-Collections(或简称Extra)是一个python3软件包,它为软件项目中使用的最常见数据结构提供pythonic,直观且容易的实现

    额外收藏 :waving_hand: extra-collections (或简称extra )是一个python3封装,可为软件项目中使用的最常见数据结构提供pythonic ,直观且易于实现的功能。 其中一些数据结构很简单,例如或; 还有一些非常复杂,...

    数据结构伸展树splay.rar

    伸展树(Splay Tree),也叫分裂树,是一种二叉排序树,它能在O(log n)内完成插入、查找和删除操作。它由丹尼尔·斯立特Daniel Sleator 和 罗伯特·恩卓·塔扬Robert Endre Tarjan 在1985年发明的。 [1] 在伸展树上...

    数据结构与算法分析c++描述习题答案

    - **字典树(Trie)**:用于存储字符串集合的树形数据结构。 综上所述,《数据结构与算法分析》(第三版,使用C++语言)涵盖了计算机科学领域内非常重要的知识点,从基本的数据结构如列表、栈、队列,到更复杂的树...

    splay和动态树入门必看

    《splay和动态树入门必看》是一份针对ACM竞赛选手和计算机科学爱好者的重要学习资料,它深入浅出地介绍了动态树算法和Splay树这两种数据结构。动态树算法和Splay树在解决实际问题时,特别是对于频繁查询和更新操作的...

    数据结构二叉平衡树课程设计

    在数据结构的学习中,理解和掌握二叉平衡树是至关重要的。 1. **二叉搜索树(BST)基础**: - 二叉搜索树是一种特殊的二叉树,其中每个节点都具有一个键(key),且左子树中的所有节点的键都小于当前节点,右子树...

    数据结构Advanced-Data-Structures

    数据结构原本,大一统,外文书原版 Data structures Contents Articles Introduction 1 Data structure 1 Linked data structure 3 Succinct data structure 6 Implicit data structure 8 Compressed data structure...

    splay-tree:快速的splay-tree数据结构

    快速八叉树 :(非递归)和简单(<1000行代码)实现是直接从Wikipedia改编而成的,使用与相同的API来针对其他树运行基准测试。 该树基于D.Sleator自上而下的展开...S splaytree import SplayTree from 'splaytree'

    数据结构(二叉平衡排序树)课程设计报告

    你可能还需要讨论可能的优化方法,如引入其他类型的平衡树(如Splay树、B树或B+树)进行对比,以及在特定场景下它们各自的适用性。 通过这次课程设计,你不仅将深入理解二叉平衡排序树的原理,还将锻炼到实际问题的...

    Splay树题解1

    总的来说,Splay树是一种强大且灵活的数据结构,适用于解决需要高效动态维护区间信息的问题。其核心在于通过旋转操作优化访问路径,适应频繁访问的节点,使得操作时间复杂度在平均情况下得到改善。

    splay_tree:Rust的基于Splay树的集合(例如,地图,集合,堆)库

    splay_tree splay_tree提供基于自上而下的splay树的数据结构,例如map,set和heap。 扩展树是一种自我调整的二进制搜索树,具有最近访问的元素可以快速再次访问的附加属性。 它在O(log n)摊销时间内执行基本操作,...

    数据结构Trie及其应用.pdf

    数据结构Trie,又称前缀树或字典树,是一种用于快速检索字符串数据集的树形...总体而言,Trie数据结构在字符串处理和大数据分析领域中扮演着重要的角色,其在不同领域的应用都反映了其作为数据结构的多样性和强大功能。

    树:使用AVL,Splay和二分搜索树进行练习

    在IT领域,树是一种基本的数据结构,用于组织和存储数据,具有高效检索、插入和删除操作的特点。在本练习中,我们将重点讨论三种特殊的树类型:AVL树、Splay树和二分搜索树(也称为BST,Binary Search Tree)。这三...

Global site tag (gtag.js) - Google Analytics