【发布时间】:2014-12-19 17:46:04
【问题描述】:
我很难理解嵌套循环的时间复杂度。我已经搜索了数周的在线资源/书籍/等。但我就是不明白嵌套依赖循环是如何工作的。以这个为例
for (int i=0; i<n; i++) //n is even //n + 1
for (int j=i; j<n/2; j++) //(n/2 + 3)*n/4 + n/2 = n2/8+5n/4
cout << i << “,” << j <<endl; //(n/2 + 1)*n/4 = n2/8 + n/4
时间复杂度在 cmets 中,但我不明白它是如何得出这个答案的。我理解第一个循环中的 n+1;它运行 n 次加上失败案例。但从那里我不明白。如果有人能清楚地向我解释,我将不胜感激。
我也尝试用 n 值写出来,但我不明白如何处理跟踪以达到那种复杂性。
【问题讨论】:
-
您是在寻找“大 O”表示法(双循环是 O(N*N)),还是在更详细的级别。请注意,对于从 (n+3)/2 到 n-1 的 i 值,内部循环根本不执行,因为 j 已经大于 n/2。
-
更详细的级别,基本上注释的是每一行的时间复杂度,我正在试图弄清楚我是如何得到这些的。