sta*_*cho 2 c big-o time-complexity
代码1
int i = 0;
int j = 0;
while(i < n){
while(j < n){
printf("{%d,%d}",arr[i],arr[j]);
j++;
}
i++;
j = 0;
printf("\n");
}
Run Code Online (Sandbox Code Playgroud)
代码2
int result = 0;
int i = 0;
while (i < n / 2){
result += arr[i];
i += 1;
while (i >= n / 2 && i < n){
result += arr[i];
i += 1;
}
}
printf("%d\n", result);
Run Code Online (Sandbox Code Playgroud)
我只知道如何使用 for 循环找到时间复杂度,但我不确定 while 循环。如果有人能帮助我找到每个代码的总运行时间,我将不胜感激。
归根结底,for 循环是一个 while 循环。某种形式:
for(int i=0; i<n; i++)
Run Code Online (Sandbox Code Playgroud)
相当于:
int i=0;
while(i<n)
{
i++;
}
Run Code Online (Sandbox Code Playgroud)
事实上,在算法的纯数学分析中,您应该将算法中的任何 for 循环变成 while 循环(有几个原因)。
回到你的代码。分析很简单:
外层循环最多运行n次。
在任何循环迭代之前,j 的值为 0。
非正式地:我们可以在内循环的任何迭代之前知道 j 的值为 0。
在内部循环中,唯一更新 j 的语句是 j++。
内循环最多由循环保护运行 n 次。
对于外循环的每次迭代,外循环最多运行 n 次,内循环最多运行 n 次。所有其他陈述都是不变的。该算法的复杂度为 O(n*n)=O(n^2)
第二个稍微复杂一些,但是:
因此该算法运行 O(n/2+n/2) = O(n) 次