关键是二进制计数器在开头有一些内容。它是否仍然按时间复杂度摊销?如何证明?
我们假设我们有11010
二进制计数器,我们将其递增,以便它现在11011
,依此类推。
单增量操作的摊余成本是多少?
答案 0 :(得分:5)
每项操作的摊余成本为O(1)。
令n
为计数器中的位数。
In all increment operations, you need to change the LSb
In half of the operations, you need to change the 2nd LSb
In 1/4 of the operations, you need to change the 3rd LSb
...
In 1/(n/2) of the operations, you need to change the (n-1)th LSb (2nd MSb)
In 1/n of the operations, you need to change n'th LSb (MSb).
这使您的平均表现为:
1 + 1/2 + 1/4 + ... + 1/n <=(*) 2
要正式证明,请使用归纳,修改位数。
(*)来自Sum of geometric series,a=1, r=1/2
,当从1到无穷大求和时,得到SUM = 1/(1-r) = 1* 1/(1/2) = 2
。由于我们只从这个数字减去了,我们实际上得到的总和严格小于2.