【发布时间】:2013-09-25 07:03:57
【问题描述】:
我很难理解这个 for 循环的复杂性
for (i = 4; i < n; i++)
{
for (j = i - 3, sum = a[i - 4]; j <= i; j++)
{
sum += a[j];
}
System.out.println("sum thru" + i + ": " + sum);
}
我在想这个嵌套循环的复杂度是 n^2,因为它是一个嵌套循环 但有人告诉我这是不正确的,嵌套循环并不总是二次复杂度!
我真的不知道如何以一种好的方式获得复杂性。我看过很多关于 Big-O 和复杂性的文章,但它们并没有帮助,因为它们希望我了解所有内容,而且它们的示例与我拥有的任何示例都不相同。
我不是在问答案,我是在问方法。是否有任何公式或方法适用于本主题中的所有内容?我想知道如何获得分配的数量,但不幸的是我不知道如何做到这一点。
谁能一步一步给我解释一下?
【问题讨论】:
-
它不是二次的(相对于
n),因为j总是从i-3到i。这意味着内部循环总是只有四次迭代,一个独立于n的数字。 -
另外,还有一个公式:wolframalpha.com/input/… - 每个算法的公式都不一样。
标签: java algorithm for-loop complexity-theory big-o