破解编码面试的摊销时间

时间:2019-01-04 00:34:24

标签: big-o amortized-analysis

我正在阅读有关破解编码访谈的摊销时间的信息。作者开始谈论总和,但我不明白为什么我们会从右向左求和,以及这如何使我们得到2倍(X + x / 2 + ...)

“ 1 + 2 + 4 + 8 + 16 + ... + X的总和是多少?如果您从左到右阅读此总和,则从1开始并加倍直到得到X。如果您正确阅读向左,它从X开始并减半,直到达到1。 那么X + x / 2 + x / 4 + x / 8 + ... + 1的总和是大约2倍。因此,X次插入需要O(2X)时间。每次插入的摊销时间为O(1)。“

1 个答案:

答案 0 :(得分:0)

让我们尝试一个具体的例子。假设X =128。我们想知道什么

  

1 + 2 + 4 + 8 + 16 + 32 + 64 + 128

是。作者的想法是将此金额反写为

  

128 + 64 + 32 + 16 + 8 + 4 + 2 + 1,

具有与开始时相同的值。然后她建议将64视为128/2,将32视为128/4,将16视为128/8,这意味着

  

128 + 64 + 32 + 16 + 4 + 2 +1

     

= 128 + 128/2 + 128/4 + 128/8 + 128/16 + 128/32 + 128/64 + 128/128

     

= 128(1 + 1/2 + 1/4 + 1/8 + 1/16 + 1/32 + 1/64 + 1/128)

那么,这是多少?她要了解的是,这些分数最多相加为两个。你知道为什么吗?如果您对这个想法没问题,可以看到总和最多为2·128。是我们开始时的两倍。

您也可以用其他方式得出此总和。首先,请注意

  

1 + 2 + 4 + 8 + ... + X

     

= 2 0 + 2 1 + 2 2 + 2 3 + ... + 2 < sup> log 2 X 。

因此,我们将一系列的2的幂加起来。我们可以简化一下吗?是的这是一个几何级数的总和,通过快速浏览Wikipedia,我们可以了解到

  

2 0 + 2 1 + 2 2 + 2 3 + ... + 2 k = 2 k + 1 -1 = 2·2k -1。

在我们的例子中,我们有k = lg X,所以总和为

  

2·2lg X-1 = 2X-1。

所以我们确实看到,这个和最多是X的两倍。