Java 设置时间和速度复杂性
我正在复习算法和数据结构,我有一些问题和陈述,希望你们检查一下 ArrayList-O(1)(大小、获取、设置等),O(n)-添加操作。Java 设置时间和速度复杂性,java,algorithm,collections,Java,Algorithm,Collections,我正在复习算法和数据结构,我有一些问题和陈述,希望你们检查一下 ArrayList-O(1)(大小、获取、设置等),O(n)-添加操作。 LinkedList-所有操作O(1)(包括add()),但检索第n个元素O(n)除外。我假设size()操作也在O(1)中运行,对吗 树集-所有操作O(lg(N))。size()运算需要O(lg(n)),对吗 哈希集-如果应用了正确的哈希函数,则所有操作都是O(1)。 HashMap-所有操作O(1),与HashSet无关 欢迎进一步解释。提前感谢。Arra
LinkedList-所有操作O(1)(包括add()),但检索第n个元素O(n)除外。我假设size()操作也在O(1)中运行,对吗 树集-所有操作O(lg(N))。size()运算需要O(lg(n)),对吗 哈希集-如果应用了正确的哈希函数,则所有操作都是O(1)。
HashMap-所有操作O(1),与HashSet无关 欢迎进一步解释。提前感谢。
ArrayList.add()
按O(1)摊销。如果操作不需要调整大小,则为O(1)。如果确实需要调整大小,则为O(n),但随后会增加大小,以便下一次调整在一段时间内不会发生
从:
添加操作在摊销的固定时间内运行,即添加n个元素需要O(n)个时间。所有其他操作都在线性时间内运行(粗略地说)。与LinkedList实现相比,常数因子较低
就性能分析而言,文档对于Java集合来说通常是相当不错的
散列算法的O(1)不仅仅是应用一个“适当的”散列函数——即使有一个非常好的散列函数,也可能会发生散列冲突。通常的复杂度是O(1),但是如果所有的散列发生冲突,它当然可以是O(n)
(另外,这是将散列的成本计算为O(1)-实际上,如果您对字符串进行散列,那么对
hashCode
的每次调用可能在字符串长度上都是O(k)。请访问以下链接。这将帮助你消除疑虑
HashSet
和HashMap.add
:它们的复杂性也受到散列函数的影响(可能是O(k),其中k是字符串长度)。