我有以下代码,我正在使用其中一个应用程序。我想计算这段代码的时间复杂度。
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)。 任何人都可以建议确定时间复杂度的下一步是什么。
答案 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
。低阶项不允许此函数支配另一个函数,也不允许任何常量。所以你放弃它们。