【问题标题】:Dynamic array implementation of stack栈的动态数组实现
【发布时间】:2019-07-20 07:08:53
【问题描述】:

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

例如,为了插入第一个元素,将创建大小为0+10=10 的数组。插入10个元素后,为了插入第第11个元素,将创建一个大小为10+10=20的新数组,并将之前的数组元素复制到这个新数组中。 p>

这个堆栈实现的时间复杂度是多少?

【问题讨论】:

    标签: stack time-complexity


    【解决方案1】:

    在 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),每个操作的摊销运行时间。

    【讨论】:

      【解决方案2】:

      为了容纳n*10 元素,数组必须增长n 倍,所以这可能看起来是O(n)。然而,增加一个数组需要将它的元素复制到新数组,这需要10第一次复制操作,20第二次,依此类推,直到n*10nth。所以我会说这是 O(n^2)。

      【讨论】:

        猜你喜欢
        • 2011-07-29
        • 2016-03-15
        • 2012-01-29
        • 2011-11-16
        • 2014-04-20
        • 2013-04-28
        • 1970-01-01
        • 2012-11-29
        • 2010-11-26
        相关资源
        最近更新 更多