动态阵列的摊余时间
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了动态阵列的摊余时间相关的知识,希望对你有一定的参考价值。
举个简单的例子,在动态数组的具体实现中,我们每次填满数组时,数组的大小都会翻倍。正因为如此,可能需要对数组进行重新分配,在最坏的情况下,一次插入可能需要O(n)时间。然而,一个n次插入的序列总是可以在O(n)时间内完成,因为其余的插入是在恒定的时间内完成的,所以n次插入可以在O(n)时间内完成。因此,每个操作的摊销时间是O(n) n = O(1).--来自Wiki。
但在另一本书中:每次翻倍需要O(n)的时间,但发生的次数很少,所以其摊销时间仍然是O(1)。
希望有人能告诉我,这种罕见的情况是否能推断出Wiki的解释?谅谅
答案
摊派基本上是指平均每操作次数。
所以,如果你有一个n的数组,你需要在数组中插入 n+1个项目 直到你需要重新分配。
所以,你已经做了 n 嵌件 他们每个人都采取了 O(1)和另一个插页,采取了 O(n)所以你总共有 n+1次行动 让你付出代价 2n次操作 .
2n / n+1 ~= 1
这就是为什么摊余时间仍然是。O(1)
另一答案
是的,这两句话说的是同一件事,Wiki只是解释的更彻底。
以上是关于动态阵列的摊余时间的主要内容,如果未能解决你的问题,请参考以下文章
php Slack.com Webhook Integration(PHP) - 简单的片段,告诉您如何构建有效负载阵列。