// 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
2 回答
蝴蝶不菲
TA贡献1810条经验 获得超4个赞
循环在第一次迭代中运行 2n 次,然后每次减少 1 次,直到它运行时的第 (n+1) 次迭代n
。
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
现在,众所周知, 的总和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
哈士奇WWW
TA贡献1799条经验 获得超6个赞
所以让我们一步一步来。假设 n 的值为 4。
i
开始于0
soj
也开始在0
这个时间j
增量直到 1 小于2*n
8
这意味着j
这个时间的值将是0, 1, 2, 3, 4, 5, 6, 7
,总共 8 个不同的值
i
增量1
所以j
在开始1
这段时间j
仍然将递增,直到1小于2*n
或8
的值j
,这一次将是1, 2, 3, 4, 5, 6, 7
,共7个不同的值。比上次少了1!
下一次, 的值j
将为2, 3, 4, 5, 6, 7
。6 个不同的值。
这种模式将一直持续到j
开始4
。然后j
将采用 4 个不同的值,循环将退出。
添加回答
举报
0/150
提交
取消