如果数组已满并且其大小增加1以插入新元素,则插入N个元素的时间可以计算为1 + 2 + .. N = N ^ 2/2。 (声明长度为+ 1的新数组并将元素复制到新数组中。)
我无法理解如何计算时间如果不是将数组大小增加1而是声明一个长度为2 * size的新数组,然后复制新数组中的元素。
答案 0 :(得分:1)
假设您有一个大小为1的数组,每次数组变满时该数组将加倍。
现在,您将要插入2048项:然后,当长度变为2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048
时,它将扩展并复制内容。总共需要4094(~2n)次操作。
此外,只需将n
个操作简单地插入数组即可。
总之,它是O(n)
,线性。
可以通过系数r = 2
和第一项a1 = 2
的几何级数和公式轻松描述:
Sn = a1 * (r ^ n - 1) / (r - 1)
= 2 * (2 ^ n - 1) / (2 - 1)
= 2 * 2 ^ n
其中n
是数组的计数"倍增"。
当2的pows加倍时,它通常会接近log2(n)
。
2 * 2 ^ log2(n) = 2 * n
,这意味着它始终是线性的。