Big o 从破解代码开始的摊销时间
我正在阅读关于破解编码面试的摊销时间。作者开始讨论求和,我不明白为什么我们要从右到左求和,以及如何得到2X(X+X/2+…) “1+2+4+8+16+…+X的和是什么?如果你从左到右读这个和,它从1开始,然后翻倍直到X。如果你从右到左读,它从X开始,直到1为止。Big o 从破解代码开始的摊销时间,big-o,amortized-analysis,Big O,Amortized Analysis,我正在阅读关于破解编码面试的摊销时间。作者开始讨论求和,我不明白为什么我们要从右到左求和,以及如何得到2X(X+X/2+…) “1+2+4+8+16+…+X的和是什么?如果你从左到右读这个和,它从1开始,然后翻倍直到X。如果你从右到左读,它从X开始,直到1为止。 那么X+X/2+X/4+X/8+…+1之和是多少?这大约是2X。因此,X次插入需要O(2X)时间。每次插入的摊销时间是O(1)。“让我们在一个具体的例子中尝试一下。让我们假设X=128。我们想知道什么 1+2+4+8+16+32+64+
那么X+X/2+X/4+X/8+…+1之和是多少?这大约是2X。因此,X次插入需要O(2X)时间。每次插入的摊销时间是O(1)。“让我们在一个具体的例子中尝试一下。让我们假设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 =20+21+22+23+…+2log2x 所以我们把一系列的二次幂加起来。我们能简化这个吗?是的!这是一个几何级数的总和,通过快速浏览维基百科,我们可以了解到这一点 20+21+22+23+…+2k=2k+1-1=2·2k-1 在我们的例子中,我们有k=lgx,所以求和的结果是 2·2lg X-1=2X-1
所以我们确实看到,这个总和最多是X的两倍。听起来不对。在描述中,
X
不是插入数log2(X)+1
是插入数。