跳表

跳表(skip list)

书籍推荐

《大话数据结构》——https://www.loneway.ren/book/20006

二分查找使用数组实现而不是链表的原因:

      二分查找底层依赖数组随机访问的特性O(1),所以时间按复杂度低,高效,而链表查找的时间复杂度为O(n)。

跳表:

      是链表的改造,是一种支持快速插入、删除、查找操作的动态数据结构。

快速查找功能:

      空间换取时间,对链表建立索引。


    如果我们建立一级索引,要查找16所在的节点,首先在一级索引遍历到13,通过down指针下降到原始链表,使用跳表需要遍历7个结点。而直接遍历原始结点,需要遍历10个结点。建立多层索引,查找效率更高。


复杂度分析: 以每两个结点抽出一个结点作为上一级索引结点为例

(1)时间复杂度

共log2n-1层索引,加上原始数据,共log2n层,每层最多遍历三个结点,所以时间复杂度为O(3*log2n),忽略系数,时间复杂度为O(logn)。

(2)空间复杂度

      等比数列求和:n/2+n/4+…+2=n-2,所以空间复杂度为O(n)。

!虽然空间复杂度为O(n),但是实际软件开发中,原始链表中存储的可能是很大的对象,而索引结点只需要存储关键值和几个指针,并不需要存储对象,所以索引所占额外空间可以忽略。

你可能感兴趣的:(跳表)