【发布时间】:2013-10-07 06:15:02
【问题描述】:
假设你想计算一个n。一个简单的算法会将a、n乘以如下:
result = 1;
for(int i =1; i <= n; i++)
result *= a;
该算法需要 O(n) 时间。不失一般性,假设n=2^k
您可以使用以下方案改进算法:
result = a;
for (int i = 1; i <= k; i++)
result = result * result;
该算法需要 O(log n) 时间。对于任意的n,可以修改算法,证明复杂度还是O(logn)
好糊涂,那n=2k怎么算,为什么第二个例子中只显示了k?不明白这如何转化为 O(logn) 时间复杂度...
【问题讨论】:
-
拜托,您能否在一开始就说明该算法试图解决的问题是什么?这听起来很像家庭作业……
-
这可能有助于理解您正在考虑一种特殊情况,其中 n 是 2 的幂。在这种特殊情况下,您可以更有效地实施例程。
-
@nyarlathotep 不是家庭作业,而是教科书中的一个例子,没有解释为什么会这样。
-
不失一般性,假设 n=2^k。 这是很多失一般性。
标签: c++ algorithm math big-o time-complexity