数据结构和算法----跳表

跳表

  • 定义

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

数据结构和算法----跳表_第1张图片

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

数据结构和算法----跳表_第2张图片

正常查找需要遍历八个节点,现在只需要遍历七个节点,这个数据量比较小,优势不太明显。数据量越大有优势越明显

这种链表加多级索引的结构就是跳表

  • 分析

时间复杂度:每两个结点会抽出一个结点作为上一级索引的结点,那第一级索引的数量就是n/2,第二级索引的数量就是n/4。依此类推!k级索引的个数就是n/2^k。假设索引有h级,最高级的索引有两个节点。通过上面的公式我们可以得到n/(2^h)=2,从而求得h= log2n-1,去掉原始链表。跳表的高度就得log2n。每层最多遍历三个节点。那么时间复杂度就为O(3log2n)去除常数项时间复杂度为O(logn)

空间复杂度:时间复杂度那里说过第一级索引的数量就是n/2,第二级索引的数量就是n/4k级索引是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)

  • 优化

当我建立索引之后不断往链表中插入数据时,索引并不随之添加。跳表就会退化成链表。

解决办法,插入数据的同时我们可以将数据随机插入到部分索引层中。

你可能感兴趣的:(总结,算法和数据结构)