zoukankan      html  css  js  c++  java
  • 数据结构与算法之美-跳表

    跳表的概念

    对链表建立n级索引,例如每两个结点提取一个节点到上一层,称之为索引层。

    图中的down表示down指针,指向下一级结点

    跳表的时间复杂度

    跳表的高度

    跳表的高度是log2n。

    跳表的时间复杂度

    跳表中查询某个数据的时间复杂度是O(logn)。

    跳表的空间复杂度及优化

    跳表的空间复杂度

    跳表的空间复杂度为O(n)。

    优化时间复杂度

    如果链表有n个节点,每3或5个节点抽取抽出一个节点作为上一级索引的节点,

    虽然跳表的空间复杂度仍然是O(n),但和每2个节点抽取一次相比占用的内存空间少了很多。

    高效的动态插入和删除

    时间复杂度

    跳表本质上就是链表,所以仅插作,插入和删除操时间复杂度就为O(1),

    但在实际情况中,要插入或删除某个节点,需要先查找到指定位置,而这个查找操作比较费时。

    在跳表中查找操作的时间复杂度是O(logn),因此跳表的插入和删除操作的是时间复杂度也是O(logn)。

    跳表索引动态更新

    当往跳表中插入数据的时候,可以选择同时将这个数据插入到部分索引层中,

    可以通过随机函数来决定将这个节点插入到哪几级索引中,比如随机函数生成了值K,那就可以把这个节点添加到第1级到第K级索引中。

    跳表代码实现

  • 相关阅读:
    2019年8月20日 item系列
    变量和字符
    python命名规则
    五大常用算法之贪心算法
    过河卒
    组成三位数
    编码问题
    FatMouse' Trade
    A Boring Game
    螺旋矩阵
  • 原文地址:https://www.cnblogs.com/errornull/p/9948664.html
Copyright © 2011-2022 走看看