常用的数据结构的时间复杂度

下面是常用数据结构及其常见操作(如插入、删除、查找等)时间复杂度的表格。表格中列出了每种数据结构的常见操作在不同情况下的时间复杂度。

数据结构操作平均时间复杂度最坏时间复杂度最优时间复杂度
数组插入/删除O(n)O(n)O(1)
查找O(1)O(1)O(1)
更新O(1)O(1)O(1)
链表插入/删除O(1)O(1)O(1)
查找O(n)O(n)O(n)
更新O(n)O(n)O(n)
插入/删除O(1)O(1)O(1)
查找O(n)O(n)O(n)
队列插入/删除O(1)O(1)O(1)
查找O(n)O(n)O(n)
哈希表插入O(1)O(n)O(1)
查找O(1)O(n)O(1)
删除O(1)O(n)O(1)
二叉搜索树插入O(log n)O(n)O(log n)
查找O(log n)O(n)O(log n)
删除O(log n)O(n)O(log n)
平衡二叉树插入O(log n)O(log n)O(log n)
查找O(log n)O(log n)O(log n)
删除O(log n)O(log n)O(log n)
插入O(log n)O(log n)O(log n)
查找O(1)O(1)O(1)
删除O(log n)O(log n)O(log n)
Trie(前缀树)插入O(m)O(m)O(m)
查找O(m)O(m)O(m)
删除O(m)O(m)O(m)
图(邻接矩阵)插入O(1)O(1)O(1)
查找O(1)O(1)O(1)
删除O(n)O(n)O(n)
图(邻接表)插入O(1)O(1)O(1)
查找O(n)O(n)O(n)
删除O(n)O(n)O(n)
跳表插入O(log n)O(log n)O(log n)
查找O(log n)O(log n)O(log n)
删除O(log n)O(log n)O(log n)

解释:

  • 数组:在数组中查找是常数时间复杂度 𝑂(1)O(1),但是插入和删除时,特别是在数组的中间进行操作时,需要移动元素,时间复杂度为 𝑂(𝑛)O(n)。
  • 链表:链表在插入和删除时非常高效,时间复杂度为 𝑂(1)O(1),但在查找元素时需要遍历链表,时间复杂度为 𝑂(𝑛)O(n)。
  • 栈和队列:这两种数据结构的操作都是常数时间复杂度 𝑂(1)O(1),但是查找元素需要遍历,因此时间复杂度为 𝑂(𝑛)O(n)。
  • 哈希表:哈希表的平均查找、插入和删除操作都是常数时间 𝑂(1)O(1),但是最坏情况下(例如哈希冲突较多时),可能退化为 𝑂(𝑛)O(n)。
  • 二叉搜索树:在平衡的情况下,二叉搜索树的查找、插入和删除操作的时间复杂度是对数时间 𝑂(log⁡𝑛)O(logn),但是在最坏情况下,树退化成链表时,操作的时间复杂度为 𝑂(𝑛)O(n)。
  • 平衡二叉树(如 AVL 树、红黑树):由于其始终保持平衡,所有操作的时间复杂度都为 𝑂(log⁡𝑛)O(logn)。
  • :堆的插入和删除操作需要调整堆结构,因此是 𝑂(log⁡𝑛)O(logn),而查找最大(或最小)元素是常数时间 𝑂(1)O(1)。
  • Trie(前缀树):插入、查找和删除操作的时间复杂度与字符串的长度 𝑚m 成正比。
  • 图(邻接矩阵和邻接表):图的表示方式影响查找和删除的复杂度,邻接矩阵查找边的时间复杂度是 𝑂(1)O(1),但删除边时需要遍历所有邻接的节点,时间复杂度为 𝑂(𝑛)O(n);邻接表则需要遍历相邻的节点,查找和删除的时间复杂度为 𝑂(𝑛)O(n)。
  • 跳表:跳表是一种能够实现 𝑂(log⁡𝑛)O(logn) 查找、插入和删除操作的概率性数据结构。

这些时间复杂度是平均情况下的常见值。实际的性能可能会根据具体实现和输入的不同而有所变化。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/497811.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Pytorch | 利用VA-I-FGSM针对CIFAR10上的ResNet分类器进行对抗攻击

Pytorch | 利用VA-I-FGSM针对CIFAR10上的ResNet分类器进行对抗攻击 CIFAR数据集VA-I-FGSM介绍相关定义算法流程 VAI-FGSM代码实现VAI-FGSM算法实现攻击效果 代码汇总vaifgsm.pytrain.pyadvtest.py 之前已经针对CIFAR10训练了多种分类器: Pytorch | 从零构建AlexNet对…

Elasticsearch:使用 Ollama 和 Go 开发 RAG 应用程序

作者:来自 Elastic Gustavo Llermaly 使用 Ollama 通过 Go 创建 RAG 应用程序来利用本地模型。 关于各种开放模型,有很多话要说。其中一些被称为 Mixtral 系列,各种规模都有,而一种可能不太为人所知的是 openbiollm,这…

实战案例——ZooKeeper集群部署(新手教程超详细)

案例目标 了解ZooKeeper分布式应用程序协调服务使用3台机器搭建ZooKeeper集群使用ZooKeeper集群 案例分析 规划节点 ZooKeeper集群节点规划 Ip 主机名 节点 192.168.110.10 zookeeper1 集群节点 192.168.110.20 zookeeper2 集群节点 192.168.110.30 zookeeper3 …

上手教程:使用Terraform打造弹性VPC架构

