Splay的时间复杂度的一种证明

在这里,我们给出势函数(potential function)的定义,并展示如何通过势函数给出Splay操作的均摊时间复杂度的一个上界,尽管这上界并不是紧的。




势函数 Φ 定义为数据结构到实数集的一个映射。

在这里,我们假设势函数 Φ 已经良定义,设 T(i) 为第i次操作的实际耗时, Φ(i) 代表第i次操作结束时系统的势函数值。定义 A(i)=T(i)Φ(i1)+Φ(i)

移项,得 A(i)+Φ(i1)+Φ(i)=T(i) ,即

  • T(1)=A(1)+Φ(1)Φ(0)
  • T(2)=A(2)+Φ(2)Φ(1)
  • ……
  • T(n)=A(n)+Φ(n)Φ(n1)

求和,得 T(i)=A(i)+Φ(n)Φ(0)

于是,若 Φ 良定义,我们只需给出 A(i)Φ(n)Φ(0) 的一个上界,即可给出 T(i) 的一个上界。




这部分我们显式地给出势函数,定义 S(x) 代表以x为根的子树, μ(V)=log|V| μ(x)=log|S(x)| ,定义势函数 Φ=vmu(v)

显然, Φ(n)Φ(0)=O(nlogn) ,于是我们只需要给出 A(i) 的一个上界。

以下我们也将 μΦ




考虑Zig操作Zig

在这里我们仅仅讨论Zig,所有的推论可以等价地推广到Zag上。我们称x节点Zig后的点为X’。

Zig的T(i)显然是1,而

ΔΦ=Φ(x)+Φ(y)Φ(x)Φ(y)=Φ(y)Φ(x)Φ(x)Φ(x)

于是 A(i)=1+ΔΦ1+3[Φ(x)Φ(x)]




接下来我们考虑Zig-Zag与Zig-Zig

Zig-Zag

对于一次Zig-Zag, ΔΦ=Φ(x)+Φ(y)+Φ(z)Φ(x)Φ(y)Φ(z)

于是 ΔΦ=Φ(y)+Φ(z)Φ(x)Φ(y)Φ(y)+Φ(z)2Φ(x)

我们又有 Φ(z)+Φ(y)2Φ(x)2 ,这是因为对数函数是凸的。

于是立即推得一次Zig-Zag对应的A有

2+ΔΦ2+(2)[Φ(z)+Φ(y)2Φ(x)]+Φ(y)+Φ(z)2Φ(x) 成立。

即一次操作对应的 A(i)2Φ(x)2Φ(x)<=3Φ(x)3Φ(x) 成立。


考虑Zig-Zig

Zig-Zig

对于一次Zig-Zig, ΔΦ=Φ(x)+Φ(y)+Φ(z)Φ(x)Φ(y)Φ(z)

于是 ΔΦ=Φ(y)+Φ(z)Φ(x)Φ(y)Φ(y)+Φ(z)2Φ(x) 依然成立。

类似地,就可推得一次操作对应的 A(i)2Φ(x)2Φ(x)<=3Φ(x)3Φ(x) 成立。




我们已经论述了三种操作的上界,同时注意到,每次操作结束后的x’恰是下次操作的x,于是不考虑Zig/Zag的情况下,我们可以对Zig-Zag和Zig-Zig的操作分别求和,即 3[Φ(xSonofroot)Φ(xbegin)]

又仅有一次Zig/Zag操作,于是 A(i)3[Φ(xroot)Φ(xbegin)]+1=O(logn)

于是显然,m次操作下的 A(i)=O(mlogn)

那么 T(i)=O(mlogn+nlogn




参考文献:

参与评论 您还未登录,请先 登录 后发表或查看评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页

打赏作者

Le_ballon_rouge

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值