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

[size=large]B-树:[/size]
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.
[table]
||Insert|Delete
|Average Disk Accesses|h+1|h+4
|Worst-case Disk Accesses|3h+1|3h
[/table]
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次,而在根节点时需要三次存取(两次访问兄弟节点是否可被借用,一次写入根)。

[size=large]R-树:[/size]
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是将[url=http://wfxbeijing-163-com.iteye.com/blog/841558]BSP树[/url]和R+树组合到一起。内结点没有相互覆盖的凸多面体,数据结点大小没有上下界,内结点的孩子数目有下界没有上界。

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

[size=large]Trie树[/size]:
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:
[img]http://dl.iteye.com/upload/picture/pic/78042/17839d01-a0da-31eb-b6a7-9f9347c047ea.png[/img]
Compressed Binary Tries:
[img]http://dl.iteye.com/upload/picture/pic/78044/4926a608-0e91-36a6-9a32-a42f3c62e5f7.png[/img]
Compressed High Order Tries:
[img]http://dl.iteye.com/upload/picture/pic/78046/e1793613-62b1-3cf6-a85f-79ad98dbaaf5.png[/img]
Multibit Tries:
[img]http://dl.iteye.com/upload/picture/pic/78048/bcb540db-2249-3cee-95e6-4b85dafc83a1.png[/img]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值