伸展树基础(Splay)】的更多相关文章

目录 1 简介 2 基础操作 2.1 旋转 2.2 伸展操作 3 常规操作 3.1 插入操作 3.2 删除操作 3.3 查找操作 3.4 查找某数的排名.查找某排名的数 3.4.1 查找某数的排名 3.4.2 查找某排名的数 4 代码实现 5 经典应用 - 区间添加.删除.翻转 5.1 区间添加 5.2 区间删除 5.3 区间翻转 1 简介 伸展树(Splay Tree),是一种二叉搜索树(Binary Search Tree,又称二叉排序树Binary Sort Tree),由丹尼尔·斯立特(…
二叉排序树能够支持多种动态集合操作,它可以被用来表示有序集合,建立索引或优先队列等.因此,在信息学竞赛中,二叉排序树应用非常广泛. 作用于二叉排序树上的基本操作,其时间复杂度均与树的高度成正比,对于一棵有 \(n\) 个节点的二叉树,这些操作在最有情况下运行时间为 \(O( \log_2 n)\). 但是,如果二叉树退化成了一条 \(n\) 个节点组成的线性链表,则这些操作在最坏情况下的运行时间为 \(O(n)\). 有些二叉排序树的变形,其基本操作的性能在最坏情况下依然很好,如平衡树(AVL)…
伸展树(splay树),是二叉排序树的一种.[两个月之前写过,今天突然想写个博客...] 伸展树和一般的二叉排序树不同的是,在每次执行完插入.查询.删除等操作后,都会自动平衡这棵树.(说是自动,也就是多了一段代码,把这个节点提到根节点的位置上罢了) 伸展树的调整是基于两种旋转操作的[左旋右旋嘛]. 分别是这样的(对2号节点操作): (有点草率啊这个图) 对于这两个操作,只需要处理好指针为空的情况即可(我的splay树包含了father指针,可能比另一种写法更繁琐一些) void lec(nod…
文章图片和代码来自邓俊辉老师课件 概述 伸展树(Splay Tree),也叫分裂树,是一种二叉排序树,它能在O(log n)内完成插入.查找和删除操作.它由丹尼尔·斯立特Daniel Sleator 和 罗伯特·恩卓·塔扬Robert Endre Tarjan 在1985年发明的.(出处百度百科) 它的操作就是将访问到的元素放在根节点处.主要的操作就是 zip 和 zag 下面是空间/时间复杂度(出处) 算法分析 双层伸展 双层伸展的作用是提升了树平均的访问性能.构思的精髓 : 向上追溯两层,而…
作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 我们讨论过,树的搜索效率与树的深度有关.二叉搜索树的深度可能为n,这种情况下,每次搜索的复杂度为n的量级.AVL树通过动态平衡树的深度,单次搜索的复杂度为log(n) (以上参考纸上谈兵 AVL树).我们下面看伸展树(splay tree),它对于m次连续搜索操作有很好的效率. 伸展树会在一次搜索后,对树进行一些特殊的操作.这些操作的理念与AVL树有些类似,即通过旋转,来改变树节…
伸展树的设计思路,鉴于数据访问的局部性(28原则)在实际应用中普遍存在,将按照"最常用者优先"的启发策略.尽管在最坏情况下其单次操作需要 O(n) 时间,但分摊而言仍然 O(logn) 以内. 与 AVL 树一样,伸展树也是平衡二叉搜索树的一种实现. 伸展树的实现更为简洁: 伸展树无需时刻都严格地保持全树的平衡(设计的思路在于 AVL 的条件是不是太苛刻了),但却能够在任何足够长的真实操作序列中,保持分摊意义上的高效率. 伸展树也不需要对基本的二叉树结点结构,做任何附加的要求和改动:…
3224: Tyvj 1728 普通平衡树 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 3948  Solved: 1627 [Submit][Status][Discuss] Description 您需要写一种数据结构(可参考题目标题),来维护一些数,其中需要提供以下操作:1. 插入x数2. 删除x数(若有多个相同的数,因只删除一个)3. 查询x数的排名(若有多个相同的数,因输出最小的排名)4. 查询排名为x的数5. 求x的前驱(前驱定义为…
本文用势能法证明\(Splay\)的均摊复杂度,对\(Splay\)的具体操作不进行讲述. 为了方便本文的描述,定义如下内容: 在文中我们用\(T\)表示一棵完整的\(Splay\),并(不严谨地)用\(|T|\)表示\(T\)这棵\(Splay\)的节点数目. 如无特殊说明,小写英文字母(如\(x\),\(y\),\(z\))在本文中表示\(T\)的一个节点,并(不严谨地)用\(|x|\)表示以节点\(x\)为根的子树的大小,\(x\in T\)表示节点\(x\)在\(T\)中. 一般我们默认…
目录 前言 练习1 BZOJ 3224 普通平衡树 练习2 BZOJ 3223 文艺平衡树 练习3 BZOJ 1588 [HNOI2002]营业额统计 练习4 BZOJ 1208 [HNOI2004]宠物收养场 练习5 BZOJ 1507 [NOI2003]文本编辑器 editor 练习6 BZOJ 1503 [NOI2004]郁闷的出纳员 前言 学习于yyb 本来是想写个算法解释,克自己写了一半总感觉像复制的,各位就去yyb哪里学吧 这里附上几个BZOJ的模板题 \n \n \n \n 练习1…
好久没写过了,比赛的时候就调了一个小时,差点悲剧,重新复习一下,觉得这个写的很不错.转自:here Splay Tree(伸展树) 二叉查找树(Binary Search Tree)能够支持多种动态集合操作.因此,在信息学竞赛中,二叉排序树起着非常重要的作用,它可以被用来表示有序集合.建立索引或优先队列等. 作用于二叉查找树上的基本操作的时间是与树的高度成正比的.对一个含n各节点的完全二叉树,这些操作的最坏情况运行时间为O(log n).但如果树是含n个节点的线性链,则这些操作的最坏情况运行时间…