算法详解splay的初步了解

Posted loi-dfkdsmbd

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法详解splay的初步了解相关的知识,希望对你有一定的参考价值。

qwq表示最近感受到了不停课的鸭梨啊,好难搞啊……算法太难学了……我好菜啊qwq

其实半个多月前就可以写这篇文章,不过由于时间紧张没写emmmmmm,不扯闲言乱语了,如果有什么写的不好的地方凑活一下吧2333333333

splay是一种可以使树的最大深度尽可能的维持在logn级别的一种数据结构,当然splay的平衡确实不是非常好,但是它胜在代码量和思维难度小(像我这种菜鸡学个splay就快gg了),适合于算法竞赛,它中文名又叫伸展树,这也体现了它除平衡外的另一种特性——便于分裂和合并,这也可以利用splay方便的在序列上搞事情。

介绍完splay的特性,再来说它是如何维护平衡的。splay通过左旋和右旋这两种最基本的操作组合成共6种旋转模式,当然我们可以通过一些判断来简化旋转模式,接下来先讲一下基本操作技术分享图片

 

通过这张图我们可以看出,一个节点旋转的方向是由自己对于父亲的位置决定的,左蛾子向右转,右蛾子向左转,因此我们不需要刻意判断单次旋转方向

接下来说最重要的操作:splay

splay是这个数据结构最为重要的操作,是这棵树保持平衡的前提(虽然splay平衡效率不高),它是由多次旋转组合而来,每次我们考虑一个点和它的父亲、祖父,对着三个点进行操作,直至这个点到达根部,因为我们刚才把单次旋转简化,不用判断左旋还是右旋,所以splay的操作也简化成了两种:三个点同方向或者不同方向

技术分享图片

第一种

技术分享图片

第二种

splay本身作为一种二叉搜索树,可以满足logN查询前驱后继、第k名和k数字的排名,而且代码复杂度小,还支持快速分裂合并序列(待补),缺点是常数贼大,容易被卡

所以考虑学一个奇奇怪怪的平衡树……

至于代码

 

以上是关于算法详解splay的初步了解的主要内容,如果未能解决你的问题,请参考以下文章

Paxos算法细节详解--通过现实世界描述算法

网络流初步详解

初步网络最大流的算法及详解

一致性哈希算法原理详解

A*算法小入门--八数码

RSA算法详解