程序员想创建堆栈的动态数组实现,而不是使用重复的倍增,而是在每次数组不能容纳更多元素时创建一个大小为n+10
的新数组。
例如,要插入第一个元素,将创建大小为0+10=10
的数组。插入 10个元素后,要插入 11th 个元素,将创建一个大小为10+10=20
的新数组,并将先前的数组元素复制到该新数组中。
此堆栈实现的时间复杂度是什么?
答案 0 :(得分:0)
插入n次后,数组的大小将为O(n),介于n-10到n + 10之间。 让我们看一下数组的最后一次增加。假设数组的大小为n + 10,则计算如下:
大小更改-> 10次插入->大小更改-> 10次插入....
n + 10-> 10次插入-> n-> 10次插入-> n-10-> 10次插入-> ...-> n-n = 0大小
到目前为止,对于n次插入,我们总计:
Σ(n-10 * i)个运算,Σ从i = -1变为n
我们得到n * n总运行时间,现在我们将n除以得到每个插入的运行时间,因此它变为O(n),每个操作的摊销运行时间。
答案 1 :(得分:0)
要容纳n*10
个元素,数组必须增长n
倍,因此看起来可能是O(n)
。但是,扩展数组涉及将其元素复制到新数组,这需要第一次进行10
复制操作,第二次需要20
,依此类推,直到n*10
{{1} } th。所以我说这是O(n ^ 2)。