将执行多少次增量

How many times increment will be executed?

本文关键字:多少次 执行      更新时间:2023-10-16

我有以下代码

    int cnt = 0;
    for (int i = 0; i < N; ++i)
    {
        for (int j = i + 1; j < N; ++j)
        {
           if(a[i] + a[j] == 0)
           { ++cnt;}
        }
    }

其中N是数组中元素的数量。

我开始学习算法,并试图找出增量将被执行多少次?

对于i,它将是N次。

对于j,当i = 0时为N-1次,当i = 1时为N-2次。所以N-1 + N-2 + ... + 0 = ((0 + N-1)/2)*N = N*(N-1)/2

那么cnt++将被执行多少次呢?

为了回答这个问题,我们需要找到==将被执行多少次?当然,它会在射程内。从0到一些值。我们的最终答案将在0 + number of(++i) + number of(++j)some value + number of(++i) + number of(++j)的范围内。

让我们找到这个some value

i=0时将为1...N-1,当i=1时为2...N-2等所以N-1 + N-2 + ... + 0 = N*(N-1)/2

所以答案是从N*(N-1)/2N + N(N-1)/2 + N(N-1)/2,所以从N*(N-1)/2 to N^2

但是R.Sedgwick在第33张幻灯片上说http://www.cs.princeton.edu/courses/archive/spring15/cos226/lectures/14AnalysisOfAlgorithms.pdf

答案将来自N*(N+1)/2 to N^2

为什么?我错了吗?哪里

内部循环(==测试(确实执行了N(N-1)/2次。

因此,可能在0N(N-1)/2之间执行增量(++cnt(。

这两个边界可以达到:当全部为a[k] > 0时为0,当全部为a[k] == 0时为N(N-1)/2


对于增量的总计数,将外部for循环的N和内部for循环的N(N-1)/2相加,并在N(N+1)/2之间(包括两者(。