我正在尝试在数据结构的n
次操作序列中找到每次操作的摊余成本,如果ith
是i
,则i
操作费用为n
确切的幂为2,否则为1。
我想我需要找到一种方法来表示成本总和i
,但我被卡住了。我可以看到特殊的,更昂贵的jth
值发生在父亲和更远的地方:
i = 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 ......
所以,看起来我在2的第一和第二次幂之间没有数字,然后是一个数字,然后是3,然后是7.当我看了一会儿,我(纠正我,如果这是关闭的)发现kth
和2^(j-1) - 1
2的幂之间的2的非幂数为js
。
但是我怎么能将这一切联系起来呢?我可以看到{{1}}上的某些东西加上2本身的实际权力数量,但是我很难将它们整合到一个单一的概念中。
答案 0 :(得分:2)
我不能提供一个封闭形式的总和,但很明显平均成本达到2的幂,连续的这样的峰值渐近到3.0,在下一个2的幂之前衰减到渐近上升的下限朝着2.0。
严格在2 ^ n和2 ^(n + 1)之间的(2 ^ n)-1值中的每一个对总成本贡献1(导致平均值向下衰减)直到值2 ^(n +) 1)增加2 ^(n + 1)。因此,在2 ^ n之后开始并且以2 ^(n + 1)结束的片段的平均贡献是((2 ^ n)-1 + 2 ^(n + 1))/ 2 ^ n或(3 * 2 ^ n - 1)/ 2 ^ n,随着n的增加接近3。
您可以在下面的摘录表中看到这两种效果。希望这会有所帮助。
i sum average
------- ------- -------
1: 1 1.00000
2: 3 1.50000
3: 4 1.33333
4: 8 2.00000
...
7: 11 1.57143
8: 19 2.37500
...
15: 26 1.73333
16: 42 2.62500
...
31: 57 1.83871
32: 89 2.78125
...
63: 120 1.90476
64: 184 2.87500
...
127: 247 1.94488
128: 375 2.92969
...
255: 502 1.96863
256: 758 2.96094
...
511: 1013 1.98239
512: 1525 2.97852
...
1023: 2036 1.99022
1024: 3060 2.98828
...
2047: 4083 1.99463
2048: 6131 2.99365
...
4095: 8178 1.99707
4096: 12274 2.99658
...
8191: 16369 1.99841
8192: 24561 2.99817
...
16383: 32752 1.99915
16384: 49136 2.99902
...
32767: 65519 1.99954
32768: 98287 2.99948
...
65535: 131054 1.99976
65536: 196590 2.99973
...
131071: 262125 1.99987
131072: 393197 2.99986
...
262143: 524268 1.99993
262144: 786412 2.99992
...
524287: 1048555 1.99996
524288: 1572843 2.99996
...
1048575: 2097130 1.99998
1048576: 3145706 2.99998
...
答案 1 :(得分:2)
每步的摊余成本范围从略低于3(当n是2的幂)下降到略小于2(当n比2的幂小1时),如下所示。
设K(n)表示n步的总成本,让T(n)表示不超过n的2的幂的成本。假设n = 2 ^ j。然后K(n) = n + T(n) - j
T(2^j) = 1 + 2 + 4 +...+ 2^j = 2^(j+1)-1 = 2*n-1,
K(n) = 3*n - j - 1
,现在假设n = 2 ^(j + 1)-1。我们有
K(n) = K(2^j) + n - 2^j
(因为在步骤2 ^ j之后n - 2 ^ j单位成本步骤),即
K(n) = (3*2^j - j - 1) + (2^(j+1) - 1) - 2^j
,
或
K(n) = 2*(2^(j+1)-1) - j = 2*n - j
,
当n小于2的幂时,摊销成本略低于2。
答案 2 :(得分:1)
每次操作的摊余成本最多为3.您可以通过计算n个操作的总成本并将其除以n或充电参数来获得此成本。计费参数可以如下构造。
当我不是2的幂时,对i充电费用为1。否则,当i是2 ^ k的形式时,操作成本将是2 ^ k,其将在位置中的操作之间重新分配:[2 ^ {k-1} + 1,2 ^ k]。这可以通过将[2 ^ {k-1} + 1,2 ^ k-1]个位置中的每个操作的电荷增加2并且将剩余电荷2分配给2 ^ k位置处的操作来完成。重新分配后,任何位置的最大电荷为3.
答案 3 :(得分:1)
n次操作的总成本 -
我是如何到达这个 -
2的权力成本 - 2的前n次幂之和为。由于我需要数字达到n的幂,我用log n的底部替换了n。
其他数字的费用 - 剩余的个数字会有单位成本。
将它们都添加起来,您将得到等式。