【算法详解】splay的初步了解
qwq表示最近感受到了不停课的鸭梨啊,好难搞啊……算法太难学了……我好菜啊qwq
其实半个多月前就可以写这篇文章,不过由于时间紧张没写emmmmmm,不扯闲言乱语了,如果有什么写的不好的地方凑活一下吧2333333333
splay是一种可以使树的最大深度尽可能的维持在logn级别的一种数据结构,当然splay的平衡确实不是非常好,但是它胜在代码量和思维难度小(像我这种菜鸡学个splay就快gg了),适合于算法竞赛,它中文名又叫伸展树,这也体现了它除平衡外的另一种特性——便于分裂和合并,这也可以利用splay方便的在序列上搞事情。
介绍完splay的特性,再来说它是如何维护平衡的。splay通过左旋和右旋这两种最基本的操作组合成共6种旋转模式,当然我们可以通过一些判断来简化旋转模式,接下来先讲一下基本操作
通过这张图我们可以看出,一个节点旋转的方向是由自己对于父亲的位置决定的,左蛾子向右转,右蛾子向左转,因此我们不需要刻意判断单次旋转方向
接下来说最重要的操作:splay
splay是这个数据结构最为重要的操作,是这棵树保持平衡的前提(虽然splay平衡效率不高),它是由多次旋转组合而来,每次我们考虑一个点和它的父亲、祖父,对着三个点进行操作,直至这个点到达根部,因为我们刚才把单次旋转简化,不用判断左旋还是右旋,所以splay的操作也简化成了两种:三个点同方向或者不同方向
第一种,三个点同方向,那么先旋转它的父亲(因为旋转是为了让某个节点更加靠近根部,令其向上),然后再旋转它自身
第二种,三个点不同方向,一直旋转自己
splay本身作为一种二叉搜索树,可以满足logN查询前驱后继、第k名和k数字的排名,而且代码复杂度小,还支持快速分裂合并序列(待补),缺点是常数贼大,容易被卡
所以考虑学一个奇奇怪怪的平衡树……
至于代码
http://www.cnblogs.com/Loi-dfkdsmbd/p/8449498.html
转载于:https://www.cnblogs.com/Loi-dfkdsmbd/p/8214944.html
【算法详解】splay的初步了解相关推荐
- YOLOv5算法详解
目录 1.需求解读 2.YOLOv5算法简介 3.YOLOv5算法详解 3.1 YOLOv5网络架构 3.2 YOLOv5实现细节详解 3.2.1 YOLOv5基础组件 3.2.2 输入端细节详解 3 ...
- CenterNet算法详解
Objects as Points-论文链接-代码链接 目录 1.需求解读 2.CenterNet算法简介 3.CenterNet算法详解 3.1 CenterNet网络结构 3.2 CenterNe ...
- SoftPool算法详解
Refining activation downsampling with SoftPool-论文链接-代码链接 目录 1.需求解读 2.SoftPool算法简介 3.SoftPool算法详解 3.1 ...
- kmeans聚类算法matlab_KMeans聚类算法详解
"如果把人工智能比作一块大蛋糕,监督学习只是上面的一层奶油". 日常生活中,从人脸识别.语音识别到搜索引擎,我们看到越来越多人工智能领域的算法逐渐走向落地.尽管全球每日新增数据量以 ...
- 蚂蚁算法python_Python编程实现蚁群算法详解
简介 蚁群算法(ant colony optimization, ACO),又称蚂蚁算法,是一种用来在图中寻找优化路径的机率型算法.它由Marco Dorigo于1992年在他的博士论文中提出,其灵感 ...
- 谱聚类算法详解及代码实现
谱聚类算法详解及代码实现 文章目录 谱聚类算法详解及代码实现 参考 关于谱聚类介绍 谱聚类概述 谱聚类前置知识 无向权重图 邻接矩阵 度矩阵 拉普拉斯矩阵 相似度矩阵 确定目标函数 初始化目标函数(最 ...
- YOLOv4算法详解
YOLOv4: Optimal Speed and Accuracy of Object Detection-论文链接-代码链接 目录 1.需求解读 2.YOLOv4算法简介 3.YOLOv4算法详解 ...
- Matlab人脸检测算法详解
这是一个Matlab人脸检测算法详解 前言 人脸检测结果 算法详解 源代码解析 所调用函数解析 bwlabel(BW,n) regionprops rectangle 总结 前言 目前主流的人脸检测与 ...
- 图论-最短路Dijkstra算法详解超详 有图解
整体来看dij就是从起点开始扩散致整个图的过程,为什么说他稳定呢,是因为他每次迭代,都能得到至少一个结点的最短路.(不像SPFA,玄学复杂度) 但是他的缺点就是不能处理带负权值的边,和代码量稍稍复杂. ...
- C++中的STL算法详解
1.STL算法详解 STL提供能在各种容器中通用的算法(大约有70种),如插入.删除.查找.排序等.算法就是函数模板,算法通过迭代器来操纵容器中的元素.许多算法操作的是容器上的一个区间(也可以是整个容 ...
最新文章
- Arista将Spine-Leaf路由/交换产品进行芯片升级
- Java开发面试技巧,Hive-JDBC操作
- Matlab标识指令中字符的精细控制
- muduo之AsyncLogging
- 麻省理工Hadi Salman新作:ViT架构可以有效抵御图像补丁攻击
- 深度探秘.NET 5.0
- 梯度下降法优化目标函数_如何通过3个简单的步骤区分梯度下降目标函数
- 什么是java的元数据_学习大数据,为什么要先学习Java?
- UVA10140 Prime Distance
- 学习git: 常用命令
- sharepoint文件夹本地同步_FreeFileSync for Mac(文件夹同步和比较工具)
- python求解线性规划问题
- ong拼音汉字_儿童拼音汉字入门
- k8s之常用操作命令
- leapftp download,leapftp download如何下载,软件介绍
- [译] APT分析报告:02.钓鱼邮件网址混淆URL逃避检测
- 商务网站建设与维护【4】
- 我用Python分析了1500家电商的销售数据,竟发现了进口车厘子的秘密
- 当天邀请的饭局要参加吗?别说“我有安排”,高手都懂这3个礼数
- [转载]Android7 WIFI系统 PNO机制流程详解和隐藏BUG修改