哪种算法的时间复杂度更好?

时间:2013-02-13 22:25:15

标签: performance complexity-theory time-complexity

我读到了关于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)?

2 个答案:

答案 0 :(得分:1)

这些都是线性函数,因此两者都是O(n),两者都是Of3f2快20倍,渐近。所有这些都同时成真。

答案 1 :(得分:0)

Patrick87的答案更多地解释了Big-O符号的渐近性质。我会告诉你更多的分析。让我们更仔细地检查f2f3

首先,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)

这就是为什么f3f2都是O(n)的原因。这并不意味着这些函数对于给定的n值采用完全相同的时间,或者f2在时钟时间内与f3一样快。它只是意味着两个函数的复杂度(即它们完成工作所花费的时间)以{em>速率增加,而n增加。