Java 各种数据结构的时间复杂性是什么?
我试图列出常见数据结构(如数组、二进制搜索树、堆、链表等)操作的时间复杂性,尤其是Java。它们很常见,但我想我们中的一些人对确切的答案不是100%有信心。非常感谢您的帮助,尤其是推荐信 例如,对于单链表:更改内部元素是O(1)。你怎么能做到?在更改元素之前,必须先搜索该元素。此外,对于向量,添加一个内部元素表示为O(n)。但为什么我们不能用指数在摊销的固定时间内进行呢?如果我遗漏了什么,请纠正我 我将我的发现/猜测作为第一个答案 阵列Java 各种数据结构的时间复杂性是什么?,java,data-structures,time-complexity,Java,Data Structures,Time Complexity,我试图列出常见数据结构(如数组、二进制搜索树、堆、链表等)操作的时间复杂性,尤其是Java。它们很常见,但我想我们中的一些人对确切的答案不是100%有信心。非常感谢您的帮助,尤其是推荐信 例如,对于单链表:更改内部元素是O(1)。你怎么能做到?在更改元素之前,必须先搜索该元素。此外,对于向量,添加一个内部元素表示为O(n)。但为什么我们不能用指数在摊销的固定时间内进行呢?如果我遗漏了什么,请纠正我 我将我的发现/猜测作为第一个答案 阵列 设置,检查特定索引处的元素:O(1) 搜索:O(n)如果
- 设置,检查特定索引处的元素:O(1)
- 搜索:O(n)如果数组未排序,并且O(logn)如果数组已排序并使用类似于二进制搜索的内容
- 正如所指出的,在数组上没有可用的
操作。根据我们的要求,我们可以通过将元素设置为某个特定值来象征性地删除元素,例如-1、0等Delete
- 类似地,数组的
基本上就是前面提到的Insert
Set
- 添加:摊销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)
- Pop:O(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那样排序
- 插入/删除:O(1)摊销
- 重新调整大小/哈希值:O(n)
- 包含:O(1)