跳表
- 定义
跳表就是链表的一种变形。来降低链表查找和删除的时间复杂度。跳表其实就是一种可以进行二分查找的有序链表。

这样的结构可以大大提高查找效率例如我要查找8

正常查找需要遍历八个节点,现在只需要遍历七个节点,这个数据量比较小,优势不太明显。数据量越大有优势越明显
这种链表加多级索引的结构就是跳表
- 分析
时间复杂度:每两个结点会抽出一个结点作为上一级索引的结点,那第一级索引的数量就是n/2,第二级索引的数量就是n/4。依此类推!k级索引的个数就是n/2^k。假设索引有h级,最高级的索引有两个节点。通过上面的公式我们可以得到n/(2^h)=2,从而求得h= log2n-1
,去掉原始链表。跳表的高度就得log2n
。每层最多遍历三个节点。那么时间复杂度就为O(3log2n
)去除常数项时间复杂度为O(logn)
空间复杂度:时间复杂度那里说过第一级索引的数量就是n/2,第二级索引的数量就是n/4,k级索引是n/2^k。所以所有节点得总和为
n/2+n/4+n/8+…+n/2k![]()
=(2k
-1)n/2k![]()
=n – n/2k
由 n/(2^h)=2 得 n – 2 省略常数项空间复杂度为O(n)
- 优化
当我建立索引之后不断往链表中插入数据时,索引并不随之添加。跳表就会退化成链表。
解决办法,插入数据的同时我们可以将数据随机插入到部分索引层中。
跳表是一种有序链表结构,通过多级索引提高查找效率。本文解析跳表定义、时间与空间复杂度分析,以及如何通过随机化索引层级优化结构。

856

被折叠的 条评论
为什么被折叠?



