簡體   English   中英

將執行多少次增量?

[英]How many times increment will be executed?

我有以下代碼

    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-1次時i = 0 N-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 + 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

為什么? 我錯了嗎? 哪里?

內循環( == test)確實執行N(N-1)/2次。

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

這兩個界限可以達到: 0時所有a[k] > 0 ,和N(N-1)/2時的所有a[k] == 0


對於增量的總計數,為外部for循環添加N ,為內部for循環添加N N(N-1)/2 ,並在N(N+1)/2

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM