【发布时间】:2013-02-26 10:02:32
【问题描述】:
我通过分析一个程序的运行时间有一个矛盾。例如,考虑以下代码:
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
.....
}
}
这里,第一个for循环的计算复杂度是O(n2),第二个循环的计算复杂度是O(n)。但是,第二个循环执行 n2 次,而第一个循环执行 n 次。例如,如果我们在内循环中放置一个 cout 语句,它会输出 n2 次,但是如果我们在第一个循环内但在内循环之外的某个位置放置一个 cout,它会输出 n 次。那么为什么我们说内循环的复杂度是O(n),而外循环的复杂度是O(n2)。我们说外循环的复杂度是O(n2) 但它执行 n 次,为什么会这样?我做错了什么吗?谢谢。
【问题讨论】:
-
第一个循环怎么会运行n^2次?
-
@Vallabh Patade 这就是我矛盾的地方。我们说外循环的复杂度是 O(n^2) 但它执行 n 次
-
我们说代码sn-p的复杂度是n^2。
标签: algorithm complexity-theory big-o asymptotic-complexity