跳表

如数组的二分查找,链表中逐渐缩小查找区域,来查询目标数据。

在单链表中查找数据,即使有序,由于指针方向也只能从头到尾遍历链表。如何进行优化,让查找次数减少呢? —— 跳表

如图,给链表建立一级索引层这样我们查找某个节点可以现在第一级查找出大致范围,在逐渐缩小范围,减少了查找次数。

如果再建立一层:

查找次数再次减少。

如果在数据量比较大的情况,在链表中查找的效率会明显提升。

这种在链表上加多级索引的结构,就是跳表。查找到过程就是一个逐渐缩小范围的过程。

时间复杂: 每层结点数m = n/(2^k); // 每两个结点抽出一层 假设有k级,最高级索引有两个结点。那么有n个数据求层级数: n/(2^k) = 2; k = log2n-1。如果每个层级都要遍历m个结点,则总的时间复杂度O(m*logn)。 因为每两个结点抽出一层,因此一个范围内最多也就3个结点,m=3。时间复杂度O(logn)

空间复杂度:

等比数列求和O(n),m大一些,空间复杂度会更加降低。同时,实际开发中索引层级中的节点只需要存储需要进行比较的关键值和指针就行,相比于数据节点的对象来说,索引额外占用的空间可以忽略掉了。

插入删除

插入:

时间复杂度:查找位置+插入 O(logn)

删除: 注意:当删除节点的同时,索引也要删除。还要找到前驱结点。

跳表索引动态更新

索引表添加节点

代码: github.com/wangzheng08…

转载于:https://juejin.im/post/5bee7526e51d4553f42705f4

数据结构与算法-学习笔记(13)相关推荐

  1. 数据结构与算法 学习笔记(5):字符串

    数据结构与算法 学习笔记(5)- 字符串 本次笔记记录了LeetCode中关于字符串的一些问题,并给出了相应的思路说明和代码.题目编号与LeetCode对应,方便查找. 题目1:LeetCode 13 ...

  2. 数据结构与算法 学习笔记(8):字典、集合、哈希表

    数据结构与算法 学习笔记(8):字典.集合.哈希表 本次文章记录的是和字典.集合.哈希表等数据结构相关的LeetCode算法题(题号与LeetCode对应),包括其构造和使用,针对每一题或一类题给出了 ...

  3. 数据结构与算法学习笔记之 从0编号的数组

    数据结构与算法学习笔记之 从0编号的数组 前言 数组看似简单,但掌握精髓的却没有多少:他既是编程语言中的数据类型,又是最基础的数据结构: 一个小问题: 为什么数据要从0开始编号,而不是 从1开始呢? ...

  4. 数据结构与算法学习笔记之 提高读取性能的链表(上)

    数据结构与算法学习笔记之 提高读取性能的链表(上) 前言 链表(Linked list)比数组稍微复杂一点,在我们生活中用到最常见的应该是缓存,它是一种提高数据读取性能的技术,常见的如cpu缓存,浏览 ...

  5. 数据结构与算法学习笔记——链栈

    数据结构与算法学习笔记(C语言) 链栈 在开始链栈的学习之前,我们先实现一下上一篇文章中提到的检查括号匹配的小程序,鉴于水平有限,本人就随便写一下代码好了,目标仅限于对功能的实现. /*用顺序栈这种数 ...

  6. 数据结构与算法学习笔记4:递归+分治法

    数据结构与算法学习笔记4 递归 斐波那契数列 青蛙跳台阶问题 链表倒序打印 分治法 二分查找/折半查找 Binary Search 题目1:快速幂 题目2:如何判断一个数是否为2的次幂 递归 指在函数 ...

  7. 数据结构与算法学习笔记15:最大流问题 / 二分图 / 有权无权二分图的匹配 / 匈牙利算法 / 银行家算法 / 稳定婚配

    数据结构与算法学习笔记15:最大流问题 / 二分图 / 有权无权二分图的匹配 / 匈牙利算法 / 银行家算法 / 稳定婚配 引入小题:最短路径 最大流问题(maximum flow problem) ...

  8. 数据结构与算法学习笔记——图 C++实现

    数据结构与算法学习笔记--图 C++实现 1 概念 2 图的表示方法 3 算法 3.1 拓扑排序 3.2 图的搜索算法 3.2.1 广度优先搜索(BFS) 3.2.2 深度优先搜索(DFS) 3.3 ...

  9. 数据结构与算法学习笔记之先进先出的队列

    前言 队列是一种非常实用的数据结构,类似于生活中发排队,可应用于生活,开发中各个方面,比如共享打印机(先请求先打印),消息队列.你想知道他们是怎么工作的么.那就来一起学习一下队列吧 正文 一.队列的定 ...

  10. 【数据结构与算法学习笔记】

    文章目录 前言 0 Preview与算法复杂度分析简述 1 线性数据结构 1.1 Stack 1.2 Queue 1.3 Deque 1.4 UnorderedList 1.5 OrderedList ...

最新文章

  1. 使用.NET,郁闷之余,写下的废话
  2. CMS之promotion failedconcurrent mode failure
  3. SAP Intelligent Robotic Process Automation权限控制
  4. 1936年发表理想计算机的论文,科学网—图灵1936年论文解读(1):可计算性 - 柳渝的博文...
  5. mysql中数据定义和数据控制语言_MySQL的DDL数据定义语言和DCL数据控制语言
  6. mongodb 默认端口号_你的爬虫数据储存在哪?MongoDB入门篇
  7. android 编译宏,android 添加全局变量宏开关的三种方式
  8. python语言检测模块langid、langdetect使用
  9. Origin中多峰拟合方法
  10. 安卓系统实现播放器变速功能
  11. 广东省的身份证号码开头
  12. 什么是cmd?常见的cmd命令 cd、mkdir、md、del、ping
  13. GStreamer基础教程之GStreamer工具
  14. Acwing-872. 最大公约数
  15. 锐龙R7PRO 4750G、锐龙R5 PRO 4650G和 锐龙R3 PRO4350G怎么样 哪个好
  16. 风控中消费信贷板块的英文词汇
  17. python笔记图片_python-opencv笔记 图像的读取和简单几何图形绘制
  18. http协议_代理服务(proxy)
  19. UOS开机之后进入emergency mode“journalctl -xb”
  20. BBR 拥塞控制算法blog笔记

热门文章

  1. CentOS 6.4安装配置LNMP服务器(Nginx+PHP+MySQL)
  2. linux----------CentOS的一些除了yum安装以外的基本操作命令。
  3. python 虚拟环境依赖复制
  4. Application runtime path /opt/lampp/htdocs/yii/test/protected/runtime is not valid. 错误
  5. 与女儿谈商业模式 (3):沃尔玛的成功模式
  6. (干货)微信小程序转发好友
  7. javaEE(16)_Servlet监听器
  8. 面向对象UML中类关系
  9. spring mvc 总结
  10. 成本速度定成败 四种宽带接入技术大比拼(1)