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

news/2024/12/27 7:22:02/

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

数据结构操作平均时间复杂度最坏时间复杂度最优时间复杂度
数组插入/删除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.ppmy.cn/news/1558467.html

相关文章

常用网络协议

了解TCP/IP 、 UDP 、 DNS 、 DHCP 、HTTP/HTTPS、FTP/SFTP 协议(protocol),其实就是一个群体之间规定的规则,这个规则的目的是为了保证这个群体里面的人可以正常交流。 把与互联网相关联的协议集合起来总称为 TCP/IP,TCP/IP 是…

C语言-数据结构-查找

目录 一,查找的概念 二,线性查找 1,顺序查找 2,折半查找 3,分块查找 三,树表的查找 1,二叉排序树 (1)查找方式: (2)、二叉排序树的插入和生成 (3)、二叉排序树的删除 2,平衡二叉树 (1)、什么是平衡二叉树 (2)、平衡二叉树的插入调整 (1)L…

对gPTP上PTP安全控制的评估

论文标题:Evaluation of PTP Security Controls on gPTP(对gPTP上PTP安全控制的评估) 作者信息: Mahdi Fotouhi, Alessio Buscemi, Thomas Engel:卢森堡大学科学、技术与医学系(Faculty of Science, Tech…

实用工具推荐----Doxygen使用方法

目录 1 软件介绍 2 Doxygen软件下载方法 3 Doxygen软件配置方法 4 标准注释描述 4.1 块注释 和 特殊描述字符 4.1.1 函数描述示例 4.1.2结构体数组变量示例 特别注意: 4.2单行注释 4.2.1 单个变量注释示例 特别注意: 4.2.2对于枚举变量描述示…

Unity 读Excel,读取xlsx文件解决方案

Unity读取表格数据 效果: 思路: Unity可以解析Json,但是读取Excel需要插件的帮助,那就把这个功能分离开,读表插件就只管读表转Json,Unity就只管Json解析,中间需要一个存储空间,使用…

Redis篇--常见问题篇8--缓存一致性3(注解式缓存Spring Cache)

1、概述 Spring Cache是Spring框架提供的一个缓存抽象层,旨在简化应用程序中的缓存管理。通过使用Spring Cache,开发者可以轻松地将缓存机制集成到业务逻辑中,而无需关心具体的缓存实现细节。 Spring Cache支持多种缓存提供者(如…

flask后端开发(6):模板继承

目录 slot插槽顶部导航条 slot插槽 顶部导航条 不管页面怎么变化,顶部导航条始终存在

HarmonyOS实战开发之HMRouter实现跳转

程序员Feri一名12年的程序员,做过开发带过团队创过业,擅长Java相关开发、鸿蒙开发、人工智能等,专注于程序员搞钱那点儿事,希望在搞钱的路上有你相伴!君志所向,一往无前! 0.前言 不知道大家在日常进行Harmony OS 的App开发的时候,对于页面跳…