// For the below algorithm, calculate the exact number of times
// System.out.println statement is executed as a function of n. Assume n≥1
for (int i=0; i<=n; i++) {
for (int j = i; j < 2*n; j++) {
System.out. println(”1 iteration executed!”);
}
}
这是解决方案,但是我很难理解数学。
Overall RT = 2n + (2n-1) + (2n-2) + … + n =
= (n+1)*n + (n+(n-1)+(n-2)+…+1+0) =
= n2 + n + n*(n+1)/2 =
= 1.5*n2 + 1.5n
答案 0 :(得分:1)
该循环在第一次迭代中运行2n次,然后每次运行n
次,直到运行第(n + 1)次为止每次减少1n。
2n + (2n-1) + (2n-2) + … + n
请注意,本系列中有n+1
个术语。
让我们从每一项中减去n
并将其分别添加。这使我们(n+1)*n
加上每一项减去n:
(n+1)*n + (2n-n) + (2n-1-n) + … + (n-n)
这可以简化为:
(n+1)*n + n + (n-1) + (n-2) + … + 0
现在,well known是1+2+3+...+n
的总和是(n+1)*n/2
,而n + (n-1) + (n-2) + … + 0
的确是:
(n+1)*n + (n+1)*n/2
现在我们可以将其相乘:
n^2 + n + (n^2)/2 + n/2
其中简化为:
1.5n^2 + 1.5n
答案 1 :(得分:0)
所以让我们逐步解决。假设n的值为4。
i
始于0
,所以j
这次也始于0
j
递增,直到比2*n
(即8
)小1。
这意味着这次j
的值将是0, 1, 2, 3, 4, 5, 6, 7
,总共8个不同的值
i
递增到1
,所以j
这次从1
开始
j
仍将递增,直到比2*n
小1或8
这次j
的值将是1, 2, 3, 4, 5, 6, 7
,总共7个不同的值。比上一次少了1!
下次,j
的值将为2, 3, 4, 5, 6, 7
。 6个不同的值。
此模式将一直持续到j
从4
开始。然后j
将采用4个不同的值,循环将退出。