哪种算法更快?

时间:2015-05-04 20:24:59

标签: algorithm big-o code-complexity

我们的讲师给了我们他的代码

procedure linear_search (x: integer; a1, a2, …, an: integers)
   i := 1
   while ( i ≤ n and x ≠ ai )
     i := i + 1
     if i ≤ n then
        location := i
     else
        location := 0

这是我的

method Search (x integer, a1,a2....an integers)
   for i from 1 to n
   start
       if ai = x, location = i, break.
       else i++, location = 0.
   stop

就步骤而言,我的代码需要2n + 1个步骤才能完成,而其他代码需要2n + 2,因此我的代码在逻辑上更快。但是,在Big O术语中,它们都是O(n)。 那么我该怎么说,哪一个更快?或者我说他们是平等的?

1 个答案:

答案 0 :(得分:0)

就big-O而言,两者是相等的:你可以自由地减去常数并除以常数,因此两种算法的输入数都是线性的 - 即它们是O(n)。

一般来说,big-O不会告诉你算法究竟有多快。它将所有内容归结为一个公式,该公式描述了如果要增加输入的大小,性能或内存消耗会降低多快,从而为您提供适合比较的度量。

这绝不是提供完整的图片,只是粗略估计。其他重要的事情,例如缓存和分支效率,可以使一个程序比另一个程序快得多,即使它们都使用相同的大O效率度量来实现算法。