taw*_*eed 4 algorithm time-complexity asymptotic-complexity
我最近开始玩这个普林斯顿课程的算法,我观察了以下模式
上)
double max = a[0];
for (int i = 1; i < N; i++)
if (a[i] > max) max = a[i];
Run Code Online (Sandbox Code Playgroud)
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++;
Run Code Online (Sandbox Code Playgroud)
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++;
Run Code Online (Sandbox Code Playgroud)
这里的常见模式是随着循环中的嵌套增长,指数也会增加.如果我有20-for循环,我的复杂性将是0(N ^ 20),这是安全的吗?
PS:请注意,20只是我选择的一个随机数,是的,如果你在代码中嵌套20个for循环,那么你显然有些不对劲.
这取决于循环的作用.例如,如果我将第二个循环的结尾更改为只进行3次迭代,如下所示:
for (int i = 0; i < N; i++)
for (int j = i; j < i+3; j++)
if (a[i] + a[j] == 0)
cnt++;
Run Code Online (Sandbox Code Playgroud)
我们回到O(N)
关键是循环中的迭代次数是否与N有关,并且与N一样线性增加.
这是第二个循环进入N ^ 2的另一个例子:
for (int i = 0; i < N; i++)
for (int j = i; j < N*N; j++)
if (a[i] + a[j] == 0)
cnt++;
Run Code Online (Sandbox Code Playgroud)
这将是o(N ^ 3)
| 归档时间: |
|
| 查看次数: |
148 次 |
| 最近记录: |