当前位置: 首页 > article >正文

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

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

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

相关文章:

  • 实现某海外大型车企(T)Cabin Wi-Fi 需求的概述 - 4
  • 某些iphone手机录音获取流stream延迟问题 以及 录音一次第二次不录音问题
  • Python调用Elasticsearch更新数据库
  • Linux | 零基础Ubuntu搭建JDK
  • ref 和 reactive 的用法和区别
  • 【再学javascript算法之美】前端面试频率比较高的基础算法题
  • 新浪微博C++面试题及参考答案
  • 穷举vs暴搜vs深搜vs回溯vs剪枝系列一>括号生成
  • 复习打卡大数据篇——Hadoop HDFS 03
  • 【杂谈】-现代汽车有哪些传感器
  • (同一个正则表达式设置了全局标志(如 g),并循环使用test方法),导致匹配相同值却返回结果不一样
  • 关于埃斯顿机器人文件导出或者系统日志导出
  • OpenResty、Lua介绍认识
  • 算法的学习笔记— 圆圈中最后剩下的数(牛客JZ62)
  • `we_chat_union_id IS NOT NULL` 和 `we_chat_union_id != ‘‘` 这两个条件之间的区别
  • 如何在 Scrum 管理中化解团队冲突?
  • WEB安全漏洞之路径遍历、跳转等漏洞解析
  • 深度学习blog-Transformer-注意力机制和编码器解码器
  • 处理被拒绝的promise
  • HTTP 协议规定的协议头和请求头