Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 各种数据结构的时间复杂性是什么?_Java_Data Structures_Time Complexity - Fatal编程技术网

Java 各种数据结构的时间复杂性是什么?

Java 各种数据结构的时间复杂性是什么?,java,data-structures,time-complexity,Java,Data Structures,Time Complexity,我试图列出常见数据结构(如数组、二进制搜索树、堆、链表等)操作的时间复杂性,尤其是Java。它们很常见,但我想我们中的一些人对确切的答案不是100%有信心。非常感谢您的帮助,尤其是推荐信 例如,对于单链表:更改内部元素是O(1)。你怎么能做到?在更改元素之前,必须先搜索该元素。此外,对于向量,添加一个内部元素表示为O(n)。但为什么我们不能用指数在摊销的固定时间内进行呢?如果我遗漏了什么,请纠正我 我将我的发现/猜测作为第一个答案 阵列 设置,检查特定索引处的元素:O(1) 搜索:O(n)如果

我试图列出常见数据结构(如数组、二进制搜索树、堆、链表等)操作的时间复杂性,尤其是Java。它们很常见,但我想我们中的一些人对确切的答案不是100%有信心。非常感谢您的帮助,尤其是推荐信

例如,对于单链表:更改内部元素是O(1)。你怎么能做到?在更改元素之前,必须先搜索该元素。此外,对于向量,添加一个内部元素表示为O(n)。但为什么我们不能用指数在摊销的固定时间内进行呢?如果我遗漏了什么,请纠正我

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

阵列
  • 设置,检查特定索引处的元素:O(1)
  • 搜索O(n)如果数组未排序,并且O(logn)如果数组已排序并使用类似于二进制搜索的内容
  • 正如所指出的,在数组上没有可用的
    Delete
    操作。根据我们的要求,我们可以通过将元素设置为某个特定值来象征性地删除元素,例如-1、0等
  • 类似地,数组的
    Insert
    基本上就是前面提到的
    Set
ArrayList:
  • 添加摊销O(1)
  • 删除O(n)
  • 包含O(n)
  • 大小O(1)
链接列表:
  • 插入O(1),如果在头部插入,O(n)如果在任何其他位置插入,因为我们必须通过线性跟踪链接列表来达到该位置
  • 删除O(1),如果在头部执行,O(n)如果在任何其他位置执行,因为我们必须通过线性跟踪链接列表来达到该位置
  • 搜索O(n)
双链接列表:
  • 插入O(1),如果在头部或尾部插入,O(n)如果在任何其他位置插入,因为我们必须通过线性移动链接列表来达到该位置
  • 删除O(1),如果在头部或尾部执行,O(n)如果在任何其他位置执行,因为我们必须通过线性跟踪链接列表来达到该位置
  • 搜索O(n)
堆栈:
  • 推送O(1)
  • PopO(1)
  • 顶部O(1)
  • 搜索(类似于查找,作为一种特殊操作):O(n)(我想是这样)
队列/队列/循环队列:
  • 插入O(1)
  • 删除O(1)
  • 大小O(1)
二叉搜索树:
  • 插入、删除和搜索:平均情况:O(log n),最坏情况:O(n)
红黑树:
  • 插入、删除和搜索:平均情况:O(日志n),最坏情况:O(日志n)
堆/优先级队列(最小/最大):
  • 查找最小值/查找最大值O(1)
  • 插入O(日志n)
  • 删除最小值/删除最大值O(日志n)
  • 提取最小值/提取最大值O(对数n)
  • 查找、删除(如果提供):O(n),我们必须扫描所有元素,因为它们不像BST那样排序
HashMap/Hashtable/HashSet:
  • 插入/删除O(1)摊销
  • 重新调整大小/哈希值O(n)
  • 包含O(1)

所有数据结构的时间和空间复杂性如果其他人介入,请花一分钟检查此链接:将元素插入数组(插入是指将新元素添加到位,将所有元素向右移动)需要O(n)。删除时相同。仅替换现有元件将需要O(n)。另外,您可能将其与向可调整大小的数组中添加新元素混合在一起(它已摊销了O(1)次)。另外,请注意,对于双链接列表,插入和删除头和尾都需要O(1)(您只提到了头)。最后一点是,平衡搜索树(例如,实际上在Java中用于树映射的红黑树)保证所有操作的最坏情况时间为O(ln n)。@Aivean:我只是想列出标准数据结构的标准操作。对于数组:添加/删除时移动元素不是标准操作。另外,替换现有元素需要使用索引,而不是O(n),取O(1)。对于双链接列表:您是对的,我正在进行更正。对于红黑树来说:同样,你是对的。但我只列出了一个BST,不需要平衡。因此,我将为红黑树添加新条目。谢谢你的评论@SuhailGupta:集合的复杂性已经作为最后一点给出。