Big o 摊销分析的基本问题

Big o 摊销分析的基本问题,big-o,amortized-analysis,Big O,Amortized Analysis,数据结构支持操作foo,使得在最坏的情况下,n个操作foo的序列需要Θ(n logn)时间来执行 a) foo运营的摊销时间是多少 b) 单个foo操作的实际时间有多大 a) 首先,我假设foo是O(logn)最坏的情况。 因此,摊销成本来自于foo讲述其最坏情况的频率。由于我们不知道进一步的情况,摊销时间在O(1)和logn之间 b) O(对数n) 这是正确的吗?如果n操作采用Θ(n logn),那么根据定义,一个foo操作的摊销时间是Θ(logn)所有操作的摊销时间是平均的,所以你不需要只计

数据结构支持操作foo,使得在最坏的情况下,n个操作foo的序列需要Θ(n logn)时间来执行

a) foo运营的摊销时间是多少

b) 单个foo操作的实际时间有多大

a) 首先,我假设foo是O(logn)最坏的情况。 因此,摊销成本来自于foo讲述其最坏情况的频率。由于我们不知道进一步的情况,摊销时间在O(1)和logn之间

b) O(对数n)

这是正确的吗?如果
n
操作采用
Θ(n logn)
,那么根据定义,一个
foo
操作的摊销时间是
Θ(logn)
所有操作的摊销时间是平均的,所以你不需要只计算导致它的操作的最坏情况,但也对其他所有资产进行了摊销

b)
foo
有时会花费
O(n)
,只要不超过
O(logn)
foo
甚至偶尔会花费
O(n log n)
,只要发生次数不超过常量(即
O(1)

当您进行摊销分析时,您不会将最坏情况乘以操作数,而是乘以最坏情况实际发生的次数

例如,采取一次将一个元素推入一个向量的策略,但每次新元素不适合当前分配时,通过将分配的大小加倍来增加内存。每个加倍实例的成本
O(n)
,因为您必须复制/移动所有当前元素。但摊销时间实际上是线性的,因为你一次复制1个元素,一次复制2个元素,一次复制4个元素,等等:总的来说,你已经做了成倍的工作,但是每一项的成本总和只是
1+2+4+8+…+n=2*n-1=O(n)
。因此,尽管最坏的情况是
O(n)
,但这种
push
实现的摊销时间是
O(1)