有时我们使用动态内存分配来创建数组。如果使用动态内存分配技术分配了数组,则可以通过执行一些操作来使数组大小加倍。
假设初始数组大小为5。
0 | 1 | 2 | 3 | 4 |
元素1 | 元素2 | 元素3 | 元素4 | 元素5 |
数组加倍后,大小为-
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
元素1 | 元素2 | 元素3 | 元素4 | 元素5 | 元素6 | 元素7 | 元素8 | 元素9 | 元素10 |
要使大小为n的数组arr的大小增加一倍,请使用arr [0…n-1]。首先,我们必须创建一个新的大小为m的数组。然后将n个元素从arr复制到新数组。最后,将arr的值更改为指向新数组。
要创建大小为m的数组,这将花费θ(m)的时间。这是因为它将使用一些默认值进行初始化。然后将需要额外的θ(n)时间才能从旧阵列复制到新阵列。因此,该运算需要θ(m + n)的时间。当阵列已满时,将执行此操作。通常,m值等于2n。因此复杂度为θ(2n + n)=θ(3n)等于θ(n)。但是该操作被认为是昂贵的。但是,此操作在子序列n次迭代中摊销,然后每次迭代仅增加θ(1)时间。因此我们可以理解,以恒定因子增加数组大小不会对渐进复杂性产生不利影响。