我读到了关于Big-O符号的内容。我理解了一些想法,但是当比较两种算法时,我不理解某些东西看起来如下 他说现有两种算法。
First f2(n) = 2n + 20 steps.
second f3(n) = n + 1 steps.
he write f2 = O(f3):
f2(n)/f3(n)
=((2n + 20)/(n + 1))<= 20;
he say Certainly f3 is better than f2?, of course f3 = O(f2), this time with c = 1.
我认为f3比f2好,因为因素较少。 我的问题
1)为什么常数c = 1他如何选择那个? 2)为什么f3 = O(f2)以及为什么f2 = O(f3)?
答案 0 :(得分:1)
这些都是线性函数,因此两者都是O(n)
,两者都是O
。 f3
比f2
快20倍,渐近。所有这些都同时成真。
答案 1 :(得分:0)
Patrick87的答案更多地解释了Big-O符号的渐近性质。我会告诉你更多的分析。让我们更仔细地检查f2
和f3
:
首先,f2(n)
:我们知道f2(n) = O(2n + 20)
。 20是常数,所以我们可以忽略它。所以,f2(n) = O(2n + 20) = O(2n)
。同样,2是常数,所以我们也可以忽略它,所以:f2(n) = O(2n + 20) = O(2n) = O(n)
。
这个分析意味着当n
增加时,2n + 20
函数的增长速度与2n
函数一样快,其增长速度与函数n
一样快。 {1}}。如果你考虑一下,这是有道理的:所有这些功能都是平行线。他们的增长率是一样的。
现在f3(n)
:我们知道f3(n) = O(n + 1)
。 1是常数,所以我们可以忽略它。所以,f3(n) = O(n)
。
这就是为什么f3
和f2
都是O(n)
的原因。这并不意味着这些函数对于给定的n
值采用完全相同的时间,或者f2
在时钟时间内与f3
一样快。它只是意味着两个函数的复杂度(即它们完成工作所花费的时间)以{em>速率增加,而n
增加。