以下代码:
print a
for (i = 0; i < n; i++)
for (j = i; j < n; j++)
print b
显然,打印a的n大只有1,但我不明白第二部分是1 / 2n + 1 / 2n ^ 2.
第一个for循环代表n然后第二个for循环代表(1/2 + 1 / 2n)我猜?
答案 0 :(得分:3)
外循环运行n
次。
内部循环运行n, n-1, n-2, ..., 1
次。
循环内部代码的复杂性为O(1)
,因此总复杂度为:
n + n-1 + n-2 + ... + 1 = n(n+1)/2 = (1/2)n^2 + (1/2)n = (n^2)/2 + n/2 = O(n^2)
答案 1 :(得分:0)
对于i = 0
,print
将执行n
次。
对于i = 1
,print
将执行n-1
次。
对于i = 2
,print
将执行n-2
次。
。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。
对于i = n - 1
,print
将执行1
次。
总结一下,print
将执行n + n-1 + n-2 + ... + 1
次。
因此,复杂性为O(n^2)
。
答案 2 :(得分:0)
在for循环中,可以通过
计算调用print语句的总时间n + (n-1) + (n-2) + ... + 1
总和为n(n+1)/2
。因此,这种复杂性的重要标志应该是O(n^2)
。
答案 3 :(得分:0)
如果您对离散数学感到满意,那么使用Sigma表示法逐步进行操作会让您看到所寻求的结果: