通过改变大小增加动态数组时的摊销运行时间

时间:2019-02-11 21:40:45

标签: algorithm dynamic append amortized-analysis amortization

我有一个动态数组,我不断在其中添加项。追加是复杂度O(1)。当阵列已满时,我想扩展阵列并将其复制过来,这就是复杂性O(n)

现在,假设阵列满时我以不同的速率增长阵列。这些比率是:

i)一些常数C

ii)n / 2

iii)n ^ 2

在每种情况下,摊销的运行时间是多少?

我相信我能够解决案例i。摊销的运行时间将是总运营成本除以总运营数量。在这种情况下,总成本为C * O(1) + 1 * O(n),操作总数为C。因此,摊销的运行时间为O(n)

但是,在分析其余两个案例时,我有些迷茫。在我看来,手术的总数将分别为n/2 + 1n^2 + 1,但我不太了解如何计算手术的总成本。

谁能带领我走上正确的道路?

1 个答案:

答案 0 :(得分:1)

您可以使用与第一种情况类似的分析。

ii.
(n/2 * O(1) + O(n)) / (n/2) = O(1) + O(n)/n = O(1)
iii.
(n^2 * O(1) + O(n)) / (n^2) = O(1) + O(n)/n^2 = O(1)

This answer给出了更详细的解释,说明为什么按n比例调整大小的动态数组(假设其大小调整为n的1或更大的幂)具有固定的摊销成本