跳表时间复杂度证明

1.插入的界限。

其分为两步,第一步找到插入的位置,第二步为向上增加的过程。(抛硬币的方式向上增加)
这两步显然都是与跳表的高度相关的,而跳表高度以较大概率是有界的
在这里插入图片描述
可见,其概率不光与n有关,还与常数c相关。
固定 c,随着n的增大,其概率趋近于1;固定n,随着c的增大,其概率也趋近于1。
常数c相当于一个界限,随着我不断放宽界限,其概率也越来越大。
因此其时间复杂度为O(clogn)

2.搜索的界限可解释为:

可将该过程逆向,看成从底部向左上角走的过程。在每一个结点处,我们都有0.5的概率向上走,有0.5的概率向左走。
而向上走是有界的(以较高概率)。因向左、向上的概率相同,可将中间向左走的步数也设为clogn(如果到达最上层,那就强制向左走,此时的结点数是很少的,可看为常数时间)。
因此搜索的平均时间复杂度为O(clogn)

二. y-fast tries

0.x-fast tries类似前缀树,但其中间的每个节点包含指向前驱和后继的指针,最底层为双向链表。

1.以有序方式存储,每个lgu大小的元素划分为一个集合(红黑树实现,红黑树中元素的总数量为lgu),每个集合的代表(大于该集合中的所有元素,可能不在该集合中)存储在类似x-fast tries中。

集合代表存储在x-fast tries中也能方便进行判断x在那个区域内

2.具体操作
查找:找到给定某个元素x的后继,将x插入到其前面的树中。

其插入或删除操作,每次都需要改变红黑树,代价为O(lglgu)。改变集合代表需要改变x-fast tries结构,代价为O(lgu) ,这里使用摊还技术,即只有当其整个集合从lgu减为0.5lgu ,或从lgu加为2lgu ,才改变整个集合的代表(需要合并或划分集合),这样改变代表的摊还代价为O(1),因此总摊还代价为O(lglgu) 。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值