ArrayList indexOf是复杂度N吗?

时间:2014-01-27 18:14:46

标签: java arraylist time-complexity

我在arraylist中有N个数字。要获得indexOf,arraylist必须迭代最多N次,因此复杂度为O(N),这是正确的吗?

7 个答案:

答案 0 :(得分:10)

来源Java API

是的,复杂性是O(N)。

size,isEmpty,get,set,iterator和listIterator操作以恒定时间运行。添加操作以分摊的常量时间运行,即添加n个元素需要O(n)时间。所有其他操作都以线性时间运行(粗略地说)。与LinkedList实现相比,常数因子较低。

答案 1 :(得分:3)

是的,它是 O(n),因为它需要在最坏的情况下迭代列表中的每个项目。

实现更好的唯一方法是在列表中使用某种结构。最典型的示例是在 O(log n)时间内使用二进制搜索查看排序列表。

答案 2 :(得分:2)

是的,这是正确的。该订单基于最坏的情况。

答案 3 :(得分:1)

确实如此。最佳案例是1所以O(1),平均情况是N / 2所以O(N)和最坏情况是N所以O(N)

答案 4 :(得分:0)

100%,需要遍历列表才能找到正确的索引。

答案 5 :(得分:0)

ArrayList是一个具有更多功能的数组。因此,对ArrayList执行的操作的复杂性顺序与Array相同。

答案 6 :(得分:0)

在最坏的情况下,您会在最后一个位置找到元素,该元素需要N步,即O(N)。在最好的情况下,您要搜索的项目是第一个,因此复杂度为O(1)。平均长度是平均步数。如果我们没有进一步的背景,那么就可以进行计算:

avg =(1 + 2 + ... n)/ n =(n *(n + 1)/ 2)/ n =(n + 1)/ 2

如果 n - >无穷大,然后加上正常数并除以正常数没有影响,我们仍然有无穷大,所以它是O(n)。

但是,如果您要使用大量有限数据,那么您可能需要计算上面的确切平均值。

此外,您可能有一个上下文可以帮助您进一步准确计算。

示例:

让我们考虑一下您的数组按使用频率降序排序的示例。如果你的indexOf的使用是一种用法,那么最可能的项目是第一个,然后是第二个,依此类推。如果您有每个项目的确切使用频率,那么您将能够计算可能的等待时间。