算法与数据结构(三) -- 跳表

作者:opLW
参考:王争老师的 《数据结构与算法之美》

  • 定义 为一个值有序的链表建立多级索引,比如每2个节点提取一个节点到上一级,我们把抽出来的那一级叫做索引或索引层。如下图所示,其中down表示down指针,指向下一级节点。以此类推,对于节点数为n的链表,大约可以建立log2n-1级索引。像这种为链表建立多级索引的数据结构就称为跳表。
  • 时间复杂度 跳表的时间复杂度是O(mlogn)。 当每两个抽取一个索引时,其时间复杂度是O(2logn),往往常数可以不计,所以跳表的时间复杂度是O(logn)。
  • 空间复杂度 每两个抽取一个索引时,索引的数量为(n/2 + n/4 + n/8 + …,8 + 4 + 2) = n - 1,所以跳表的空间复杂度为O(n)。
  • 优化思路 减小抽取索引的粒度。如每三个抽取一个索引:索引的数量为(n/3 + n/9 + n/27 + …,27 + 9 + 3 + 1) = n/2。
  • 总结
    虽然建立索引需要很多的额外空间,但是在实际的应用中,这些索引往往只是被索引对象的一个关键属性,即相比较对象而言,索引占用的空间只是很小的一部分。但其删除,插入,查找的速度很快。总体上比较优秀。

万水千山总是情,
麻烦手下别留情。
如若讲得有不妥,
文末留言告知我,
如若觉得还可以,
收藏点赞要一起。

opLW原创七言律诗,转载请注明出处

发布了21 篇原创文章 · 获赞 28 · 访问量 7320

猜你喜欢

转载自blog.csdn.net/qq_36518248/article/details/90299555