以下是代码:
int Outcome = 0;
for (int i = 0; i < N; i++)
for (int j = i+2; j = 0; j--)
Outcome += i*j;
这是我的分析。由于第一行是赋值语句,因此只需要一个时间单位O(1)。第2行的细分为:1 + N + N = 2N + 2.第3行, 由于循环的内容是单个操作,循环及其块执行i + 1操作。这也是一个嵌套的for循环。最后,第4行只需要一个时间单位来执行。因此,用N表示该代码的大符号是O(N 2 )。
答案 0 :(得分:1)
准确地说:如你所说,第4行是1次操作。对于特定的i
,您执行内循环i+3
次。因此,您的总操作数为
sum(0 <= i <= N-1 : i+3)
= 3N + sum(0 <= i <= N-1 : i)
= 3N + N(N-1) / 2
= N^2/2 + 5N/2
= O(N^2)
答案 1 :(得分:0)
你对最终效率等级的直觉是正确的,但它可能更严格。首先,您通常只需选择最昂贵的基本操作来计算分析。在这种情况下,它可能是最内层循环中的乘法,每次迭代执行一次。那么它被称为多少次?在最外层循环的第一次迭代中,内循环将迭代两次。在第二次外部迭代中,它将是三次,并且类似地直到N + 2(我假设内部循环条件意味着j >= 0
)。所以这给我们留下了总结:
sum(2, 3, 4, 5, 6 ..., N+2)
= sum(1, 2, 3, 4 ..., N+2) - 1
= (N+2)(N+3)/2 - 1
哪个在O(N²)中(实际上因为你有这个特定的结果总是相同的,你可以说它在Θ(N²))。