二元柜台摊销分析

时间:2012-11-02 08:23:36

标签: algorithm analysis amortized-analysis

我猜你已经知道如果数组中的所有条目都从0开始,并且每一步我们将计数器递增1(通过翻转0和1),那么k增量的摊余成本是O(k)。 / p>

但是,如果Array以n开头会发生什么?我认为k增量的复杂度现在可能是O(log(n)+ k),因为在开始时1的最大数量是log(n)。

有什么建议吗?

提前致谢

1 个答案:

答案 0 :(得分:1)

你是对的。证明这一点的方法不止一种,其中一种方法具有潜在的功能。 This link(和许多其他人)解释了潜在的方法。但是,教科书通常要求潜在函数的初始值为0.让我们概括一下它不是的情况。

对于二进制计数器,计数器的潜在功能是设置为1的位数。当你增加时,你花费k + 1时间将k 1翻转为0并将0翻转为1.潜在的减少k -1。所以这个增量的摊销时间= ActualTime +(PotentialAfter-PotentialBefore)= k + 1-(k-1)= 2(常数)。

现在查看维基百科链接中的“摊销与实际时间之间的关系”部分。

TotalAmortizedTime = TotalActualTime + SumOfChangesToPotential

由于SumOfChangesToPotential是伸缩式的,因此它等于FinalPotential-InitialPotential。所以:

TotalAmortizedTime = TotalActualTime + FinalPotential-InitialPotential

给出了:

TotalActualTime = TotalAmortizedTime - FinalPotential + InitialPotential <= TotalAmortizedTime + InitialPotential

因此,正如你所说,从n开始的k个增量序列的总时间是O(log n + k)。

相关问题