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
?