计算代码的时间复杂度

时间:2013-07-14 13:26:52

标签: algorithm

我有以下代码,我正在使用其中一个应用程序。我想计算这段代码的时间复杂度。

      for (int i = 0; i < n-1; i++)
        {
            for (int j   = 0; j < n-i-1; j++)
            {
                //TODO
            }
        }

我尝试过以下方式计算:

: (n-1)(n-I-1)
: (n)(n-I-1) - (n-I-1)
: n^2-ni-n-n+i+1
: n^2-ni-2n+i+1

我不知道如何得出结论。虽然我看到n的最高值是o(n ^ 2)。 任何人都可以建议确定时间复杂度的下一步是什么。

2 个答案:

答案 0 :(得分:0)

此代码片段与此相同:

for m in n-1..0
    for j in 0..m
      i = n-1-m
      ...

这是“经典”O(N^2),除了外部循环从高到低而不是从低到高。

答案 1 :(得分:0)

你快到了。下一步是从多项式中删除低阶项:-ni-2n+i+1,然后留下n^2

通常,您还会删除附加到n^2的任何乘法常量。 I. e。将5放入5*n^2以获取n^2

这是从big-Oh的定义得出的,它关注一个函数在输入增加时是否支配另一个函数。随着输入量的增加,唯一重要的术语是n^2。低阶项不允许此函数支配另一个函数,也不允许任何常量。所以你放弃它们。