哨兵线性搜索比普通线性搜索更好吗?

时间:2017-09-12 14:29:54

标签: algorithm search

在传统的线性搜索中, 与所需数字进行比较时,有n个比较 和n + 1表示循环条件,总计进行2n + 1次比较。 但是,如果我们遵循以下程序,我们可以在最多<+ p>的n + 2次比较中得到答案

def sentinelSearch(ar,n,l):
# ar : array
# n : item to be searched
# l : size of array
last = ar[l-1] # saving last element in other variable
ar[l-1] = n # assigning last element as required
i = 0
while ar[i]!=n:
    i+=1
ar[l-1] = last
if (i<l-1) or n==ar[l-1]:
    print('Item found at',i)
else:
    print('Item not Found')

尽管两种算法的最坏情况时间复杂度都是O(n)。只是减少了比较次数,这是否会使这种'哨兵线性搜索'更好的算法用于搜索未排序的数组?

1 个答案:

答案 0 :(得分:1)

你必须对它进行基准测试。 但是有多种因素会影响结果,如:

  • 分支预测。检查某些条件比其他条件便宜。
  • 编译器优化。很多时候,数组上的循环被展开,你实际上比循环条件的n次比较少。

正如人们在评论中提到的,你的算法必须改变数组(通常不好),你必须为sentinel保持特殊值(并不总是可能)。因此,优化的真正好处实际上可以忽略不计。