各种数据结构的时间复杂度是多少?

2023-12-02

我试图列出常见数据结构(如数组、二叉搜索树、堆、链表等)操作的时间复杂度,特别是我指的是 Java。它们很常见,但我想我们中的一些人对确切的答案并不是 100% 有信心。非常感谢任何帮助,尤其是参考资料。

例如。对于单链表:更改内部元素的时间复杂度为 O(1)。你怎么能这样做?你HAVE在更改元素之前搜索该元素。另外,对于 Vector,添加内部元素的时间复杂度为 O(n)。但为什么我们不能使用索引在摊余常数时间内完成呢?如果我遗漏了什么,请纠正我。

我将我的发现/猜测作为第一个答案发布。


Arrays

  • 设置、检查特定索引处的元素:O(1)
  • 搜寻中: O(n)如果数组未排序并且O(log n)如果数组已排序并且使用类似二分搜索的方法,
  • 正如所指出的Aivean,没有Delete可以在数组上进行操作。我们可以通过将元素设置为某个特定值来象征性地删除它,例如-1、0等,取决于我们的要求
  • 相似地,Insert对于数组来说基本上是Set正如开头提到的

数组列表:

  • Add: 摊销 O(1)
  • Remove: O(n)
  • Contains: O(n)
  • Size: O(1)

链接列表:

  • 插入: O(1),如果在头部完成,O(n)如果在其他地方,因为我们必须通过线性遍历链表来到达该位置。
  • Deleting: O(1),如果在头部完成,O(n)如果在其他地方,因为我们必须通过线性遍历链表来到达该位置。
  • 搜寻中: O(n)

双向链表:

  • 插入: O(1),如果在头部或尾部进行,O(n)如果在其他地方,因为我们必须通过线性遍历链表来到达该位置。
  • Deleting: O(1),如果在头部或尾部进行,O(n)如果在其他地方,因为我们必须通过线性遍历链表来到达该位置。
  • 搜寻中: O(n)

Stack:

  • Push: O(1)
  • Pop: O(1)
  • Top: O(1)
  • Search(类似于查找,作为一种特殊操作):O(n)(大概吧)

队列/双端队列/循环队列:

  • Insert: O(1)
  • Remove: O(1)
  • Size: O(1)

二叉搜索树:

  • 插入、删除和搜索:平均情况:O(log n), 最坏的情况下:O(n)

红黑树:

  • 插入、删除和搜索:平均情况:O(log n), 最坏的情况下:O(log n)

堆/优先级队列(最小/最大):

  • 求最小值/求最大值: O(1)
  • Insert: O(log n)
  • 删除最小值/删除最大值: O(log n)
  • 提取最小/提取最大: O(log n)
  • 查找、删除(如果提供的话):O(n),我们必须扫描所有元素,因为它们不像 BST 那样排序

哈希映射/哈希表/哈希集:

  • 插入/删除: O(1)摊销的
  • 调整大小/散列: O(n)
  • Contains: O(1)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

各种数据结构的时间复杂度是多少? 的相关文章

