如何确定嵌套循环算法的计算复杂度?

时间:2015-10-29 18:31:03

标签: algorithm big-o complexity-theory

在查看了这个questionthis article和其他几个问题之后,我仍然无法找到一种通用方法来确定算法的计算复杂性,其中循环变量依赖于父循环& #39;变量。例如,

   for (int i = 0; i < n; i++) {
       for (int j = i; j < n; j++) {
           for (int k = i; k < j; k++) {
               //one statement
           }
       }
   }

我知道第一个循环的复杂度为n,但内循环让我感到困惑。第二个循环似乎执行n-i次,第三个循环似乎执行j-i次。但是,我不知道如何将其变成常规的Big-O语句。我不认为我可以说O(n(n-i)(j-i)),那么我怎么能摆脱这里的ij变量呢?

我知道这是n ^ 3的顺序,但我怎么能显示这个?我需要使用系列吗?

感谢您的帮助!

(如果你想知道,这是来自最大和连续子序列问题的暴力实施。)

1 个答案:

答案 0 :(得分:2)

  • 第一个循环平均点击N个项目。
  • 第二个循环在avarage上击中N / 2个项目
  • 第三个循环平均达到N / 4个项目

O(N * N / 2 * N / 4)约为O((N ^ 3)/ 8)约为O(N ^ 3)