以下代码:
int func(int x, int y)
{
int flag=0;
for(flag=0; flag<x; flag++)
{
....
}
for(flag=0; flag<y; flag++)
{
....
}
return 0;
}
对于以下情况,时间复杂度(我的理解)是 -
x > y => O(x+y)
y < x => O(x+y)
x = y => O(2x)
有人可以验证我是否正确吗?
感谢。
答案 0 :(得分:1)
x&gt; y =&gt; O(x + y) - 是的。但是,如果,x = O(y),则只有O(x)。
y&lt; x =&gt; O(x + y) - 是的。上面的相同解释。
x = y =&gt; O(2x) - 不完全。您忽略了Big O分析中的常数因子。这个想法是,当x变为无穷大时,'2'或常数将对函数的增加率做出很大贡献。
x = y ^ 2 =&gt; O(y ^ 2) - Big O分析的另一个特征是你只考虑主要术语。
这里可以找到一个关于Big O分析的优秀介绍video讲座形式。查看Big O分析的第二讲。
答案 1 :(得分:0)
Big-O表示法不使用常数乘数。即,没有 O(2n),只有 O(n)。这与指数相反,通常会看到 O(2 ^ n)等。
您的函数是线性的,因此如果x == y
,那么数量级就会被列为 O(x)。