• 极客时间课程《数据结构与算法之美》笔记09


    跳表

    对链表改造一波,可以支持类似“二分”的查找算法,改造成跳表。
    快速的插入删除查找,有些时候可以替代红黑树。
    核心思想是对链表建立一层索引(比如隔两个结点提取一个结点到上一级),减少遍历节点的数目。
    进阶思想是再加一层索引。
    链表加多级索引的结构,就是跳表。
    我的感觉思想比较接近向上生长的二叉树。

    跳表查询的时间复杂度就是O (logn) ,空间换时间。每一层最多遍历m个结点,m数量跟索引规则有关。(隔一个结点取索引的话,m就是3)
    虽然占用空间有点多,空间复杂度为O (n) ,但是实际开发中,原始链表的存储可能很大,而索引仅仅是存储关键值和几个指针。新占用的空间和原始数据相比可以忽略。

    高效动态插入删除

    复杂度也是O (logn) ,仅仅是定位到插入的位置需要复杂度,单个的插入操作的时间复杂度是O(1)。

    常常插入和删除之后,需要动态更新索引,要不然会退化成为单链表。

    往跳表中插入数据的时候,可以选择同时将这个数据插入到部分索引层中,通过一个随机函数,决定将这个节点插入到哪几级索引中。比如生成K,则将此结点一次添加到第一级到第K级这K级索引中。

  • 相关阅读:
    商务通服务器版LR_Data目录下相关配置文件
    Python入门神图
    你不知道的JavaScript-2.词法作用域
    你不知道的JavaScript-1.作用域是什么
    linux服务器对外打包处理
    C# Form 关闭按钮灰化
    Spread常用属性
    Spread 常用属性
    C#打开关闭窗体事件顺序
    sqlserver如何使用日期计算
  • 原文地址:https://www.cnblogs.com/JackKing-defier/p/11155512.html
Copyright © 2020-2023  润新知