关于非常大的计数器运行时间的天真问题

时间:2011-04-09 21:34:11

标签: counter performancecounter time-complexity

我有一个关于计数器最大尺寸的天真问题。例如,以下代码不应该在合理的时间内完成,因为它需要至少2 ^ 512次算术运算,或者更实质上,它需要更改i 2 ^ 512次的值!

c = 2 to the power 512;
for (i = 1, i < c, i++) {
   j = j + 1 / ( i * i + 1 );    

}

但是当我使用计算机代数软件“Mathematica”时,它给我的答案不到一秒钟。我的问题是它怎么能实现这个目标?

PS。我对计数器大小的天真想法是由于我对复杂性的看法。当我阅读一些书籍(不太正式,因为他们只关注算术运算的复杂性)关于复杂性时,他们总是省略索引的成本。只有当柜台很小时,我才能想象这一点。

1 个答案:

答案 0 :(得分:1)

在猜测中,当您的循环终止条件固定为2 ^ 512时,Mathematica可能会将其视为求和的几何序列,因此使用公式计算它而不必迭代所有循环值。 / p>

查看Geometric Progression上的维基百科条目和Geometric Series上的Wolfram页面。

如果这是普通的编程语言,例如像C ++,Java或C#,你是绝对正确的!此外,2 ^ 512是一个非常大的数字,并将溢出这些语言中的“正常”数据类型。

假设你的意思是2的功率为512而不是2 xor 512(即514)。