随机推荐

  • 计算每行的最大列和最小列之间的差

    标题非常简单 如何计算每行的最大和最小值之间的差异 假设这是我的数据 a b c d 1 2 3 4 0 3 6 9 3 2 1 4 9 8 7 6 对于每一行 我想找到具有最高值的列和具有最低值的列之间的差异 结果如下所示 3 9 3 3
  • android Viewpager 一次只加载一页

    ViewPager setOffscreenPageLimit 0 无法按预期工作 就像这个问题一样 但我需要一个自定义 Viewpager 来按时加载一页 有例子吗 是的 您可以通过以下步骤执行此操作 首先创建一个count适配器类中的变
  • 延迟加载 的内容

    是否可以实现实时滚动或延迟滚动 div 其中有 div
  • 在 Windows 中将用户输入隐藏为星号?

    我需要创建一个简单的密码程序 该程序要求用户输入密码 当用户输入时 它将字符显示为星号 每个教程都使用getch in conio h 但我不想使用它 有没有什么简单的替代方法可以做到这一点 我使用的是 Windows 10 P S 请不要
  • 代表问题

    我这样做是为了从 C 代码中调用非托管函数 pCallback 是一个函数指针 因此在托管端是一个委托 DllImport MyDLL dll public static extern Result SetCallback IntPtr h
  • 没有合适的默认构造函数可用。 (创建子类时)

    我正在创建一些自定义异常类 执行以下操作 class GXException public GXException LPCWSTR pTxt pReason pTxt LPCWSTR pReason class GXVideoExcepti
  • 到底是什么拥有“当前工作目录”?

    我知道工作目录 wd 是什么以及它的用途 至少用于编写软件 我不明白的是 wd 的所有权 此外 我想了解答案在操作系统之间可能有何不同 因此任何有关的澄清unusual在特定操作系统上的行为将受到赞赏 那么首先 wd 在哪里体现出来 是否在
  • 如何使用 Google App Engine 将我的 ID 和密码传递到 Python 网站?

    下面是我使用 Google App Engine 通过 URL 获取网页 HTML 源代码 代码 的一段代码 from google appengine api import urlfetch url http www google com
  • JS 正则表达式允许错误字符

    我有一个用于 SEPA 付款的评论字段 该字段在用户可以输入的内容方面具有以下限制 a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M
  • 无法对 ASP.NET Core 中的 SOAP 服务进行身份验证

    我正在尝试使用 ASP NET Core 库项目中的 SOAP Web 服务 我已经安装了 Microsoft WCF Web 服务参考提供程序 该提供程序已为我创建了代理类 但我在身份验证方面遇到问题 我的代码目前如下所示 var bin
  • 在 XCode 上使用适用于 iOS 的定制 OpenCV 会产生 ___sincos_stret 未定义符号

    我正在尝试在我的 iPhone 应用程序中使用 C 静态库 该应用程序使用适用于 iOS 的 OpenCV 的修改版本 但我在链接时遇到了这个问题 Undefined symbols for architecture armv7 sinco
  • 更改 ScrollView SwiftUI 的背景颜色

    我是开发 IOS 应用程序的新手 并且根据屏幕上图像的大小 我在登录页面底部遇到了额外的空白问题 有人告诉我应该更改 ScrollView 的背景颜色并将视图的背景设置为清晰 我不确定如何更改 ScrollView 的背景颜色 我的代码基本
  • 在 Java 中导入自定义类

    如何导入我在不同文件中编写的类 我的所有课程都在同一个包下 如果所有类都在同一个包中 则不需要导入它们 只需像这样实例化对象 CustomObject myObject new CustomObject
  • 对两列值进行分组并创建唯一的 id

    我正在处理这个数据集 看起来非常相似 如下所示 transaction id customer id phone email 1 19 12345 email protected 2 19 00001 email protected 3 G
  • 如何停止 WPF 动画?

    如何停止动画使其不再产生Completed事件 这是一个简单的例子
  • 更改 Plist 中的数据

    嘿 好吧 我有一个看起来像这样的 plist
  • 如何验证 Facebook 访问令牌?

    服务器唯一要做的事情就是 只需检查任何访问令牌的有效性 客户端将获得的用户 ID 和访问令牌发送到服务器FB getLoginStatus 正如我所料 将会有任何 URL 来检查访问令牌的有效性 例如http xxx facebook co
  • 在 Angular js 中注销时清除 $scope

    在我的控制器中 我将数据存储为 scope parent dossierSummaries data 但注销并登录应用程序后 scope parent dossierSummaries保留相同的旧数据 我在注销时执行此操作 success
  • d3.js 多重关系视觉/linkHorizo​​ntal()/纠结树

    我试图模仿按时间段描述多种关系的视觉效果 如下所示 时间段 生成 然而 我的努力到目前为止还没有成功 我在浏览器中仍然得到空白输出 代码片段中的硬编码数据和代码 var margins top 20 bottom 300 left 30 r
  • 各种数据结构的时间复杂度是多少?

    我试图列出常见数据结构 如数组 二叉搜索树 堆 链表等 操作的时间复杂度 特别是我指的是 Java 它们很常见 但我想我们中的一些人对确切的答案并不是 100 有信心 非常感谢任何帮助 尤其是参考资料 例如 对于单链表 更改内部元素的时间复