Algorithm 如果在索引k处翻转一点,成本现在是2^k而不是1,那么二进制计数器中的摊销分析会发生什么?

Algorithm 如果在索引k处翻转一点,成本现在是2^k而不是1,那么二进制计数器中的摊销分析会发生什么?,algorithm,amortized-analysis,Algorithm,Amortized Analysis,假设翻转位i的成本为2i;因此,翻转位0需要花费1,翻转位1需要花费2,翻转位2需要花费4,依此类推 如果我们称之为n次,那么对增量的调用的摊销成本是多少 我认为n增量的成本应该是n·20/20+n·21/21+n·22/22+…+n·2n−1/2n−1=nn−1=开2。所以每个增量都应该打开,对吗?但任务要求我证明它是奥洛恩。我做错了什么?让我们使用p位整数,并遍历所有2^p可能的值 0 0 0 0 0 1 0 1 0 0 1 1 1 0 0 1 0 1 1 1 0 1 1 1 最右边

假设翻转位i的成本为2i;因此,翻转位0需要花费1,翻转位1需要花费2,翻转位2需要花费4,依此类推

如果我们称之为n次,那么对增量的调用的摊销成本是多少


我认为n增量的成本应该是n·20/20+n·21/21+n·22/22+…+n·2n−1/2n−1=nn−1=开2。所以每个增量都应该打开,对吗?但任务要求我证明它是奥洛恩。我做错了什么?

让我们使用p位整数,并遍历所有2^p可能的值

0 0 0
0 0 1
0 1 0 
0 1 1
1 0 0 
1 0 1 
1 1 0
1 1 1
最右边的位在每一步翻转2^p次,因此总成本为2^p 第二位翻转了2^p-1次,但成本为2,所以我们的总成本为2^p .. 最高有效位翻转一次,但成本为2^p,因此我们的总成本为2^p

将所有位的成本相加,我们得到所有操作的全部成本p*2^p

每项作业的摊余成本为p*2^p/2^p=p

但请注意,这是按位量计算的成本,我们必须用N表示


最后,每个操作的摊销复杂度为OlogN

让我们得到p位整数,并遍历所有2^p可能的值

0 0 0
0 0 1
0 1 0 
0 1 1
1 0 0 
1 0 1 
1 1 0
1 1 1
最右边的位在每一步翻转2^p次,因此总成本为2^p 第二位翻转了2^p-1次,但成本为2,所以我们的总成本为2^p .. 最高有效位翻转一次,但成本为2^p,因此我们的总成本为2^p

将所有位的成本相加,我们得到所有操作的全部成本p*2^p

每项作业的摊余成本为p*2^p/2^p=p

但请注意,这是按位量计算的成本,我们必须用N表示

最后,每个操作的摊销复杂性为OlogN