将执行多少次增量?

时间:2015-09-02 07:28:08

标签: c++ algorithm

我有以下代码

    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 N-1i = 0N-2i = 1等。 所以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

1...N-1i=02...N-2i=1 所以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

为什么呢?我错了吗?在哪里?

1 个答案:

答案 0 :(得分:4)

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

出于这个原因,增量(++cnt)可能会在0N(N-1)/2次之间执行。

可以到达这两个界限:所有0a[k] > 0N(N-1)/2全部a[k] == 0

对于增量总计,为外部N循环添加for,为内部N(N-1)/2循环添加for,并在N(N+1)/2包含在内。