【发布时间】:2016-05-06 14:28:51
【问题描述】:
以下方法的时间复杂度是多少?为什么?
由于第一个 for 循环,我知道它必须大于 O(n)。
但是 while 循环之后的时间复杂度会发生什么变化?
是O(n)(n-1) = O(n^2 + n)吗?
int fnA(int n) {
int sum=0;
for (int i=0; i<n; i++) {
int j=i;
int product =1;
while (j>1) {
product ∗= j ;
j = j / 2;
}
sum += product;
}
return sum;
}
【问题讨论】:
-
这看起来像是一个家庭作业问题。你试过什么?这里的复杂度是多项式的,并且大于
O(n)。顺便说一句,O(n^2 + n)没有多大意义,因为渐近地,n^2占主导地位,所以在这种情况下你要写的是O(n^2)。 -
@William 是的,这是我正在准备的考试题。所以它是 O(n^2 + n) 我是对的? :)
-
嗯,你在正确的轨道上,但请参阅我对上面评论的编辑。
-
@William 啊,是的,你是对的,最终答案是 O(n^2),因为你打算拿最大的一个吗?
-
这应该会让你走上正轨:math.stackexchange.com/q/228744/258990
标签: time-complexity big-o