splay单旋双旋对比

三维跨孔电磁波CT数据可视化框架搭建 利用matlab实现对跨孔电磁波CT实测数据反演,并搭建了三维CT数据可视化框架,可装填实测CT反演数据。 阅读详情

splay单双旋还挺有意思的,一直觉得单旋是ok的,但是感性画图分析了一波~

单旋:直接旋转我自己

双旋:先旋转我的父亲,再旋转我自己

对于链结构,我们需要双旋,画图之后发现,我们采用双旋会至少压一层,而单旋则一直维持链式结构,显然单旋会被卡成O(n)

其余的结构而言,单旋双旋并无多大区别,但需要注意的是,双旋也存在一种结构被卡,但卡成连后就会被压层,而单旋则可能一直被卡,因此均摊复杂度还是log2(n)

详细的复杂度证明Tarjan用到了势能这个概念orz,具体有兴趣的同学可以上网查一查

struct Splay{
	#define N 100010
	int k[N]siz[N];
	int rt,cnt,p[N],ch[N][2];
	#define Ls(v) ch[v][0]
	#define rs(v) ch[v][1]
	inline void maintain(int x){
		siz[x]=siz[Ls(x)]+siz[rs(x)]+1;
	}
	inline void rot(int x){
		int f=p[x],gf=p[f],type=rs(f)==x,son=ch[x][!type];
		ch[p[son]=f][type]=son,maintain(f);
		ch[p[f]=x][!type]=f,maintain(x);
		ch[p[x]=gf][rs(gf)==f]=x;
	}
	inline void splay(int x,int goal){//旋转在目标的下面 
		if(x==goal)return ;
		while(p[x]^goal){
			if((p[p[x]]^goal)&&((rs(p[p[x]])==p[x])==(rs(p[x])==x)))rot(p[x]);
			rot(x);
		}
		if(!goal)rt=x;
	}
};

可读性还是蛮高的……其实我不是压行选手~

从零到一:龙芯杯参赛全攻略(含北理工学长经验PDF、B站培训视频与开源代码合集) 本文详细介绍了龙芯杯全国大学生计算机系统能力大赛的参赛全攻略,包括资源整合、技能树构建、团队协作和避坑指南。提供北理工学长经验PDF、B站培训视频与开源代码合集,帮助参赛者从零基础到站上领奖台。重点解析如何高效获取优质资源、避开新手常见陷阱及构建可落地的学习路径,助力普通学生系统学习CPU设计。 阅读详情

相关推荐

QML 地图修改插件源码(三),Map在Plugin中设置加载地图类型

常用的地图种类分为交通图,地形图,卫星图等等,在QML的Map(以OSM地图为例)中提供activeMapType属性用于读取当前显示的地图类型(注意:该属性为只读属性,不能用于赋值),QML中地图的加载寻找根据瓦片的文件名进行查找,例如名为"osm_100-l-5-2-2-3.png"的瓦片,其中5代表了该地图的类型

zjgo007的专栏 3164

伸展树(splay):双层旋转

如果使用逐层选择,会导致在最坏的情况下的分摊复杂度为,所以这里引入了新的操作,双层旋转 所以可能树的情况有4种。 双层旋转就是向上追溯两层,而非一层。 先对其祖父旋转,之后对其父亲旋转,这就是双旋操作。 由上图可以看出如果树呈现的是zig-zag或者是zag-zig,逐层操作和双层操作的效果是一样的,它的不同体现在zig-zig或者是zag-zag上 在最坏的情况下进...

Viator 971

人工智能训练师认证教程(5)使用MONAI进行医学影像分析的完整指南

本文介绍了使用MONAI框架进行医学影像分析的全流程。首先详细说明了环境搭建步骤,包括PyTorch和MONAI的安装配置。然后以肺部CT 3D分割为例,分步骤讲解了数据准备与预处理、3D UNet模型构建、训练配置(DiceLoss损失函数、Adam优化器等)以及训练验证循环的实现。文章还包含推理可视化方法和模型导出为ONNX格式的部署方案,并强调了医学影像分析中的数据格式适配、强度归一化、显存优化等关键注意事项。最后指出MONAI的医学专用组件可大幅简化开发流程,建议后续可探索SwinUNETR等进阶方

