resize()方法被调用多少次?

时间:2019-07-09 16:49:09

标签: java algorithm data-structures stack

您能否解释为什么正确答案是对数的?我不明白。

假设从一个空的数据结构开始,我们在堆栈的大小调整数组实现中执行n推入操作。 resize()方法被调用多少次?

a)常量

b)对数(正确。resize()方法仅在堆栈的大小为2的幂时才调用。在1和n之间有〜log2n的2的幂。)

c)线性

d)二次

1 个答案:

答案 0 :(得分:0)

为了容纳新元素,当填充新元素时,完全填充的动态数组(或称大小调整数组)会将其容量加倍。对于动态数组的大多数常见实现都是如此。

最初,您的堆栈(通过动态数组实现)为空。当您按第一个元素时,它的大小将调整为1个元素的容量。当您按一下时,它会调整为2个元素的容量。当您按下第三个时,它将调整为4个元素的容量。因此,第4个元素没有调整大小。但是当您按5th时,它现在可以调整为8的容量。依此类推。

因此,如果您要推送n元素,则在推送第1、2、3、5、9、17,...个元素时将调用resize()

那么resize()被叫多少次?如果您忽略第一个元素,则在推送resize()元素(其中(2^k + 1)th)时会调用k = 0,1,2,3,4,5...。由于在log2(n)范围内几乎有[1,n]个这样的数字,因此将调用resize()的次数。因此,对数是正确的答案。