可以解释一下打印语句执行了多少次

时间:2018-10-18 00:45:01

标签: java algorithm performance

 // 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 个答案:

答案 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 known1+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个不同的值。

此模式将一直持续到j4开始。然后j将采用4个不同的值,循环将退出。