【发布时间】:2010-02-04 08:07:15
【问题描述】:
可能重复:
The most efficient way to implement an integer based power function pow(int, int)
如何计算具有更好运行时间的功率?
例如2^13。
我记得在某处看到它与以下计算有关:
2^13 = 2^8 * 2^4 * 2^1
但我看不出如何计算等式右侧的每个分量,然后将它们相乘。
有什么想法吗?
编辑:我的意思是任何基地。您在下面提到的算法,特别是“平方指数”如何提高运行时间/复杂性?
【问题讨论】:
-
“平方指数”以
log(exp)步长计算base^exp,其中log 是以2 为底的对数。 -
@Nick D,我知道我在回答中声明了这一点,但我意识到我有点错误。如果您使用标准整数,这基本上是正确的。但是一旦你开始使用 bignums,它基本上就变成了
O(log(n)^2),因为乘法需要超过 O(1) 的时间。 -
@Omnifarious,我说的是 log(exp) 步骤,我没有指定 O。我同意你的观点,如果我们考虑“乘法”操作,实际运行时复杂度可能不是 O(logn)。