因此,我从《算法第 4 版》一书中得到了这个计数算法,该算法在算法分析一章中使用,它们计算每个循环的频率,内部循环中的 if 语句和开头的声明。
他们将每个部分分为 A、B、C、D 和 E 部分。他们说每个部分都有以下频率:
E = X (depends on input)
D = (N^3)/6 - (N^2)/2 + N/3
C = (N^2)/2 - N/2
B = N
A = 1
我知道所有这些频率都来自部分和,但我不明白他们是如何得出每个答案的,如果有人能解释我为什么每个频率都是这样的,我将不胜感激。
public static int count(int[] a)
{
int N = a.length; // Part A
int cnt = 0; // Part A
for(int i = 0; i < N; i++) //Part A
for(int j = i+1; j < N; j++) // Part B
for(int k = j+1; k < N; k++) // Part C
if(a[i] + a[j] + a[k] == 0 // Part D
cnt++; // Part E
return cnt;
}