我最近开始尝试普林斯顿大学的this课程中的算法,并观察到以下模式。
O(N)
O(N)
double max = a[0];
for (int i = 1; i < N; i++)
if (a[i] > max) max = a[i];
O(N^2)
for (int i = 0; i < N; i++)
for (int j = i+1; j < N; j++)
if (a[i] + a[j] == 0)
cnt++;
O(N^3)
for (int i = 0; i < N; i++)
for (int j = i+1; j < N; j++)
for (int k = j+1; k < N; k++)
if (a[i] + a[j] + a[k] == 0)
cnt++;
这里的常见模式是,随着循环中的嵌套层数增加,指数也会增加。 如果我有20个for循环,可以安全地假设我的复杂度为0(N^20)吗?
附注:请注意,20只是我随机选择的一个数字,如果您在代码中嵌套了20个for循环,显然存在问题。
N
的大小吗?如果所有循环都与N
线性变化,那么是的,你会得到N^x,其中x是嵌套循环的数量。 - keyser