数组、链表、跳表的时间复杂度和空间复杂度

2023-10-27

数组、链表、跳表的时间复杂度和空间复杂度

一、数组

1.1头插入、尾插入、中间某个位置插入
在这里插入图片描述

时间复杂度为O(1),空间复杂度为O(n)

在这里插入图片描述

时间复杂度为O(1),空间复杂度为O(n)

在这里插入图片描述
时间复杂度为 O ( n 2 ) = O ( n ) O(\frac{n}{2})=O(n) O(2n)=O(n),空间复杂度为O(n)

综上所述,插入的时间复杂度为O(n),空间复杂度为O(n)

1.2 头删除、尾删除、中间某个位置删除
在这里插入图片描述
删除头节点要移动n-1个节点,时间复杂度为O(n),空间复杂度为O(n)

在这里插入图片描述
时间复杂度为O(1),空间复杂度为O(n)

在这里插入图片描述
删除中间某个节点的空间复杂度为 O ( n 2 ) = O ( n ) O(\frac{n}{2})=O(n) O(2n)=O(n),空间复杂度为O(n)
1.3查找
假如是根据下标进行查找的话的时间复杂度为O(1),假如是进行遍历查找某个值的话时间复杂度为O(n),空间复杂度都为O(n)

二、链表(Linked List Java中实现是双向链表)

2.1头插入、尾插入、中间某个位置插入
在这里插入图片描述
时间复杂度为O(1),假设每个节点所占空间的大小为1,则空间复杂度为O(n)

在这里插入图片描述
时间复杂度为O(1),假设每个节点所占空间的大小为1,则空间复杂度为O(n)

在这里插入图片描述
插入的话会执行两个操作,插入的节点指向要插入位置的节点,要插入位置的前节点指向插入节点,时间复杂度为O(2),即O(1),假设每个节点所占空间的大小为1,则空间复杂度为O(n)

综上所述链表表删除的时间复杂度为O(1),空间复杂度为O(n)

2.2 头删除、尾删除、中间某个位置删除

在这里插入图片描述
时间复杂度为O(1),假设每个节点所占空间的大小为1,空间复杂度为O(n).

在这里插入图片描述
时间复杂度为O(1),假设每个节点所占空间的大小为1,空间复杂度为O(n).
在这里插入图片描述
删除中间某个节点只有一步操作,删除节点的前驱节点指向被删除节点的后驱节点,故时间复杂度为O(1),假设每个节点所占空间的大小为1,空间复杂度为O(n).

综上所诉删除节点的时间复杂度为O(1),假设每个节点所占空间的大小为1,空间复杂度为O(n).

2.3查找
查找的时间复杂度为O(n),假设每个节点所占空间的大小为1,空间复杂度为O(n).

三、跳表

3.1原始链表图
在这里插入图片描述
上图的查询的时间复杂度为O(n),要怎么进行优化呢,这时候就要用到升维的思想,即以空间换时间,这个思想也贯穿整个数学界和物理学界。
3.2跳表图
在这里插入图片描述

第一层索引节点n/2,第二层索引节点n/4,第三层索引节点n/8,以此类推第n层节点 n 2 h \frac{n}{2^h} 2hn,假设最高级索引的节点数为2,则2= n 2 h \frac{n}{2^h} 2hn,得到h=logn - 1。
由上图可以知道,当我们要找到8号这个节点的时候,我们在k级索引发现5<8<9,故我们要到k-1索引下找,但是发现7<8<9,故我们要到原始链表找,且k索引层最多遍历1,5,9三个节点,k-1最多遍历5,7,9三个节点,故跳表的时间复杂度为O(3logn)=O(logn),索引节点总数为:n/2 + n/4 + n/8 + … + 8 + 4 + 2 = n 1 2 ( 1 − 1 2 n ) 1 − 1 2 \frac{\frac12(1-\frac12^n)}{1-\frac12} 12121(121n)=n(1- 1 2 n \frac12^n 21n)=n,故空间复杂度为O(n)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

数组、链表、跳表的时间复杂度和空间复杂度 的相关文章

