Algorithm 如果在索引k处翻转一点,成本现在是2^k而不是1,那么二进制计数器中的摊销分析会发生什么?
假设翻转位i的成本为2i;因此,翻转位0需要花费1,翻转位1需要花费2,翻转位2需要花费4,依此类推 如果我们称之为n次,那么对增量的调用的摊销成本是多少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 最右边
我认为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