堆栈的动态数组实现

时间:2019-07-20 07:08:53

标签: stack time-complexity

程序员想创建堆栈的动态数组实现,而不是使用重复的倍增,而是在每次数组不能容纳更多元素时创建一个大小为n+10的新数组。

例如,要插入第一个元素,将创建大小为0+10=10的数组。插入 10个元素后,要插入 11th 个元素,将创建一个大小为10+10=20的新数组,并将先前的数组元素复制到该新数组中。

此堆栈实现的时间复杂度是什么?

2 个答案:

答案 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)。

相关问题