假设项目(ArrayList<Integer>
)有足够的未使用空间,从而不需要重新调整大小,以下两种算法的最坏情况时间复杂度是多少?我最初的猜测是A会运行得更慢,因为它必须将每个元素移位以在索引[0]
处添加新元素。我认为在最坏的情况下B是O(N^2)
,但我不确定。
一个。
for (int i = 0; i < N; i++)
items.add(0, new Integer(i));
和B.
for (int i = 0; i < N; i++)
items.add(new Integer(i));
答案 0 :(得分:1)
如果你的问题是关于java的,那么第一个版本的速度较慢,并且由于你提到的原因而具有复杂性O(N^2)
,而B的复杂性为O(N)
。
答案 1 :(得分:1)
实现A可以假设items
数组足够大,实现为:
for (int i = 0; i < n; i++) {
for (int j = items.size; j > 0; j++) {
items[j] = items[j-1];
}
items[0] = i;
}
在这种情况下执行的操作总数(假设m
是items
列表的初始大小)将是:
http://mathurl.com/bj762fv.png
复杂性 O(n 2 )
另一方面,选项B可以实现为
for (int i = 0; i < n; i++) {
items[items.size] = i;
items.size++;
}
并且在这种情况下执行的操作数将是
http://mathurl.com/c2ty89u.png
这具有复杂性 O(n)
答案 2 :(得分:0)