随机推荐

  • 将Spring Boot打包成一个可执行的jar

    创建一个可执行jar 让我们通过创建一个完全自包含的可执行jar文件来结束我们的示例 该jar文件可以在生产环境运行 可执行jars 有时候被成为胖jars fat jars 是包含你的编译后的类和你的代码运行所需的依赖jar的存档 可执行
  • ubuntu18.04 天选2 R95900hx 3060显卡驱动安装

    天选2 R95900hx 3060显卡驱动安装 需求 问题 解决 内核 集显 显卡驱动 需求 外接显示器 安装nvidia驱动 问题 由于一开始直接在软件和更新中附加驱动安装了nvidia 470 导致系统黑屏 解决 grub页面系统选择进
  • 手机解除移动宽带屏蔽_FANUC/三菱M70系统如何屏蔽伺服轴?

    有时为了调试方便和操作方便需要 需将伺服脱开或电机脱开 比如 在拆除四轴时 屏蔽相关的一些报警就可以通过参数屏蔽伺服轴 在维修电机或拆卸工作台时 需要将电机或工作台拆下时 就可以通过参数屏蔽相关的报警 其他轴不受拆除轴的影响还可正常移动运转
  • QT DAY1

    做一个窗口界面 include mainwindow h include ui mainwindow h MainWindow MainWindow QWidget parent QMainWindow parent ui new Ui M
  • CSDN专家博客网址

    CSDN Blog 所有专家 分类 业界 软件工程 项目管理 NET JAVA Delphi C C WEB开发 数据库 移动开发 开源 游戏开发 企业开发 工具 产品 综合 网络管理 IT媒体 云计算 业界蒋涛 周筠 芮祥麟 余平 陈荣华
  • iPhone 各屏幕尺寸及解析

    一 iPhone 各屏幕尺寸表 手机型号 屏幕尺寸 inch 像素密度 PPI 逻辑分辨率 point 物理分辨率 屏幕分辨率 pixel 缩放因子 scale factor 宽高比 近似 比例 近似 3GS 3 5 inch 163 pp
  • 如何用API函数获取网卡或硬盘的序列号

    转自 https zhidao baidu com question 502153566675093684 html include
  • 使用.NET中的XML注释(一) -- XML注释标签讲解

    一 摘要 Net允许开发人员在源代码中插入XML注释 这在多人协作开发的时候显得特别有用 C 解析器可以把代码文件中的这些XML标记提取出来 并作进一步的处理为外部文档 这篇文章将展示如何使用这些XML注释 在项目开发中 很多人并不乐意写繁
  • 网络协议有哪些?

    除了TCP IP协议以外 还有很多其他的网络协议 1 HTTP 超文本传输协议 用于在Web浏览器和Web服务器之间传输数据 2 FTP 文件传输协议 用于在不同计算机之间传输文件 3 SMTP 简单邮件传输协议 用于在不同计算机之间传输电
  • 5-1:什么是Servlet-开发你的第一个动态网站

    4 1 JavaWeb开发环境 1 安装IDEA 2 IDEA配置tomcat9 MAC版 兄弟们 这一章的内容我录制了一个视频 可以观看一下 5 1 什么是Servlet 开发你的第一个动态网站 本节内容配套视频 https www bi
  • 当下流行的 Web 编程语言都有哪些?

    如果你是一名新晋的 Web 开发人员 那么在选择最佳 Web 编程语言时将面临很多困难 不同的编程语言支持不同的编程技术 而且各有各的复杂性 此外 新的编程语言层出不穷 让人看得眼花缭乱 在本文中 我们将列出一些最适合 Web 开发的编程语
  • 总结之java代码规范(一)——注释规范、IDEA类和方法注释模板设置

    最近新团队需要需要整一套适合java代码规范 基于阿里java开发手册规范一下代码规范 一 注释要求 1 强制 类 类属性 类方法的注释必须使用javadoc规范 使用 内容 格式 不得使用 xxx方式 2 强制 所有的抽象方法 包括接口中
  • 掩码语言模型(Masked Language Model)mlm

    https www cnblogs com anai p 11645953 html bert 论文 从语言模型到Seq2Seq Transformer如戏 全靠Mask https zhuanlan zhihu com p 6910608
  • 目标检测+光流跟踪

    最近学习了LK光流法 主要用于运动目标的跟踪 于是想着和之前codebook运动目标检测结合起来 实现先检测再跟踪 下面介绍目标检测跟踪流程 1 使用codebook进行背景学习 2 使用codebook不断进行运动目标检测 3 若发现运动
  • Idea-maven项目创建及javafx运行案例

    Idea maven项目创建及javafx运行案例 文章目录 Idea maven项目创建及javafx运行案例 maven项目创建 maven javafx项目配置 首先先把可能要添加的依赖理清楚 配置pom xml文件 但是与此同时还是
  • 567. Permutation in String

    567 Permutation in String Given two strings s1 and s2 write a function to return true if s2 contains the permutation of
  • 为什么需要专门出现GPU来处理图形工作,CPU为啥不可以?

    GPU 是并行编程模型 和CPU的串行编程模型完全不同 导致很多CPU 上优秀的算法都无法直接映射到GPU 上 并且GPU的结构相当于共享存储式多处理结构 因此在GPU上设计的并行程序与CPU 上的串行程序具有很大的差异 GPU主要采用立方
  • 2023最火软件测试工程师涨薪攻略,3年如何达到30K?

    软件测试如何实现涨薪 首先涨薪并不是从8000涨到9000这种涨薪 而是从8000涨到15K加到25K的涨薪 基本上三年之内就可以实现 如果我们只是普通的有应届毕业生或者是普通本科那我们就只能从小公司开始慢慢往上走 有些同学想去做测试 是希
  • rm -rf *后怎么办?

    1 冷静 2 查看字盘文件系统类型 sudo fdisk l 3 根据对应文件系统 下载相应软件进行数据恢复 文件系统 处理方法 参考链接 Microsoft basic data NTFS HPFS ntfsundelete https
  • 数组、链表、跳表的时间复杂度和空间复杂度

    数组 链表 跳表的时间复杂度和空间复杂度 一 数组 二 链表 Linked List Java中实现是双向链表 三 跳表 一 数组 1 1头插入 尾插入 中间某个位置插入 时间复杂度为O 1 空间复杂度为O n 时间复杂度为O 1 空间复杂