我试图在数据结构的n次操作序列中找到每次操作的摊余成本,其中如果i是2的精确幂,则第i次操作成本i,否则为1.
我想我需要找到一种方法来表达成本n的总和,但我被卡住了.我可以看到特殊的,更昂贵的i值正在发生父亲和更远的距离:
i = 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20…
所以,看起来我在2的第一和第二次幂之间没有数字,然后是一个数字,然后是3,然后是7.当我看了一会儿,我(纠正我,如果这是关闭的)发现数量在第j个和第k个幂之间2的非幂2是2 ^(j-1)-1.
但是,如何将这些结合在一起进行求和?我可以看到js上的东西加上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 ...
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。