【问题标题】:amortized cost of modified increment function修正增量函数的摊销成本
【发布时间】:2020-03-31 21:26:33
【问题描述】:

所以场景是递增算法,对于 n 位二进制字符串 A[0....n-1],其中 A[0] 是最低有效位,A[n-1] 是最高有效位位,是:

Increment(A,n):
i←0
while i<k and A[i]=1 do
   A[i] ← 0
   i ← i+1
if i < k then
   A[i] ← 1

但是在索引 k 处翻转一点的成本是 2^k

我在试图证明这个修改后的二进制增量算法的摊销成本是 O(logn) 时迷路了。无论我如何尝试接近,摊销成本似乎仍然很大 O(1),尽管常数更大。

aggregated analysis of the increment function. 如果我跟进这个细分并在 sigma 内乘以 2^i,因为翻转第 i 位的成本是 2^i,我得到 n 增量为 nk。这仍然给了我 O(1) 的摊销成本

我不确定我在这里做错了什么。直观地说,它仍然是 O(1) 是有意义的,因为高成本的高位只是抵消了它被翻转的低概率。

【问题讨论】:

标签: algorithm data-structures amortized-analysis


【解决方案1】:

如果我们将计数器从 0 增加到 2^m,每个位翻转多少次?

位 0 翻转 2m 次。第 1 位翻转 2m-1 次。但是 2 翻转 2m-2 次,等等......

如果我们计算总成本:

位 0 的成本为 1 * 2m。第 1 位花费 2*2m = 2m。第 2 位花费 4*2m-2 = 2m 等...

每一位变化的总成本相同,有m+1位变化,所以总成本为(m+1)2m

如果增量数 n = 2m 则每次增量的摊销成本为

(m+1)2m/n

= ((log2n)+1)*n/n

= 1+log2n

【讨论】:

    猜你喜欢
    • 2011-11-20
    • 1970-01-01
    • 2022-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-08
    • 2013-07-02
    • 1970-01-01
    相关资源
    最近更新 更多