我们的讲师给了我们他的代码
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)
。
那么我该怎么说,哪一个更快?或者我说他们是平等的?
答案 0 :(得分:0)
就big-O而言,两者是相等的:你可以自由地减去常数并除以常数,因此两种算法的输入数都是线性的 - 即它们是O(n)。
一般来说,big-O不会告诉你算法究竟有多快。它将所有内容归结为一个公式,该公式描述了如果要增加输入的大小,性能或内存消耗会降低多快,从而为您提供适合比较的度量。
这绝不是提供完整的图片,只是粗略估计。其他重要的事情,例如缓存和分支效率,可以使一个程序比另一个程序快得多,即使它们都使用相同的大O效率度量来实现算法。