动态数组的运行时间增加一个常数而不是加倍

时间:2012-04-17 03:39:04

标签: data-structures dynamic-tables

我刚刚完成了考试,其中一个问题是摘要:

给定一个大小为1000的空数组,将n个元素插入数组的摊销成本是多少?当数组已满时,不是将数组加倍,而是将它增加1000并将所有元素复制到新数组中,就像动态表一样。

我回答了O(n),但我完全不确定答案。我知道双倍动态表的摊销运行时间是2,但是我找不到关于动态表增长恒定大小的信息。

1 个答案:

答案 0 :(得分:4)

我们的初始大小是A,增量也是A,我们有N个增长步骤。每个步骤都需要k * Size基本操作来复制元素(如果需要,还要清除内存)。

成本= k *(A +(A + A)+(A + 2A)+ ... +(A +(N-1) A))= k (A * N + A *(1 + 2 + 3 + ... +(N-1)))= k *(A * N + A * N *(N-1)/ 2)= O(N ^ 2 * A)= O(N ^ 2)(假设A是常数)

1 + 2 + 3 + ... +(N-1)是arithmetic progression

的总和

P.S。加倍数组的成本为O(N)