欢迎光临
我们一直在努力

PLCT检查是什么Splay和LCT的复杂度分析

不论插入,删除还是访问,我们可以发现它们的复杂度都和操作的复杂度同阶,只是一点常数的区别

我们不妨假设有个点的,进行了次操作


采用势能分析

我们记,注意以为底和上取整

我们定义势能函数为

(记第次操作操作完之后,势能为)

只需要估计出的大小即可

(即初始势能和每次的势能变化量的和)

显然,


操作的具体定义为:

如果父节点是根,那么旋转一次

如果父节点和爷节点所处子树方向一致,那么先旋转父亲再旋转自己

否则,旋转两次自己

实际上可以归结于,,,,,操作

由于和是对称的操作

因此,只需要对,,操作分析复杂度即可


势能的变化量为


势能变化量为(缩小了常数的影响,但不能无视)

这是神仙复杂度证明中非常神奇的地方,通过一些有趣的性质,让常数项的代价合并到了势能的变化中

我们不妨设,那么注意到

由于$2w'(x) – w'(g) – w(x) = left lceil log_2 (a + b + 1)
ight
ceil – left lceil log_2 a
ight
ceil + left lceil log_2 a + b + 1
ight
ceil – left lceil log_2 b
ight
ceil $

注意到在上式中是对称的,不妨设

因此有,我们将中的放缩,可以得到


势能变化量为

由上文的结论,我们知道这里可以把放缩成

因此


把以上三种操作的势能全部放缩为

不妨假设一次,依次访问了点,最后会成为新的根

那么,最后的势能实际上是

因此,

即个点的,做次操作,复杂度为


不咕了….

的所有操作可以看做只有操作,其他都是常数

那么操作一共有两部分

  • 在中走的复杂度

  • 访问虚边的复杂度


首先是在中走的复杂度

定义,指的所有虚边和实边的子树大小的和

我们定义势能函数为

不妨设它依次访问了

那么,类似上文的复杂度分析,我们可以得到总的一次势能变化量为

这也就是的的性质

初始势能为,因此这一部分的复杂度为


访问虚边的复杂度

我们定义势能函数,为所有重虚边(儿子的子树大小大于等于自己的二分之一的虚边)的数量

那么,每次访问至多走条轻虚边,也就至多带来条重虚边,也就是以的代价增加的势能

而每次访问一条重虚边就需要付出的代价来减小的势能,并且访问完重虚边之后,不会有新的重虚边产生

因此,最终的复杂度是初始势能和势能变化量(实际操作的代价和势能变化量相同)的和,也就是


因此,的复杂度为

赞(0)
未经允许不得转载:上海聚慕医疗器械有限公司 » PLCT检查是什么Splay和LCT的复杂度分析

登录

找回密码

注册