[英]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-2
時i = 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-1
時i=0
, 2...N-2
時i=1
等,從而N-1 + N-2 + ... + 0 = N*(N-1)/2
所以答案是從N*(N-1)/2
到N + 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
)可能在0
到N(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
和N²
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.