跳表定义
跳表是一种动态的数据结构,它基于有序链表然后在链表的基础上增加了索引层,从而达到快速查找链表中特定值的效果,具体如下图所示
跳表分析
时间复杂度
假设我们每两个结点抽出一个作为上层索引的结点,第一级索引结点数量约为n/2,第二级索引结点数量大约为n/4,第三极索节点数量约为n/8,以此类推,第k级索引结点数量。假设我们的索引一共有h层且第h层包含两个结点,由
=2可得h=
-1,再加上原始的链表这层,那整个跳表的高度就为
。
当我们需要查询某个特定值时,我们在每一层上只需要查找m个数据就行,其中m一般为比较小的常量,所以跳表查找任意特定值的时间复杂度就为O(m*logn),忽略常量之后就为O(logn)。
空间复杂度
我们还是每两个结点抽出一个作为上层索引的结点,这样总的节点数为n/2+n/4+n/8…+8+4+2=n-2,所以跳表的空间复杂度为O(n)。
我们可以通过扩大节点抽取的范围来降低空间占用,假设我们每三个点抽取一个点,那么占用的空间则变为 n/3+n/9+n/27+…+9+3+1=n/2
跳表的插入和删除
跳表本质上就是链表,所以仅插作,插入和删除操时间复杂度就为O(1),但在实际情况中,要插入或删除某个节点,需要先查找到指定位置,而这个查找操作比较费时,但在跳表中这个查找操作的时间复杂度是O(logn),所以,跳表的插入和删除操作的是时间复杂度也是O(logn)。