【发布时间】:2013-09-17 03:36:41
【问题描述】:
for (int i = n - 1; i != 0; i /= 2) ++k;
我无法理解如何计算上述时间复杂度。当 n 为负时,我无法弄清楚它的行为。谁能帮我到那里。当 n 为正时,我尝试过。
Statement Code Time
1a i=n-1 1
1b i != 0 log2n+1
1c i = i/2 log2n
2 ++k log 2n
Total running time 3 log 2n+2
当我分析 n 为正的代码时,我得到了这些值。但是当 n 为负数时我没能得到
【问题讨论】:
-
你是如何达到你目前的价值观的?您的分析中似乎缺少一些步骤。
-
两者都是一样的:
O(log n)。 -
当n为正或负时,为logn(以2为底)。
-
如果 n 是 2 的 16 次幂,那么它将循环大约 16 次,而不是 2 的 16 次幂。
-
另外,对数的底数也无所谓,因为changing the base只做一个常数因子的差值,而big-oh没有考虑常数因子。