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级索引中。

    跳表代码实现

  • 相关阅读:
    File
    Include and Require
    Date and Time
    css3的nth-child选择器使用示例
    document.title
    php获取从百度搜索进入网站的关键词的详细代码
    Iphone手机、安卓手机浏览器控制默认缩放大小的方法
    离线宝调用
    织梦DedeCMS网站地图模板
    禁止选择文本和禁用右键 v3.0
  • 原文地址:https://www.cnblogs.com/errornull/p/9948664.html
Copyright © 2011-2022 走看看