Day2平衡树笔记
线段树不支持的操作:删除,插入
常见的平衡树
treap 慢||好写
sbt(大小平衡的树) 非常快 比较好写 ||功能不全
rbt 红黑树 特别快 || 非常难写
以上操作支持插入删除O(NlogN)
splay 特别慢。。≈O(sqrt(N))
不太好写,功能强大
可持久化Treap
平衡树一定是二叉树
左儿子里面的元素一定比他小
右儿子一定比当前节点大
中序遍历一定排好序
每次递归的查询
小——》左
大——》右
弊端:深度可能会非常深-->代价非常大
Treap=Tree+heap
treap:存两个值[key,val]
val:每次插入的值,满足平衡树的性质
key:满足堆的性质,直接rand,深度一定是logN级别的
merge(p1,p2):把以p1为根的Treap和以P2为根的Treap合并成一个Treap,p1的最大值应该<=P2的最小值
split(p,k):把以p为根的Treap拆成两个Treap,一个有k个数,另一个有n-k个数,k为前k小
插入:先把树分为x,y两部分,然后把新的节点a看做是一棵树,先与x合并,合并完之后将合并的整体与y合并
删除:
merge实现
先找key最大的,比较p1,p2
- 若p1大
p1作为根,p2一定在p1的右边,
p1.L=p1.L
p1.r=merge(p2,p1.r)
- 若p2
p2.r=p2.r
p2.L=merge(p2.L,p1)
merge返回的是根节点
split实现
size:子树有多少个节点
当k<=p.L.size—>split(p.L,k)—>设p1为有用的子树,那么直接merge(p2,p.r)就好,把p2作为p的左孩子
当k==p.L.size+1 返回p.L+p,p.r
当k>p.L.size+1—>split(p.r,k-p.L.size-1)—>设p2为有用的子树,直接merge(p,p1),把p1作为p的右孩子
Day2平衡树笔记的更多相关文章
- day2 大纲笔记
1, pycharm的使用2,昨日内容回顾(作业讲解) 编译型 解释型 python2x: 混乱 冗余 python3x: 规范,清晰 变量: 常量:一直不变的量.全部大写的变量 常量. 注释: # ...
- hadoop学习day2开发笔记
1.将hdfs客户端开发所需的jar导入工程(jar包可在hadoop安装包中找到common/hdfs) 2.写代码 要对hdfs中的文件进行操作,代码中首先需要获得一个hdfs的客户端对象 Con ...
- Python——Day2(笔记代码)
# test = "大pandaboy"# v=test.capitalize()#首字母大写,当为汉字时失效# print(v)######################### ...
- Day2二分图笔记
定义 左边一堆点 右边一堆点 树是一个二分图,奇数深度和偶数深度可以组成二分图, 二分图匹配 左边的点和右边的点有边 匈牙利算法 可能的答案 ans,n-ans,m-ans,n+m-ans || ...
- 「Android 开发」入门笔记
「Android 开发」入门笔记(界面编程篇) ------每日摘要------ DAY-1: 学习笔记: Android应用结构分析 界面编程与视图(View)组件 布局管理器 问题整理: Andr ...
- 帝都Day3——各种dp
备注:Day1 Day2记得笔记太233,所以就不发了 备注2:Day4~Day7发不发看心情qaq (7.17持续更新中...) 动态规划A 记忆化搜索 & 动态规划初步 8点15: 杨姓d ...
- Day2 《机器学习》第二章学习笔记
这一章应该算是比价了理论的一章,我有些概率论基础,不过起初有些地方还是没看多大懂.其中有些公式的定义和模型误差的推导应该还是很眼熟的,就是之前在概率论课上提过的,不过有些模糊了,当时课上学得比较浅. ...
- [学习笔记]平衡树(Splay)——旋转的灵魂舞蹈家
1.简介 首先要知道什么是二叉查找树. 这是一棵二叉树,每个节点最多有一个左儿子,一个右儿子. 它能支持查找功能. 具体来说,每个儿子有一个权值,保证一个节点的左儿子权值小于这个节点,右儿子权值大于这 ...
- [学习笔记]可持久化数据结构——数组、并查集、平衡树、Trie树
可持久化:支持查询历史版本和在历史版本上修改 可持久化数组 主席树做即可. [模板]可持久化数组(可持久化线段树/平衡树) 可持久化并查集 可持久化并查集 主席树做即可. 要按秩合并.(路径压缩每次建 ...
随机推荐
- HBase为什么快 HBase原理。 HBase几个问题
背景色表示可以自己做实验搞定 1 模拟一组数据 1.2.3.4.5.6.7.8.9.10 1 入 限定符 'one' 2 入 'two' 3 入 'three' 4 f ...
- Find problem in eXtremeDB
class table1 { char<8> f1; char<80> f2; uint4 f3; uint4 f4; double ...
- 113.dynamic_cast 虚函数 通过子类初始化的父类转化为子类类型
#include <iostream> using namespace std; //子类同名函数覆盖父类 //父类指针存储子类地址,在有虚函数情况会调用子类方法,否则会调用父类方法 cl ...
- FreeBSD是UNIX系统的重要分支,其命令与Linux大部分通用,少部分是其特有。
FreeBSD是UNIX系统的重要分支,其命令与Linux大部分通用,少部分是其特有. 1: man 在线查询 man ls2: ls 查看目录与档案 ls -la3: ln 建立链接文件 ln -f ...
- 学习参考《Python数据分析与挖掘实战(张良均等)》中文PDF+源代码
学习Python的主要语法后,想利用python进行数据分析,感觉<Python数据分析与挖掘实战>可以用来学习参考,理论联系实际,能够操作数据进行验证,基础理论的内容对于新手而言还是挺有 ...
- nginx下修改svn配置
最近公司的SVN服务器地址做了变更,而我用的操作系统是Ubuntu操作系统,我也不想把以前下载的代码重新进行修改,我想通过修改svn地址,应该可以,终于在网上通过查找资料,找到了解决的方法: ...
- SpringBoot @PathVariable 和 @requestParam区别
1.若获取的入参的 参数 是下面这种形式 就使用 @requestParam 去获取 参数‘1’ /user?id=1 // url:xxx/user?id=1 @RequestMapping(&qu ...
- 洛谷 P3585 [POI2015]PIE
P3585 [POI2015]PIE 题目描述 一张n*m的方格纸,有些格子需要印成黑色,剩下的格子需要保留白色.你有一个a*b的印章,有些格子是凸起(会沾上墨水)的.你需要判断能否用这个印章印出纸上 ...
- 使用Gmail邮箱
由于国内不能直接访问google,所以其相关产品也不能直接使用.因为Gmail简洁,使用方便,国际上用的人很多.最近发现网易邮箱大师可以直接访问Gmail,所以将方法介绍给大家,如果大家只有访问Gma ...
- DistBelief 框架下的并行随机梯度下降法 - Downpour SGD
本文是读完 Jeffrey Dean, Greg S. Corrado 等人的文章 Large Scale Distributed Deep Networks (2012) 后的一则读书笔记,重点 ...