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的初步了解相关推荐

  1. YOLOv5算法详解

    目录 1.需求解读 2.YOLOv5算法简介 3.YOLOv5算法详解 3.1 YOLOv5网络架构 3.2 YOLOv5实现细节详解 3.2.1 YOLOv5基础组件 3.2.2 输入端细节详解 3 ...

  2. CenterNet算法详解

    Objects as Points-论文链接-代码链接 目录 1.需求解读 2.CenterNet算法简介 3.CenterNet算法详解 3.1 CenterNet网络结构 3.2 CenterNe ...

  3. SoftPool算法详解

    Refining activation downsampling with SoftPool-论文链接-代码链接 目录 1.需求解读 2.SoftPool算法简介 3.SoftPool算法详解 3.1 ...

  4. kmeans聚类算法matlab_KMeans聚类算法详解

    "如果把人工智能比作一块大蛋糕,监督学习只是上面的一层奶油". 日常生活中,从人脸识别.语音识别到搜索引擎,我们看到越来越多人工智能领域的算法逐渐走向落地.尽管全球每日新增数据量以 ...

  5. 蚂蚁算法python_Python编程实现蚁群算法详解

    简介 蚁群算法(ant colony optimization, ACO),又称蚂蚁算法,是一种用来在图中寻找优化路径的机率型算法.它由Marco Dorigo于1992年在他的博士论文中提出,其灵感 ...

  6. 谱聚类算法详解及代码实现

    谱聚类算法详解及代码实现 文章目录 谱聚类算法详解及代码实现 参考 关于谱聚类介绍 谱聚类概述 谱聚类前置知识 无向权重图 邻接矩阵 度矩阵 拉普拉斯矩阵 相似度矩阵 确定目标函数 初始化目标函数(最 ...

  7. YOLOv4算法详解

    YOLOv4: Optimal Speed and Accuracy of Object Detection-论文链接-代码链接 目录 1.需求解读 2.YOLOv4算法简介 3.YOLOv4算法详解 ...

  8. Matlab人脸检测算法详解

    这是一个Matlab人脸检测算法详解 前言 人脸检测结果 算法详解 源代码解析 所调用函数解析 bwlabel(BW,n) regionprops rectangle 总结 前言 目前主流的人脸检测与 ...

  9. 图论-最短路Dijkstra算法详解超详 有图解

    整体来看dij就是从起点开始扩散致整个图的过程,为什么说他稳定呢,是因为他每次迭代,都能得到至少一个结点的最短路.(不像SPFA,玄学复杂度) 但是他的缺点就是不能处理带负权值的边,和代码量稍稍复杂. ...

  10. C++中的STL算法详解

    1.STL算法详解 STL提供能在各种容器中通用的算法(大约有70种),如插入.删除.查找.排序等.算法就是函数模板,算法通过迭代器来操纵容器中的元素.许多算法操作的是容器上的一个区间(也可以是整个容 ...

最新文章

  1. Arista将Spine-Leaf路由/交换产品进行芯片升级
  2. Java开发面试技巧,Hive-JDBC操作
  3. Matlab标识指令中字符的精细控制
  4. muduo之AsyncLogging
  5. 麻省理工Hadi Salman新作:ViT架构可以有效抵御图像补丁攻击
  6. 深度探秘.NET 5.0
  7. 梯度下降法优化目标函数_如何通过3个简单的步骤区分梯度下降目标函数
  8. 什么是java的元数据_学习大数据,为什么要先学习Java?
  9. UVA10140 Prime Distance
  10. 学习git: 常用命令
  11. sharepoint文件夹本地同步_FreeFileSync for Mac(文件夹同步和比较工具)
  12. python求解线性规划问题
  13. ong拼音汉字_儿童拼音汉字入门
  14. k8s之常用操作命令
  15. leapftp download,leapftp download如何下载,软件介绍
  16. [译] APT分析报告:02.钓鱼邮件网址混淆URL逃避检测
  17. 商务网站建设与维护【4】
  18. 我用Python分析了1500家电商的销售数据,竟发现了进口车厘子的秘密
  19. 当天邀请的饭局要参加吗?别说“我有安排”,高手都懂这3个礼数
  20. [转载]Android7 WIFI系统 PNO机制流程详解和隐藏BUG修改

热门文章

  1. 静态变量与非静态变量的区别
  2. python中GIL和线程与进程
  3. 微信.NET:开源的ASP.NET微信公众号应用平台 .
  4. ES6入门--let的基本使用
  5. centos安装 docker的教程
  6. Aspose.Words for .NET使用教程(七):将文档转换为EPUB
  7. 上海育才高中2021高考成绩查询,育才中学2018高考成绩
  8. 错误1053: 服务没有及时响应启动或控制请求
  9. (4) STM32 AS608指纹识别模块测试代码
  10. 基于Slim微型框架实现强大的API—— Slim入门篇