最近Akamai发布的虚拟专用云(VPC)功能提供了一种隔离的网络,让云资源可以用私密的方式进行通信。 关于Akamai VPC功能,最棒的地方在于它有着极高的灵活性。用户可以通过Cloud Manager、开发人员工具(如CLI&#xff09…

基于python的扫雷游戏

游戏 游戏目标: 揭开所有非地雷的格子。 如果揭开地雷,游戏失败。 使用标记功能(🚩)来标记可能的地雷位置。 格子类型: 空白格子:表示周围没有地雷。 数字格子:显示周围 8 个格子…

利用Java爬虫速卖通按关键字搜索AliExpress商品

在这个信息爆炸的时代,数据的价值日益凸显。对于电商领域的从业者来说,能够快速获取商品信息成为了一项重要的技能。速卖通(AliExpress)作为全球领先的跨境电商平台,拥有海量的商品数据。本文将介绍如何使用Java语言编…

Java中三大构建工具的发展历程(Ant、Maven和Gradle)

🐸 背景 我们要写一个Java程序,一般的步骤是编译,测试,打包。 这个构建的过程,如果文件比较少,我们可以手动使用java, javac,jar命令去做这些事情。但当工程越来越大,文件越来越多&#xff0c…

ubuntu快速入门

1.进入某个文件夹 cd workspace/2.tab自动补全 3.列出当前文件夹所有文件 ls列出所有文件包括隐藏文件 ls -a 4.创建文件夹 mkdir linuxLearn 5.创建文件 gedit command.sh在commmand.sh键入 echo hello echo hi? echo how are you? PS:touch hello.txt(也可以创建新…

meshy的文本到3d的使用

Meshy官方网站: 中文官网: Meshy官网中文站 ​编辑 Opens in a new window ​编辑www.meshycn.com Meshy AI 中文官网首页 英文官网: Meshy目前似乎还没有单独的英文官网,但您可以在中文官网上找到英文界面或相关英文资料。 链…

嵌入式入门Day34

网络编程 Day1 为什么要学习网络编程?网络发展历史APRAnet阶段TCP/IP两个协议阶段网络体系结构及OSI开放系统系统互联模型网络体系结构概念OSI开放系统互联模型 TCP和UDP异同网络基础相关的概念字节序IP地址的转换IP地址子网掩码端口号 为什么要学习网络编程&#x…

代码解析:安卓VHAL的AIDL参考实现

以下内容基于安卓14的VHAL代码。 总体架构 参考实现采用双层架构。上层是 DefaultVehicleHal,实现了 VHAL AIDL 接口,并提供适用于所有硬件设备的通用 VHAL 逻辑。下层是 FakeVehicleHardware,实现了 IVehicleHardware 接口。此类可模拟与实…

【视觉惯性SLAM:四、相机成像模型】

相机成像模型介绍 相机成像模型是计算机视觉和图像处理中的核心内容,它描述了真实三维世界如何通过相机映射到二维图像平面。相机成像模型通常包括针孔相机的基本成像原理、数学模型,以及在实际应用中如何处理相机的各种畸变现象。 一、针孔相机成像原…

【前端,TypeScript】TypeScript速成(二):逻辑控制与循环

TypeScript 当中的逻辑控制 if-else if-else 的使用和其它语言非常相似: let answer: yes|no|maybe|undefined undefinedlet httpStatus: 200 | 404 | 500 | 200 | 404 | 500 200function processHttpStatus(s: 200 | 404 | 500 | 200 | 404 | 500) {// 一律使…

JSON 系列之1:将 JSON 数据存储在 Oracle 数据库中

本文为Oracle数据库JSON学习系列的第一篇,讲述如何将JSON文档存储到数据库中,包括了版本为19c和23ai的情形。 19c中的JSON 先来看一下数据库版本为19c时的情形。 创建表colortab,其中color列的长度设为4000。若color的长度需要设为32767&a…

TOGAF之架构标准规范-业务架构

TOGAF标准规范中,业务架构阶段的主要工作是开发支持架构愿景的业务架构。 如上所示,业务架构(Business Architecture)在TOGAF标准规范中处于B阶段,该阶段的主要内容包括阶段目标、阶段输入、流程步骤、架构方法。 阶段…

科技创新 数智未来|清科·沙丘投研院走进竹云

12月20日,清科沙丘投研院带领企投家团队走进竹云交流分享,聚焦技术创新、企业数字化管理、行业前沿应用案例等热点议题,深入探讨数字技术如何点燃企业高质量发展的澎湃动力,共话企业数字化、智能化发展之道。 达晨财智股权管理部…

【免费分享】mysql笔记,涵盖查询、缓存、存储过程、索引,优化。

概括 本篇笔记涵盖基础查询、视图、存储过程、函数、索引、优化、分库分表。适合在学完mysql后进行时常观看。下面展示部分内容。如果需要可以在文章底部的链接进行下载查看。 简介 数据库 数据库:DataBase,简称 DB,存储和管理数据的仓库…

Docker 安装全攻略:从入门到上手

Docker 安装全攻略:从入门到上手 在当今的软件开发与部署领域,Docker 已经成为了一项不可或缺的关键技术。它能够将应用程序及其依赖项打包成轻量级、可移植的容器,极大地简化了开发、测试和部署的流程。本文将详细讲解在不同操作系统下 Doc…

mysql建立主从集群

mysql建立主从集群需要多个mysql服务器,主从数据库是通过log日志来进行同步的,所以需开启log-bin。本地安装多个mysql参考底部 主数据库配置 打开主数据库my.ini配置文件,给其配置server_id1 [mysqld] port3306 basedirD:/phpstudy_pro/1/…

curl+openssl 踩坑笔记

curl编译:点击跳转 踩坑一 * SSL certificate problem: unable to get local issuer certificate * closing connection #0 curl: (60) SSL certificate problem: unable to get local issuer certificate More details here: https://curl.se/docs/sslcerts.html …