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) 。