这是关于二元计数器的摊销分析。数组中的所有条目都从0开始,每一步我们只是递增计数器。
这里的作者提到如下。
我们使用的潜在函数等于当前计数中的1位数。
问题1:上述陈述是什么意思?
我的其他问题在于分析它被提及为
n +(n / 2)+(n / 4)+ ---最多为2n。我们如何得到结果为2n?
谢谢!
答案 0 :(得分:1)
此示例中递增的成本是要执行的位翻转次数。
即。将3(0b11
)增加到4(0b100
)的成本为3(所有三个位置都翻转)。
现在你不能说,算法是分摊的常量,因为时间量取决于位翻转的数量,因此数量会有所不同。
要解决这个问题,请在从0开始的一系列递增操作中使用电位方法。电位现在是1的位数。
这是有道理的,因为对于每个位为1,将来的增量操作必须在某个时刻将其更改为0。因此,每当需要翻转超过最后一位的增量时,它就会利用该值的潜力。
现在继续摊销分析,您会发现,潜在的总是增加1,并且在每次增量操作中,您减少了每翻转1位的可能性。在每个操作中组合使用此成本为2:a)将0翻转为1,b)为潜力保存1。在0之前翻转所有的支付使用潜力。
答案 1 :(得分:0)
这是一个非常常见的问题,您可以看到这样的here in PDF示例在成本方面说得相当不错。
从图中可以更容易地理解PDF,但它的意思是我们可以使用一个单独的函数,它对应于在这种情况下稍微有点的最小单位,并使它等同于一些明显的值来自例如,pdf中的1位翻转功能相当于1美元。潜在的功能只是使分析变得容易。它从0开始,应该是非负的。
答案 2 :(得分:0)
只需使用几何级数,其中a = 1且r = 1/2。几何级数的总和是
a(1-r^{n})/(1-r).
Here it is (1-(1/2)^{n})/(1-(1/2)) = 2*(1- (1/2)^n).
As n goes to infinity, it becomes 2.