for(int i = 0; i < n; i++) {
for(int j = 0; j < i; j++) {
//Code
}
}
我知道第一个for循环是O(n),但是第二个呢?
答案 0 :(得分:0)
第二个循环的复杂性实际上等于1 + 2 + 3 + 4 ... + n-1
或者:
n-1
O( Σ )
i=0
为什么-1
?
因为你的for循环条件是<
而不是<=
试试这个程序:
#include <iostream>
int main()
{
for (int n = 0; n < 100; n++) {
int count = 0;
for (int i = 0; i < n; i++)
for (int j = 0; j < i; j++)
count++;
std::cout << "n = "<< n << " : " << count << std::endl;
}
while (1); // Yeah, I know....
}
您可以看到所有结果按n
答案 1 :(得分:0)
对于给定的代码,
for(int i = 0; i < n; i++) {
for(int j = 0; j < i; j++) {
//Code
}
}
外部循环执行O(n)次,如果仅考虑内部循环,则执行O(i)次。内循环中的代码执行的总次数是1 + 2 + 3 + ... + n-2 = ((n-2)*(n-1))/ 2 =(n 2 -3n + 2)/ 2。因此,整个代码的复杂性是O(n 2 )。