Algorithm 这种最坏情况分析正确吗?

Algorithm 这种最坏情况分析正确吗?,algorithm,complexity-theory,Algorithm,Complexity Theory,代码如下: int Outcome = 0; for (int i = 0; i < N; i++) for (int j = i+2; j = 0; j--) Outcome += i*j; int结果=0; 对于(int i=0;i=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²中)(事实上,

代码如下:

int Outcome = 0;  
for (int i = 0; i < N; i++)  
    for (int j = i+2; j = 0; j--)  
        Outcome += i*j;
int结果=0;
对于(int i=0;i
这是我的分析。因为第一行是赋值语句,所以只需要一个时间单位O(1)。第2行的细分为:1+N+N=2N+2。三号线,,
由于循环的内容是单个操作,因此循环及其块执行i+1操作。这也是一个嵌套的for循环。最后,第4行只需要执行一个时间单位。因此,用N表示的代码的大Oh符号是O(N2)。

准确地说:正如您所说,第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)

sum(0关于最终的效率等级,您的直觉是正确的,但它可能更严格。首先,您通常只选择最昂贵的基本运算来计算分析。在这种情况下,它可能是最内部循环中的乘法,每次迭代执行一次。那么,我需要执行多少次调用t?在最外层循环的第一次迭代中,内部循环将迭代两次。在第二次外部迭代中,它将迭代三次,并且类似地达到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²)中。)

听起来对我来说是正确的。干得好!
x^2
是二次的。
x
上的一个多项式的顺序是
2
。你可以说你的复杂性是
O(i*j)
j=O(i)
,因此您有
O(n^2)
。每当您有嵌套循环时,它通常是
O(n^2)
:)请参见关于CS的问题。第三行应该是
j>=0