动态阵列的摊余时间

问题描述 投票:6回答:2

举个简单的例子,在动态数组的具体实现中,我们每次填满数组时,数组的大小都会翻倍。正因为如此,可能需要对数组进行重新分配,在最坏的情况下,一次插入可能需要O(n)时间。然而,一个n次插入的序列总是可以在O(n)时间内完成,因为其余的插入是在恒定的时间内完成的,所以n次插入可以在O(n)时间内完成。因此,每个操作的摊销时间是O(n) n = O(1).--来自Wiki。

但在另一本书中:每次翻倍需要O(n)的时间,但发生的次数很少,所以其摊销时间仍然是O(1)。

希望有人能告诉我,这种罕见的情况是否能推断出Wiki的解释?谅谅

algorithm amortized-analysis
2个回答
15
投票

摊派基本上是指平均每操作次数。

所以,如果你有一个n的数组,你需要在数组中插入 n+1个项目 直到你需要重新分配。

所以,你已经做了 n 嵌件 他们每个人都采取了 O(1)和另一个插页,采取了 O(n)所以你总共有 n+1次行动 让你付出代价 2n次操作 .

2n / n+1  ~= 1 

这就是为什么摊余时间仍然是。O(1)


0
投票

是的,这两句话说的是同一件事,Wiki只是解释的更彻底。

© www.soinside.com 2019 - 2024. All rights reserved.