华为开发者布道师,天府英才计划,致力于大数据+AI 的应用创新,助力企业与个人AI创新赋能。 1208

AH/HNOI2017 单旋 (splay)

AH/HNOI2017 单旋 (splay) 前言 为什么说这道题叫做\(\text{splay}​\)就不能用\(\text{splay}​\)做? 不就是一个加一减一序列嘛干嘛用线段树\(+\text{set}\)做多烦啊 本人是一个\(\text{STL}\)的憎恨者,所以想出了一个可以使用\(\text {splay}\)实现的方法。 不过必须提一句……卡带着常数毁灭\(\tex...

banminxi2432的博客 220

使用fairseq从头开始训练一个中英神经机器翻译模型

前言 由于毕设是做神经机器翻译相关,所以先尝试一下神经机器翻译的整个流程是非常有必要的。故将在news-commentary-v15语料上训练有监督中英NMT模型的整个流程,包括工具和数据的准备、数据的预处理、训练及解码等过程,以及过程中遇到的问题和解决方案记录在此,以供后期回顾,也希望能够给予别人一些帮助。附本人博客 1 相关工具及目录结构 1.1 相关工具 除jieba是使用pip install安装外,其他几个工具都是建议直接克隆库到自己的用户目录中,方便使用其脚本(moses/subword-nmt

qq_42734797的博客 2万+

[Python]:热血传奇-Wzl,Wzx的解析

首先我们要了解,wzl与wzx的对应关系,wzx里面存的是每张二进制图片数据在wzl中的偏移量,所以取到wzx中的偏移数据就可以取到wzl每张图片数据,其实就这么简单。结构体为 [Byte][Byte][Byte][Byte][short][short][short][short][int]-读取44至48字节代表为,[wzx中偏移值总数量] [int类型] [4字节]-根据在wzx中取得的偏移值总数量,每张图片偏移值在wzl中取图片数据。2.[取wzl中图片偏据]:根据wzx中取得数据对[

qq_36138506的博客 3446

谈谈splay的双旋和单旋(其实扯淡部分比较多

纯属扯淡,我都不好意思写"浅谈"这个标题qwq

QWsin的博客 3659

BSW: Dcm模块配置--28服务

这个章节讲解下UDS中的28服务(Communcation Control)的配置,顾名思义,对当前ECU的通讯状态进行变更,主要设置应用报文,网络管理报文的收发控制,通常应用在刷写APP软件时,降低总线负载。这里首先要提醒的一点是,28服务几乎不需要手写代码,只有在客户需求要求前置条件不满足时报特定NRC时才需要填充代码。实际配置中主要涉及的模块有DCM,BSWM,ComM,RTE.2.BswM模块的配置。3.ComM模块的配置。1.DCM模块的配置。

Forever_Oct的博客 3086

Splay(伸展)树学习笔记

splay树的学习笔记

L666223的博客 594

ADC学习(3)——采样电路

第三章 采样电路

夏风喃喃的博客 3万+

解决西门子Step 7 basic 找不到许可证问题

你在使用博图软件是否遇到过Step 7 basic 找不到许可证的问题呢!不言怕,今天我就来告诉你该如何处理吧!看步骤: 1.删除原授权的License: 打开Automation License Manager应用,然后我们可以发现仅有的License Key前面有一个时钟,说明它已经过期不可用,我们就要去寻求新的Key. 打开“我的电脑”,选择C盘,点击上方查看 点击选项–>查看 然...

让技术没有门槛 14万+

Splay-总结

【前言】Splay Tree,又名伸展树,是OI中应用非常广泛的一种数据结构。相比其他BST,Splay的效率还是不错的。我们一般用Splay维护一个序列。【操作】Splay有以下几个基本操作:1.rot旋转 这个不用我多说了,平衡树中很常见的操作2.splay 伸展 splay(x,k)操作的目的是:从子树(子序列)x中找到第k个,并通过旋转的方式,将其弄到子树的根上。 这里就不得不提一下S

linkfqy 1287

在ubuntu20.04中安装MATLAB时常见问题及解决方法

   如果你刚装完ubuntu20.04,这时你想要安装MATLAB2021A,在输入命令./install进行安装时,可能会报以下错误:    terminate called after throwing an instance of ‘JailContainerException’ what(): Error: 88: No JRE version parsed from/media/jzx/MATHWORKS_R2021A/sys /java/jre/glnxa64/jre/release   

慕羽★的博客 1万+

普通平衡树(Splay,无旋Treap)

#include <bits/stdc++.h> #define maxn 500005 using namespace std; int n,sz,root,fa[maxn],val[maxn],ch[maxn][2],siz[maxn],cnt[maxn]; inline bool isc(int x){return ch[fa[x]][1]==x;} inline void up...

Master.Yi的博客 510

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

伸展树splay单旋PK双旋

为什么要有双旋转呢?遇到左孩子就右转,右孩子就左转不行么? 试想一下如果当前是一条链的话,在查询完最深的节点后,只用N个单旋把节点单旋上去的话,splay操作后的树仍然是一条链,如图1-1至图1-5: 但若是用双旋的话情况就不同了,如图2-1至2-5: 转载于:https://www.cnblo...

weixin_30502965的博客 189

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

splay树前导知识/树的旋转

现在开始学习splay树。splay树的核心操作就是树的旋转现在我们开始学习树的旋转。 树的单旋 树的单旋有两种,是基本的操作。 1.左旋(ZAG) 针对一个节点进行左旋: 第一步:建立指针指向这个节点 第二步:将该节点的右孩子的左孩子挂载成为当前节点的右孩子。 第三步:将指针指向该节点的右孩子,将该节点挂在到它的右孩子上,成为它的右孩子的左孩子 别慌。。。见图所示: 我们对1节点进行右旋: ...

平凡人Kalzn的博客 509

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

POJ 3481 Double Queue(无旋treap/Splay)

题目传送门 解题思路 三种操作,插入一个数,取最大值并删除,取最小值并删除。 应该有挺多方法可以做的。 提供无旋treap和Splay这两种平衡树的数组的做法。 代码 无旋treap版本 #include<cstdio> #include<algorithm> using namespace std; #define ll long long #defi...

shadiao.的博客 370

伸展树(Splay树)

首先找到要删除的元素并把它伸展至根结点,然后判断它的右子树是否为空,如果为空,就直接删除;如果不为空,就找到根结点最近的后继,然后将他们的值互换,把那个后继的右子树赋值为当前值,然后删除那个后继

CODER-GODV的博客 628

splay单旋与双旋

在贴吧看了个娱乐向的骗回复帖子,说双旋比单旋慢。好吧,我承认可能在某一次是这样。但别忘了,splay可是平摊时间复杂度的。 那为啥我们要双旋呢?如果你手动模拟四个以上的点的旋转,你会发现,如果单旋一条链的叶子到根,转完了还是一条链。但如果用双旋,那么会是一棵树。可能判断会很麻烦,但后面会快的! 好了这篇文章就到这里(你问我为啥这么短?因为我要放图啊……) zig是右旋...

竹夭公子的博客 2481

浅谈无旋treap(fhq_treap)

一、简介 无旋Treap(fhq_treap),是一种不用旋转的treap,其代码复杂度不高,应用范围广(能代替普通treap和splay的所有功能),是一种极其强大的平衡树。 无旋Treap是一个叫做范浩强的大佬发明的(快%啊!) 在我们一起学习无旋Treap之前,本蒟蒻有几句活想说: 1.无旋Treap我个人认为是最容易理解的一种平衡树,而且编程复杂度不高,功能还那么强大。 ...

aaa3201的博客 1646

【数据结构】Splay树 + 文艺平衡树

就是一个长这样的树,树中每个结点都有一个父结点(除了根结点没有父结点)和最多两个子结点,每个结点的左儿子一定比它小,右儿子一定比它大。这棵树的先序遍历很容易知道就是:1 2 3 4 5 6 7 (根左右)我们还可以从另一个角度理解先序遍历:把整棵树映射到 x 轴上,也就是把它压扁也就是这样:先序遍历从左到右读出来就可以了。

Texcavator的博客 1510

SPLAY树

前言 根据研究表明,90%的访问都是针对10%的元素。提高这90%的访问的效率,就明显改善了对整个访问的效率。 核心思想:把最近访问过的结点提升到根,后续访问的深度将减小。把这种提升结点的操作称为“伸展Splay”。以伸展操作为基础的二叉排序树也就相应称为伸展树(Splay Tree)。 开始 基于前言中十分有用(坑爹 )的话,于是我们需要用SPLAY树来优化时间,即把刚操作的点引到根下,即S...

TL的博客 1007

浅谈splay的双旋

昨晚终于明白了splay双旋中的一些细节,今日整理如下 注:题目用的2002HNOI营业额统计,测试结果均来及codevs 网站的评测结果http://codevs.cn/problem/1296/ 本题完整代码请见http://www.cnblogs.com/TheRoadToTheGold/p/6372009.html 1、这是旋转部分的代码 1 inline voi...

weixin_30682415的博客 167

LOJ#2018. 「AHOI / HNOI2017」单旋【模拟单旋splay】

题目描述: 题目分析: 模拟当然不是指直接用splay暴力模拟啦。 仔细盯着这个图,想像一下最小值被旋转到根,会发现相当于将最小值的右儿子接到了他的父亲下面,然后他变作根,原来的根变作他的右儿子,其他结构不变,所以我们只需要维护每个点的儿子和父亲以及根是谁,就可以O(1)实现旋转最值。 再观察旋转过程中的深度变化,最小值的右儿子深度没有变,其他点深度+1,自己深度变为1。 注意到Splay是一棵...

Master.Yi的博客 338

平衡树算法总结&专题训练2(有旋平衡树:AVL 树,Splay)

平衡树算法总结&专题训练2(有旋平衡树:AVL 树,Splay)1.概述2.有旋平衡树-AVL 树 1.概述 在 平衡树算法总结&专题训练1 中我们着重讲解了两种无旋平衡树:替罪羊树,FHQ Treap。 那么在这篇博文中我们将讲解 AVL 树和 Splay 这两种有旋平衡树。 有旋平衡树维持树平衡的方法通常都是树旋转。 我专门写了一篇文章来讲树旋转->link,请务必保证在学透树旋转之后再往下看,否则会看不懂的。 那么还是以模板为例,看看 AVL 树和 Splay 又会有怎样的表现。

Plozia 的小窝 683

Splay

Spaly   众所周知,Splay 是一种平衡二叉查找树(不要告诉我你不知道二叉查找树是什么qwq 不知道什么是二叉查找树的看过来: 关于二叉查找树)。在这篇东西的最后我们也解释了为什么我们需要用到平衡二叉查找树而不是直接查找,这里就不再赘述了,所以现在直接引入正题吧。 旋转操作   未来解决普通二叉查找树被卡成层数过深而时间复杂度升高的问题我们需要引入这样一个旋转操作。这个操作的本质就是在不改变这棵树的中序遍历的前提下让这颗树的层数减小。具体来说是这样做的(对于左边的那棵树:RRR 是 yyy 的祖先

ID246783的博客 4367
上一篇: 树链剖分
下一篇: 数据结构之分块
DancingZ
博客等级 码龄9年 10粉丝 137原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值